A collaborative wiki with real-time editing, nested documents and full text search, built by the company that also sells it as a hosted product. It replaces Notion and Confluence for teams, and it is licensed under the Business Source License rather than an open source licence.
Our verdict on Outline#
Outline is the nicest thing to actually use in this category and the worst fit for one person. The blocker is not the database, it is authentication: the sample config states plainly that at least one third-party sign-in provider is required or you will have no sign-in options, and there is no local account fallback. That means standing up Keycloak, Authentik or Pocket ID before you can log in to your own wiki, and it means an IdP outage locks you out of your notes. File storage is less of a problem than it used to be, since FILE_STORAGE=local is the sample default and writes to /var/lib/outline/data, so MinIO is optional now. The licence is BUSL-1.1, not open source, with a change date of 1 September 2030 and Apache-2.0 after that; hosting Outline as a service for third parties terminates your rights. For a team of fifteen with an existing IdP it is excellent.
Who Outline is for#
Choose it if
- Teams that already run Keycloak, Authentik, Google Workspace or Entra and want SSO on day one
- Anyone who needs genuine real-time co-editing on the same document, which most alternatives here do not have
- Organizations replacing Notion where the editor quality and search are what people actually judge the tool on
- Operators comfortable with Postgres plus Redis and with reading a Business Source License before deploying
Look elsewhere if
- You are a single user and do not want to run an identity provider just to log in
- You need an OSI-approved licence for policy reasons; BUSL-1.1 is source-available until 2030
- You intend to offer it to third parties as part of a commercial service, which the Additional Use Grant forbids
What running it actually looks like#
Three containers: the app on port 3000, PostgreSQL 14 or newer, and Redis. Before it will start you need URL set to the fully qualified public address, SECRET_KEY and UTILS_SECRET generated with openssl rand -hex 32, and credentials for at least one auth provider. Outline wants a dedicated domain or subdomain and will not run under a subfolder. FORCE_HTTPS defaults to true, so a bare HTTP test on a LAN address redirects into a loop until you set it false or terminate TLS properly. The first person to sign in becomes the workspace owner, and subsequent users are matched by email address from the IdP. Migrations run on container start. Upgrades are a tag bump and restart; changing auth provider afterwards is where people create duplicate accounts.
Resource profile#
- Memory
- 550 MB idle, around 950 MB in ordinary use. Docs state 512 MB minimum and 1 GB or more recommended. The Node process sizing rule in the sample config is one web worker per 512 MB of server memory, so `WEB_CONCURRENCY=1` on a small box.
- CPU and acceleration
- Low at rest. The collaboration server does the work: every keystroke in a shared document is a Yjs update through Redis, so many concurrent editors cost CPU. Full text search runs in Postgres, so indexing load lands on the database.
- Storage growth
- Documents are rows in Postgres including their collaborative editing state, so the database grows faster than the raw text would suggest. Attachments go to `/var/lib/outline/data` on local storage or to a bucket if you set `FILE_STORAGE=s3`.
- Operational load
- 4 of 5, Heavy. Three services plus an external identity provider that is a hard dependency for logging in at all, secrets that are unrecoverable if lost, and a licence you have to read. The docs themselves say it is engineered as a horizontally scalable cloud platform and expects dev-ops experience.
Figures describe a small single-household install and are the working assumptions behind our stack planner. Your numbers will differ with library size, user count and hardware. See methodology.
Data and backup surface#
The Postgres database is the whole product: documents, revisions, collaborative state, users and permissions all live there. Daily dumps retained a month is what the docs recommend. Two things people forget. First, SECRET_KEY encrypts values inside the database, so if you lose the .env file the encrypted content is unrecoverable even with a perfect dump; store it in a password manager, not only on the host. Second, when FILE_STORAGE=local your attachments and images sit in /var/lib/outline/data, which is a Docker volume and is not in the database dump. Redis holds queues and pub/sub only and is regenerable.
Derived backup shape
Postgres dump. pg_dump (or pg_dumpall) into a file, then snapshot that file plus the app's data volume.
Traps and surprises#
No local accounts, ever
The shipped .env.sample says at least one third-party sign-in credential is required or you will have no sign-in options. There is no admin username and password escape hatch. If your OIDC provider's certificate expires, its container fails to start, or you fat-finger the client secret, you cannot get into Outline to fix anything. Keep the IdP on separate infrastructure and keep a tested restore of it.
Losing SECRET_KEY destroys encrypted content
Outline's own backup documentation warns that losing the SECRET_KEY environment variable makes all encrypted database content inaccessible. A Postgres dump alone is therefore not a complete backup. Treat .env as part of the backup set and keep a copy outside the machine that holds the database.
Local file storage is not in the database backup
The backup page tells you to snapshot Postgres and save your environment variables, and does not mention file storage. With the default FILE_STORAGE=local, every uploaded image and attachment is in the /var/lib/outline/data volume instead. Restore the database without that volume and every document renders with broken images.
BUSL-1.1 with a 2030 change date
Outline is not open source. The licence prohibits using it for a 'Document Service', meaning a commercial offering that lets third parties create their own teams and documents, and the project states that selling, reselling or hosting Outline as a service terminates your rights. The current LICENSE file names a Change Date of 2030-09-01, after which that release becomes Apache-2.0. Internal company use is fine.
It insists on its own domain and on HTTPS
Outline cannot be mounted at a subpath, so example.com/wiki is not an option; you need wiki.example.com. FORCE_HTTPS defaults to true and it builds absolute URLs from the URL variable, so a mismatch between URL, your proxy and the actual scheme produces redirect loops or an app that loads but cannot open a websocket for editing.
Specifications#
- Category
- Documents, notes and knowledge
- Licence
- BUSL-1.1 (Change Date 2030-09-01, converts to Apache-2.0) (Source available)
- Written in
- TypeScript / Node.js
- First release
- 2016
- Maturity
- Mature
- Datastore
- PostgreSQL 14+ with Redis 4+
- Default ports
3000- Ships as
- docker compose, node from source
- arm64 builds
- Yes
- Identity
- Native OIDC. Generic OIDC plus Google, Slack, Microsoft Entra and Discord are built in, and at least one of them is mandatory: there is no local username and password login at all.
- Replaces
- Notion, Confluence, Slite, Coda
- Project site
- www.getoutline.com
- Source
- github.com/outline/outline
- Documentation
- docs.getoutline.com/s/hosting
Alternatives to Outline#
Everything else in documents, notes and knowledge, closest in operational weight first.
| Tool | Ops load | Idle RAM | Licence |
|---|---|---|---|
| Docmost | 3, Moderate | 500 MB | AGPL-3.0 core, proprietary Docmost Enterprise licence for `ee` directories |
| Paperless-ngx | 3, Moderate | 450 MB | GPL-3.0 |
| Wiki.js | 3, Moderate | 260 MB | AGPL-3.0 |
| BookStack | 2, Light | 260 MB | MIT |
| HedgeDoc | 2, Light | 250 MB | AGPL-3.0 |
| Trilium Notes | 2, Light | 200 MB | AGPL-3.0 |
Where Outline comes up elsewhere#
Head to head
Migration guides
Sources#
Facts on this page were checked against the project's own material. Where a number is our own estimate rather than a published figure, the text says so.
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.