Tutorial

Self-hosting

Outline: Self-Hosted Wiki on VPS, Alternative to Notion

The deal under which Bending Spoons bought Airtable, announced in August 2026 and completed on 4 September, revived a question that technical teams and agencies keep asking: at what point does dependence on a SaaS vendor become an operational risk? Against that backdrop, Outline is back on the radar as a serious alternative to Notion and Confluence: elegant Markdown rendering, real-time editing, granular permissions. Before deploying it, two points matter: its BSL 1.1 licence, which is not open source in the OSI sense, and its installation requirements — a mandatory identity provider, PostgreSQL, Redis and storage for files.

11 min read6 steps
Contents· Why Outline rather than Notion or Confluence on a VPS1/8
  1. 01Why Outline rather than Notion or Confluence on a VPS
  2. 02What Outline concretely brings
  3. 03BSL 1.1 licence: Outline is not open source
  4. 04Outline vs Notion vs Confluence vs Docmost
  5. 05Prerequisites for hosting Outline on a VPS
  6. 06Deploying Outline with Docker Compose
  7. 07Updating Outline without nasty surprises
  8. 08When to choose Docmost over Outline

Why Outline rather than Notion or Confluence on a VPS

Notion and Confluence share the same structural flaw: their pricing is indexed on the number of users, and it climbs as soon as the team grows. At Notion, AI has been reserved for the Business and Enterprise plans since the announcement of 13 May 2025: its price is built into every seat, whether you use it or not. The Business plan is listed at €19.50 per member per month on annual billing on notion.com/pricing (the price shown to a visitor in the euro area) — €390 a month for twenty people, before the Notion credits billed on top to run custom agents. All that for a wiki whose data, roadmap and next acquisition date you do not control.

Outline breaks that logic. Hosted on your own VPS, the cost is fixed: you pay for the server, not for each extra collaborator. The rendering is polished — clean typography, code blocks with syntax highlighting, embedded images, tables — and simultaneous editing runs over WebSockets. Full-text search is indexed directly in PostgreSQL: no external service, no extra cost. For a technical team of 10 to 50 people, it is one of the most complete self-hosted wikis.

The Airtable buyout is not a side note. Bending Spoons has made a speciality of acquiring popular SaaS tools — Evernote, Meetup, WeTransfer — and then reshaping their economics. It says it intends to invest in Airtable, but when your company documentation relies on a third-party SaaS, a change of owner can mean higher prices, reduced free features or a pivot towards a model that no longer fits your use. Hosting Outline on your own infrastructure takes you out of that risk.

What Outline concretely brings

  • Real-time Markdown rendering — the editor feels like Notion without the proprietary blocks
  • Collaborative editing — several writers on the same document via WebSockets and Redis
  • Permissions per collection and per group — read-only, comment, edit, admin
  • Full-text search — indexed in PostgreSQL, working from the moment you install
  • Attachments and images — on the VPS disk by default, or on S3-compatible storage (MinIO, Backblaze B2, AWS S3)
  • Documented API — plugs into your CI/CD pipelines or scripts; it also automates content exports
  • Import from Notion and Markdown — the Notion import goes through an integration you declare; the Confluence importer is reserved for the Business and Enterprise editions

BSL 1.1 licence: Outline is not open source

This is the point comparisons often skip. Outline is published under the Business Source License 1.1 (BSL 1.1). The repository's licence file says so itself: "not an Open Source license" — this is not an interpretation, it is the authors' own wording.

In practice, the licence grants use of the software on one condition: do not run it as a "Document Service", meaning do not offer Outline as a documentation service to third parties. The official restrictions page is unambiguous: selling, reselling or hosting Outline as a service is a breach, and a breach terminates the licence automatically. A software vendor wanting to offer a paid Outline wiki to its customers is therefore outside the licence; an agency hosting it for clients should ask the vendor before deploying.

For internal team use — knowledge base, product documentation, runbooks, onboarding — you can self-host freely.

The switch to Apache 2.0 has no single date: each version has its own, four years after its release. The LICENSE file of version 1.12.0, released on 23 October 2026, sets that change for 2030-10-23. The version you deploy today will only become fully permissive in 2030, and every update pushes the date back for the new code.

Practical summary: internal use, no problem. Resale or service to clients: read the licence and ask the vendor before deploying. To place the BSL among "source available" licences, see our BSL and SSPL analysis.

Outline vs Notion vs Confluence vs Docmost

Scroll the table

OutlineNotionConfluenceDocmost
Licence modelBSL 1.1 (each version → Apache 2.0 after 4 years)Proprietary SaaSProprietary SaaSAGPL-3.0 (core) + paid editions
Self-hostingYes — Docker + VPSNoYes (Data Center, expensive)Yes — Docker + VPS
PricingFixed server costPer member/monthPer userFixed server cost (free edition)
Real-time editingYes (WebSockets + Redis)YesYesYes (WebSockets + Redis)
Required stackPostgreSQL + Redis + file storageN/A (SaaS)PostgreSQL/Oracle + heavy infraPostgreSQL + Redis
Full-text searchBuilt into PostgreSQLYes (SaaS)YesBuilt into PostgreSQL
Notion / Confluence importNotion yes; Confluence in paid editionExport onlyExport onlyNotion yes; Confluence in paid edition
Sign-inSSO required (OIDC, Google, Slack, Microsoft, Discord)Notion accountAtlassian accountEmail and password; SSO in paid edition

Prerequisites for hosting Outline on a VPS

Outline is made of three services that must run together.

PostgreSQL (version 14 or later) stores every document, user and permission: it carries the state of your wiki. Redis (version 4 or later) handles sessions, the WebSockets behind real-time editing and the background job queues; if it goes down, simultaneous editing stops. File storage receives attachments and images: on the VPS disk by default (FILE_STORAGE=local, folder /var/lib/outline/data), or in an S3-compatible bucket (FILE_STORAGE=s3) — a MinIO on the same VPS, Backblaze B2 or AWS S3. Moving files to S3 keeps PostgreSQL backups light and lets the attachment volume grow without touching the application server.

Sizing: the official documentation requires at least 512 MB of memory and recommends 1 GB or more when users are numerous. For a team of 20 to 50 people with PostgreSQL and Redis on the same machine, aim for 2 vCPU, 4 GB of RAM and 20 GB of SSD, more if attachments stay local. A VPS Power (4 vCPU, 8 GB) leaves headroom for simultaneous editing peaks. The number of processes is set with WEB_CONCURRENCY: count one process per 512 MB of available memory.

Authentication is the prerequisite people discover too late. Outline has no email-and-password sign-in: at least one provider must be configured — Slack, Google, Microsoft Entra, Discord or a generic OIDC server (Authentik, Keycloak…) — otherwise the installation offers no way to sign in. SAML is reserved for the Business and Enterprise editions. Plan an SMTP server too: it sends notifications ("document updated") and enables sign-in by email link.

On the host: Docker and Docker Compose v2, a reverse proxy (Nginx or Caddy), a valid TLS certificate and a dedicated domain name (wiki.yourdomain.com): the URL variable must match the public address exactly.

Deploying Outline with Docker Compose

  1. Create the `docker-compose.yml` file

    Create a dedicated directory:

    mkdir -p /opt/outline && cd /opt/outline

    Then the compose file. Pin a precise version rather than latest, and publish port 3000 on the loopback interface only:

    services:
      outline:
        image: docker.getoutline.com/outlinewiki/outline:1.12.0
        env_file: .env
        ports:
          - "127.0.0.1:3000:3000"
        volumes:
          - outline_data:/var/lib/outline/data
        depends_on:
          - postgres
          - redis
    
      postgres:
        image: postgres:18
        environment:
          POSTGRES_USER: outline
          POSTGRES_PASSWORD: password
          POSTGRES_DB: outline
        volumes:
          - postgres_data:/var/lib/postgresql
    
      redis:
        image: redis:7
        volumes:
          - redis_data:/data
    
    volumes:
      outline_data:
      postgres_data:
      redis_data:

    The Postgres image creates the user and database on first start from POSTGRES_USER, POSTGRES_PASSWORD and POSTGRES_DB: without a password, the container refuses to start.

  2. Configure the `.env` file

    Generate the secret key and the utility key:

    openssl rand -hex 32   # SECRET_KEY
    openssl rand -hex 32   # UTILS_SECRET

    Essential .env variables (example with an OIDC provider):

    URL=https://wiki.yourdomain.com
    PORT=3000
    SECRET_KEY=<generated key>
    UTILS_SECRET=<generated key>
    DATABASE_URL=postgres://outline:password@postgres:5432/outline
    PGSSLMODE=disable
    REDIS_URL=redis://redis:6379
    FORCE_HTTPS=true
    WEB_CONCURRENCY=2
    FILE_STORAGE=local
    FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data
    OIDC_CLIENT_ID=<client-id>
    OIDC_CLIENT_SECRET=<client-secret>
    OIDC_AUTH_URI=https://auth.yourdomain.com/application/o/authorize/
    OIDC_TOKEN_URI=https://auth.yourdomain.com/application/o/token/
    OIDC_USERINFO_URI=https://auth.yourdomain.com/application/o/userinfo/
    SMTP_SERVICE=<service>
    SMTP_USERNAME=<user>
    SMTP_PASSWORD=<password>
    [email protected]

    PGSSLMODE=disable is needed when PostgreSQL runs on the same machine without TLS: without it, Outline attempts an encrypted connection and fails. For Google, Slack, Microsoft or Discord, replace the OIDC block with that provider's variables (GOOGLE_CLIENT_ID, SLACK_CLIENT_ID…) listed in the official sample file. Back this file up off the server: losing SECRET_KEY makes the encrypted data in the database unreadable.

  3. Start the stack

    docker compose up -d
    docker compose logs -f outline
    docker compose ps

    Database migrations run automatically when the Outline container starts: follow the logs until it reports listening on port 3000, then check that all three services are running.

  4. Configure the reverse proxy

    Outline listens on port 3000 locally. Example Nginx block:

    server {
        listen 443 ssl;
        server_name wiki.yourdomain.com;
    
        ssl_certificate /etc/letsencrypt/live/wiki.yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/wiki.yourdomain.com/privkey.pem;
        client_max_body_size 260m;
    
        location / {
            proxy_pass http://127.0.0.1:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_cache_bypass $http_upgrade;
        }
    }

    The Upgrade and Connection headers are essential for the WebSockets behind real-time editing; client_max_body_size must cover the upload size Outline allows (FILE_STORAGE_UPLOAD_MAX_SIZE). With Caddy, two lines are enough and the Let's Encrypt certificate is obtained and renewed automatically:

    wiki.yourdomain.com {
        reverse_proxy 127.0.0.1:3000
    }
  5. Create the first administrator account

    Open https://wiki.yourdomain.com and sign in through the configured identity provider: the first authenticated account becomes the workspace administrator.

    To invite colleagues, go to Settings → Members → Invite. Invitations and notifications go out through the SMTP server declared in .env.

  6. Schedule backups

    What to back up: the PostgreSQL database, the file volume if FILE_STORAGE=local, and the .env. Example for a daily cron job:

    cd /opt/outline
    docker compose exec -T postgres pg_dump -U outline outline | gzip > outline-$(date +%F).sql.gz
    docker run --rm -v outline_outline_data:/data -v "$PWD":/backup alpine \
      tar czf /backup/outline-files-$(date +%F).tar.gz -C /data .

    Outline's documentation recommends at least one backup a day, kept for about a month. In addition, Settings → Export produces an HTML, Markdown or JSON archive readable without Outline.

Updating Outline without nasty surprises

Outline publishes tagged Docker images: avoid latest in production and target a precise version (outlinewiki/outline:1.12.0 as of 7 November 2026), after reading the release notes on the releases page.

Migrations apply automatically when the container restarts, and the documentation warns that they are not always backward compatible: rolling back to the previous image is not always enough. A database backup before every update is therefore mandatory, not optional.

cd /opt/outline
docker compose exec -T postgres pg_dump -U outline outline | gzip > before-update.sql.gz
# change the image tag in docker-compose.yml, then:
docker compose pull outline
docker compose up -d outline
docker compose logs -f outline

On a large wiki, test the new version first on a copy of the database restored in a staging environment.

When to choose Docmost over Outline

Outline is the right choice if you want polished Markdown rendering comparable to Notion, robust simultaneous editing and a connection to an existing identity provider (OIDC, Google, Microsoft). Its steady release pace — 1.11.0 and 1.12.0 in October 2026 — and its active community are solid arguments for a team planning for the long term. Comments, revision history, and Slack, GitHub and Linear integrations make it one of the most complete tools in the self-hosted segment.

Docmost is a more recent alternative (2023) whose core is published under AGPL-3.0 — a genuine open source licence in the OSI sense, with no restriction on use as a service. Its advanced features (SAML/OIDC/LDAP SSO, API keys, Confluence importer, databases), however, belong to paid editions under a separate licence. Its stack is comparable — PostgreSQL and Redis — but no identity provider is imposed, since the free edition accepts email-and-password sign-in. If licence qualification is a blocking criterion — especially if you are building a product that would embed a knowledge base for your end users — Docmost is worth evaluating in parallel. This article focuses on Outline; for step-by-step installation, see our dedicated Docmost guide, and for a migration from Notion, our analysis of Notion's price increase.

The two coexist without cannibalising each other: Outline has more advanced features in its free edition and a more established community, Docmost a more permissive licence and sign-in without mandatory SSO. The choice depends on your legal context and technical needs.

Deploy your team wiki on a VPS

A VPS Power (4 vCPU, 8 GB) comfortably covers the full Outline stack — PostgreSQL, Redis and attachment storage — for a team of fewer than 50 people.