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
| Outline | Notion | Confluence | Docmost | |
|---|---|---|---|---|
| Licence model | BSL 1.1 (each version → Apache 2.0 after 4 years) | Proprietary SaaS | Proprietary SaaS | AGPL-3.0 (core) + paid editions |
| Self-hosting | Yes — Docker + VPS | No | Yes (Data Center, expensive) | Yes — Docker + VPS |
| Pricing | Fixed server cost | Per member/month | Per user | Fixed server cost (free edition) |
| Real-time editing | Yes (WebSockets + Redis) | Yes | Yes | Yes (WebSockets + Redis) |
| Required stack | PostgreSQL + Redis + file storage | N/A (SaaS) | PostgreSQL/Oracle + heavy infra | PostgreSQL + Redis |
| Full-text search | Built into PostgreSQL | Yes (SaaS) | Yes | Built into PostgreSQL |
| Notion / Confluence import | Notion yes; Confluence in paid edition | Export only | Export only | Notion yes; Confluence in paid edition |
| Sign-in | SSO required (OIDC, Google, Slack, Microsoft, Discord) | Notion account | Atlassian account | Email 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
Create the `docker-compose.yml` file
Create a dedicated directory:
mkdir -p /opt/outline && cd /opt/outlineThen 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_PASSWORDandPOSTGRES_DB: without a password, the container refuses to start.Configure the `.env` file
Generate the secret key and the utility key:
openssl rand -hex 32 # SECRET_KEY openssl rand -hex 32 # UTILS_SECRETEssential
.envvariables (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=disableis 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: losingSECRET_KEYmakes the encrypted data in the database unreadable.Start the stack
docker compose up -d docker compose logs -f outline docker compose psDatabase 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.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
UpgradeandConnectionheaders are essential for the WebSockets behind real-time editing;client_max_body_sizemust 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 }Create the first administrator account
Open
https://wiki.yourdomain.comand 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.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 outlineOn 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.