BookStack vs Wiki.js vs Outline: Which One Fit You?
Compare BookStack, Wiki.js and Outline for setup, editors, login and search. See why BookStack suits solo admins, while teams may prefer Outline with an identity provider.
Which self-hosted wiki you suppose run
Self-hosted wiki dey put your team documents for one searchable place on server wey you control. BookStack, Wiki.js and Outline all fit do this work. The main difference na how much setup you need do before the first page go load, and who dem allow make login.
BookStack na the easiest to set up and e get the strongest opinion about structure. Wiki.js give you the widest choice of editors for one page tree. Outline get the best writing experience among the three, but the documented production setup require outside identity provider to create the first workspace.
Everything below come from the projects' own documentation and the configuration files wey dem publish. This na capability comparison, no be benchmark. Version numbers and requirements get date because all three projects dey change.
Structure na the real choice
BookStack dey fix the shape of your content. Page dey inside book, book fit contain chapters, and shelves dey group books. You no fit invent fifth level. Na this limit be the product: new writer go know where page suppose dey because na only one place e fit go. The cost be say content wey no fit the shape go dey forced inside am.
Wiki.js dey use path tree, like folders for disk. Page for ops/backup/restic dey anywhere wey you put am, and na you dey choose the depth. Nothing stop two people from filing the same subject under two different branches, so Wiki.js instance need one person wey own the tree.
Outline dey use collections wey documents dey nested inside other documents. To move document, na drag with mouse. E flexible pass the three, so na e easiest to allow make structure drift.
BookStack: the smallest install
BookStack na PHP application wey MySQL dey back. As of October 2026, the documented requirements na PHP 8.2 or newer, plus either MySQL 8.0 or MariaDB 10.6 or newer. You also need Composer 2.2 or newer if you install from source. The current release line na 26.09, wey dem release on September 24, 2026. The newest stable release na 26.09.2, a security release from October 20, 2026. From 26.09 onward, you must set one APP_KEY value. The container steps below already cover this. BookStack also publish one critical PHP security notice on October 21, 2026. Update the underlying PHP packages, or pull and recreate the container with a patched image. The BookStack version alone no confirm say PHP don get the patch.
The project officially support installation scripts and guidance for the Ubuntu LTS releases wey e list. Currently, dem be 22.04, 24.04 and 26.04. Sometimes, e also publish unsupported guides and scripts for other environments. The 24.04 script install Apache, MySQL 8.0 and PHP 8.3 for you. For 26.04, use installation-ubuntu-26.04.sh for the commands below instead. E install MySQL 8.4 and PHP 8.5.
wget https://codeberg.org/bookstack/devops/raw/branch/main/scripts/installation-ubuntu-24.04.sh
chmod a+x installation-ubuntu-24.04.sh
sudo ./installation-ubuntu-24.04.shRead the warning for that script before you run am. The documentation talk say e be "ONLY FOR A FRESH OS, it will install Apache, MySQL 8.0 & PHP 8.3 and could OVERWRITE any existing web setup on the machine". The 24.04 script check for existing Apache configuration and MySQL data. E abort before installation if e find either one. Use containers there instead, or install BookStack by hand on top of existing LAMP stack for Ubuntu 24.04.
The container route use the LinuxServer.io image. Na one of the two community container setups wey the BookStack documentation list. BookStack need session encryption key and e no go serve pages without one, so generate am first.
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkeyCopy the value wey e print into APP_KEY, then write the service. This service also need an existing MySQL or MariaDB database. Set the DB_* values to match am, because the snippet no create database service.
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
container_name: bookstack
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- APP_URL=https://wiki.example.com
- APP_KEY=paste_the_generated_key_here
- DB_HOST=bookstack_db
- DB_PORT=3306
- DB_USERNAME=bookstack
- DB_PASSWORD=change_me
- DB_DATABASE=bookstackapp
volumes:
- ./config:/config
ports:
- 6875:80
restart: unless-stoppedAPP_URL must match the address wey readers actually type, including the scheme and any port. Set am to http://localhost and then serve the site over HTTPS. Generated links and redirects go point to the wrong host, and readers go see login page wey dey loop back to itself. If compose files be new to you, start with Docker Compose basics for a VPS before this one.
Bring am up and check say the application dey answer, not only say the container dey run:
docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/loginA 200 OK mean say the PHP application don boot and reach the database. A 500 need the application error log to diagnose am. By default, BookStack write its errors to a log file instead of the container output. Open ./config/log/bookstack/laravel.log on the host to see the cause. docker compose logs bookstack show the container own startup messages, and dem fit no include the application error.
Wiki.js: one tree, editors plenty
Wiki.js na Node.js application. The documented Docker setup pair am with PostgreSQL, though the software still accept MySQL, MariaDB, MSSQL and SQLite. Na this compose file dey the project own Docker page:
services:
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: wiki
POSTGRES_PASSWORD: wikijsrocks
POSTGRES_USER: wikijs
logging:
driver: none
restart: unless-stopped
volumes:
- db-data:/var/lib/postgresql/data
wiki:
image: ghcr.io/requarks/wiki:2
depends_on:
- db
init: true
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: wikijs
DB_PASS: wikijsrocks
DB_NAME: wiki
restart: unless-stopped
ports:
- "80:3000"
volumes:
db-data:Change POSTGRES_PASSWORD and DB_PASS together before you run am, because dem be one credential and the sample value dey public. Dem pin the tag to ghcr.io/requarks/wiki:2 intentionally. The documentation advise against latest, because major version jump dey change the database schema while instance dey run.
Version 2 na the line to run. As of October 27, 2026, the newest version 2 release na 2.5.317, bug-fix build from October 23, 2026 wey rebuild the image with the latest Node security updates. Dem dey publish Version 2 releases now from separate requarks/wiki-v2 repository, and :2 image tag still dey track dem. Version 3 dey public beta. Its installation documentation talk say dem tag its images as 3.0.0-beta and plain 3 and 3.0 tags no go work until beta phase end. Treat am as preview, no be production target. The previous release, 2.5.316 from October 2, 2026, add export utility to move content go version 3 later.
For first load, Wiki.js go guide you through in-browser setup wey create the administrator account. Until you finish am, anybody wey reach the port go see that wizard, so put the service behind your reverse proxy and TLS (transport layer security) before you open the firewall. Wiki with its own hostname fit sit naturally behind Traefik for front of several Docker apps when the server dey host more than this one service.
The editor choice na why people dey pick Wiki.js. One instance fit hold Markdown pages, visual editor pages, raw HTML pages and AsciiDoc pages side by side. This one help when you dey import old content for format wey you no wan convert. But e fit still make the wiki get four different style standards, so decide the default editor on day one and write the decision down.
Outline: editor wey best, but prerequisite plenty
Outline na wetin people usually mean when dem talk say dem want something wey go feel like commercial notes tool. Na Node.js application, and the current release as of October 27, 2026 na 1.12.0, wey come out October 23, 2026. This release move the Docker image go Node version wey fix some Node vulnerabilities wey dem disclose recently, so update older installs. The sample environment file show wetin e need: PostgreSQL through DATABASE_URL, Redis through REDIS_URL, two random secrets, and one publicly reachable URL.
openssl rand -hex 32
openssl rand -hex 32Run am two times and keep both values. The first one become SECRET_KEY, and the second one become UTILS_SECRET. The main part of the environment file go look like this:
NODE_ENV=production
URL=https://docs.example.com
PORT=3000
SECRET_KEY=<first openssl value>
UTILS_SECRET=<second openssl value>
DATABASE_URL=postgres://outline:change_me@postgres:5432/outline
PGSSLMODE=disable
REDIS_URL=redis://redis:6379
FILE_STORAGE=local
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/dataPGSSLMODE=disable only correct when the database dey for the same machine or the same Docker network. Leave am out when you dey reach the database across network, otherwise the connection go travel without encryption. Attachments no longer force you to use object storage: FILE_STORAGE=local write uploads to the directory above. This directory must be a volume wey the container fit write to, and your backups must include am. Set FILE_STORAGE=s3 with the AWS_* values instead if you want store those files inside an S3 compatible bucket.
Now na the part wey dey surprise people. Outline no get built-in username and password login. The sample configuration itself talk say third-party sign-in credentials dey required: "at least ONE OF these is required for a working installation or you'll have no sign-in options". The documented providers include Google, Slack, Microsoft Entra, Discord, and any generic OpenID Connect (OIDC) server through OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI and OIDC_USERINFO_URI. Existing workspaces fit also enable passkeys and email links or codes. Email login need SMTP and e no bypass SSO for accounts wey link to an SSO provider.
So the honest cost of Outline documented production setup na Outline plus PostgreSQL plus Redis plus an identity provider. If your team already dey sign in with Google Workspace or Microsoft Entra, Outline go attractive well-well. If e no be so, you go also self-host something like Keycloak or Authentik. That one na another service wey you must patch and back up. Plan memory well: Outline own guidance na roughly 512 MB for each web process, controlled by WEB_CONCURRENCY, on top of the database and Redis.
How each one dey handle who fit read wetin
BookStack get local email and password accounts out of the box, and e support LDAP, SAML2 and OIDC as alternatives. You set permissions for each role, and you fit override dem for one shelf, book, chapter or page. Book and chapter permissions inherit go child content unless you override dem; you must copy shelf permissions to books explicitly.
Wiki.js too dey ship with local accounts, and e add plenty strategies wey you enable for the admin area. Its page rules fit allow or deny access by path pattern. This powerful, but e easy to configure am wrongly, because rule wey you write for ops/* go silently cover every page wey you later file under that path.
Outline use your identity provider for SSO membership, and inside Outline you control access by collection, document and group. Users wey you remove from the identity provider go log out when dem next load Outline; suspend dem inside Outline to end existing sessions immediately.
How search dey work for each
Search na where wiki fit prove say e useful, or turn to folder wey full of forgotten files.
BookStack searches the database and gives readers query language wey dem fit learn within one minute. Quoting a phrase, like "london meeting", requires that exact string. Square brackets dey search tags: [location=london] matches by tag name, value, or both, with comparisons including !=, >= and like. Curly braces dey filter metadata, like {created_after:2016-12-30}. You fit negate any exact, tag, or filter term by putting - before am. BookStack limit how many terms of each type one query fit contain, so e go trim very long query instead of running am.
Wiki.js treats search as pluggable module. The documented engines na basic database engine, PostgreSQL engine, Elasticsearch, Algolia, AWS CloudSearch, and Azure Search. The basic engine matches titles, descriptions, and paths instead of page bodies. If you dey run PostgreSQL, switch to PostgreSQL engine for the admin area, because e uses the database own full text index instead of simple matching. Keep Elasticsearch for wiki wey large enough for you to accept running and patching another search service.
Outline searches PostgreSQL full text indexes. Its built-in keyword search no need separate search service. For team wiki wey get low thousands of documents, na the option wey requires the least work among the three.
Which one fit you
Pick BookStack if you want make the wiki dey run this afternoon and you prefer to argue about content instead of structure. E get the fewest moving parts: one PHP application and one MySQL database. E good for internal runbooks and customer documentation, and e good for teams where most writers no be engineers. E also easiest to back up among the three, because the state na one database dump plus the uploaded files and the .env configuration, including APP_KEY.
Pick Wiki.js if you need one specific editor or authentication strategy wey the others no offer, or if you dey import plenty existing Markdown or AsciiDoc and you want preserve the path structure. Accept say you dey run a heavier stack, and pin the major version tag.
Pick Outline if writing quality matter pass, the wiki na for team instead of public, and you already get identity provider. E reward that setup with editor wey people genuinely enjoy to use. No pick am as your first self-hosted application.
If none of the three fit, the mismatch usually na the content type. Scanned invoices and contracts belong inside document management system like Paperless-ngx instead of wiki, and forcing dem inside one na why many wikis eventually get abandoned. The other common mismatch na when you want workspace instead of wiki, with documents, tables and whiteboard for one canvas. Na there self-hosted AFFiNE workspace fit better pass any of the three above. For wider view of other things wey deserve place for your own server, see self-hosting shortlist for 2026.
Sizing and backups
All three fit run for small VPS, but the realistic minimum dey different because of the things wey dey behind each one. BookStack na one application process plus MySQL. Wiki.js na one Node process plus PostgreSQL. Outline na one Node process, PostgreSQL, and Redis, usually with identity provider join am. Na why Outline need extra memory.
Back up the database and uploads together. Restore both for throwaway instance one time before you trust that backup. Wiki backup wey nobody don restore na just guess. For BookStack, this mean mysqldump plus the /config volume. For Wiki.js and Outline, e mean pg_dump plus the data volume. For Outline, e also include anything wey dey inside FILE_STORAGE_LOCAL_ROOT_DIR.
FAQ
Which self-hosted wiki easiest to install?
BookStack. Na one PHP application with MySQL database, and the project releases installation script for Ubuntu 24.04 wey dey set up Apache, MySQL 8.0 and PHP 8.3 for one run. The container image need an APP_KEY, an APP_URL and credentials for existing database. Wiki.js adds Node runtime and PostgreSQL server, while Outline adds Redis and outside identity provider for the documented first setup.
I fit use Outline without Google or another SSO provider?
The documented production setup need provider to create the first workspace. Outline no get local username and password login. Its sample configuration state say at least one third-party sign-in provider dey required, otherwise you no go get any sign-in option. You fit use Google, Slack, Microsoft Entra, Discord, or any generic OpenID Connect server like self-hosted Keycloak or Authentik. Existing workspaces fit enable passkeys or email links and codes, but SMTP dey required for email login; accounts wey link to SSO still use that provider.
Make I install Wiki.js 3 or Wiki.js 2?
Version 2. As of October 27, 2026, the newest version 2 release na 2.5.317, from October 23, 2026, and version 3 still dey beta, with images wey carry 3.0.0-beta tag. Pin your image to ghcr.io/requarks/wiki:2 instead of latest, because major version change dey alter database schema while instance dey run.
Which one get the best search?
Dem strong for different ways. BookStack give readers query language with exact phrases, tag filters like [location=london] and metadata filters like {created_after:2016-12-30}, and you fit negate any of those terms with leading -. Outline built-in keyword search no need separate search service. Wiki.js get the most tuning options, because you choose the engine, and PostgreSQL engine dey search page bodies wey the basic engine no dey search.
I fit move my content from one go another later?
Partly, and you suppose expect manual work. All three fit export Markdown, but BookStack built-in import dey accept its Portable ZIP format, so Markdown by itself no be direct import route into BookStack. Structure no dey survive cleanly: BookStack books and chapters no get equivalent for Outline nested documents, and Wiki.js paths no map to BookStack fixed hierarchy. Attachments, permissions and page history na the parts wey most likely go lost, so export sample and check dem before you commit to migration.