SSD Nodes Learn Hosting plans →
How to do am Matt ConnorBy Matt Connor · Updated 2026-08-13

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 before the first page go load, and who get permission to log in.

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 e no go allow anybody sign in until you connect outside identity provider.

Everything for this comparison come from the projects' own documentation and their published configuration files. This na capability comparison, no be benchmark. We add date to version numbers and requirements 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 July 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 am from source. The current release line na 26.05.

The project dey publish one installation script for each Ubuntu release. The 24.04 script go install Apache, MySQL 8.0, and PHP 8.3 for you.

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.sh

Read 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". If server already dey answer on port 80, the script go take that port and rewrite the Apache configuration. Use containers for that kind server, or install BookStack by hand on top of existing LAMP stack for Ubuntu 24.04.

The container option dey use the LinuxServer.io image, wey na the option BookStack documentation recommend. 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 appkey

Copy the value wey e print into APP_KEY, then write the 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-stopped

APP_URL must match the address wey readers actually type, including the scheme and any port. Set am to http://localhost, then serve the site over HTTPS. If you no do this, generated links and redirects go point to the wrong host, and readers go see login page wey dey return to itself. If compose files still new to you, start with Docker Compose basics for VPS before this one.

Bring am up and check say the application dey answer, no be only say the container dey run:

docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login

A 200 OK mean say the PHP application don boot and reach the database. A 500 almost always mean say APP_KEY empty or the database credentials no match, and docker compose logs bookstack go print which one of the two dey cause am.

Wiki.js: one tree, several editors

Wiki.js na Node.js application. The documented Docker setup dey 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 on purpose. 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 July 2026, the newest version 2 release na 2.5.314, wey come out for May 2026. Version 3 dey available, and the documentation for am talk say: "This site is for the unstable beta release of Wiki.js 3.0. You should NOT install this in production." Treat the :3 tag as preview.

For first load, Wiki.js go guide you through in-browser setup wey go 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 for its own hostname fit naturally sit behind Traefik in 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 want convert. E fit still make you end up with four house styles for one wiki, so decide the default editor on day one and write that decision down.

Outline: the best editor, wey need the most prerequisites

Outline na wetin people usually mean when dem talk say dem want something wey feel like commercial notes tool. E na Node.js application, and the current release as of July 2026 na 1.9.2. 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 32

Run 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 then 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/data

PGSSLMODE=disable correct only 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 writes uploads to the directory above. That 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 the files for an S3 compatible bucket.

Now na the part wey dey surprise people. Outline no get built-in username and password login. Its sample configuration 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.

So the real cost of Outline na Outline plus PostgreSQL plus Redis plus one identity provider. If your team already dey sign in with Google Workspace or Microsoft Entra, that last part fit take ten minutes, and Outline become very attractive. If e no be so, you go also self-host something like Keycloak or Authentik. That one na another service wey you need patch and back up. Plan memory well: Outline own guidance na roughly 512 MB for each web process, set 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 by default, and e support LDAP, SAML2 and OIDC as alternatives. You dey set permissions for each role, and you fit override dem for one shelf, book, chapter or page. Because the hierarchy fixed, permissions dey inherit down am in predictable way.

Wiki.js sef get local accounts and add plenty strategies wey you enable for the admin area. Its page rules fit allow or deny access based on path pattern. This one 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 dey hand over the whole matter. Membership dey follow your identity provider, and inside Outline you control access by collection and group. When person comot from the company, no local account remain behind. This na real advantage when identity provider already be the system wey you use to deprovision users.

How search dey work for each

Search na where wiki fit prove say e useful, or turn into folder wey full of forgotten files.

BookStack dey search database and give readers query language wey dem fit learn within one minute. When you quote phrase, like for "london meeting", e go require that exact string. Square brackets dey search tags: [location=london] go match tag name, value, or both, with comparisons including !=, >= and like. Curly braces dey filter metadata, like for {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 dey handle search as pluggable module. The documented engines na basic database engine, PostgreSQL engine, Elasticsearch, Algolia, AWS CloudSearch and Azure Search. Basic engine dey okay for few hundred pages. If you dey run PostgreSQL, switch to PostgreSQL engine for admin area, because e dey use database own full text index instead of simple matching. Use Elasticsearch only when wiki don big reach the point wey you accept to run and patch another search service.

Outline dey search PostgreSQL full text indexes. No engine dey to choose and nothing dey to tune, and e also dey search text inside uploaded documents. For team wiki wey get low thousands of documents, na this one require the least work among the three. But if e ever stop being fast enough, you no get any setting to adjust to improve am.

Which one fit you

Pick BookStack if you want make the wiki dey run this afternoon and you prefer discuss content instead of structure. E get the fewest moving parts: one PHP application and one MySQL database. E fit internal runbooks and customer documentation, and e fit teams wey most writers no be engineers. E also easy pass the three to back up, because the whole state na one database dump plus the uploads directory.

Pick Wiki.js if you need one specific editor or authentication strategy wey the other ones no offer, or if you dey import plenty existing Markdown or AsciiDoc and you want preserve the path structure. Accept say you dey run 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. This setup reward you with editor wey people actually 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 for document management system like Paperless-ngx instead of wiki, and forcing dem inside one na why plenty wikis end up abandoned. The other common mismatch na when you want workspace instead of wiki, with documents, tables and whiteboard for one canvas. Na where self-hosted AFFiNE workspace fit better pass all the three above. If you want 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 dey easiest to install?

BookStack. Na one PHP application with MySQL database, and the project release 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 only an APP_KEY and database credentials. Wiki.js add Node runtime and PostgreSQL server, while Outline add Redis and outside identity provider on top of that.

I fit use Outline without Google or another SSO provider?

No. Outline no get local username and password login. The sample configuration talk 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. Running that provider na part of the cost of running Outline.

I suppose install Wiki.js 3 or Wiki.js 2?

Version 2. As of July 2026, the newest version 2 release na 2.5.314, from May 2026, and the version 3 documentation talk clearly say na unstable beta wey you no suppose install for production. Pin your image to ghcr.io/requarks/wiki:2 instead of latest, because major version change dey alter database schema under running instance.

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 no need configuration and e dey search the text inside uploaded files. Wiki.js na the most tunable, because na you choose the engine, and PostgreSQL engine worth switching to as soon as your wiki pass a few hundred pages.

I fit move my content from one to another later?

Partly, and you suppose expect manual work. All three fit export and import Markdown, so page text usually dey survive. Structure no dey survive cleanly: BookStack books and chapters no get equivalent inside Outline nested documents, and Wiki.js paths no map to BookStack fixed hierarchy. Attachments, permissions and page history na the parts wey likely to get lost, so export sample and check dem before you commit to migration.

#bookstack#wikijs#outline#wiki#self-hosting#knowledge-base