BookStack vs Wiki.js vs Outline: Which One Make Sense?
Compare BookStack, Wiki.js and Outline for setup, editors, login and search. See the clear pick for solo admins, plus the better option for teams.
Which self-hosted wiki you suppose run
Self-hosted wiki dey put your team documents for one place wey you fit search, for 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 get permission to log in.
BookStack na the easiest to set up, and e get the strongest rules 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 here 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. A page dey inside a book, a book fit get chapters, and shelves dey group books. You no fit invent a fifth level. Na that limit be the product strength: new writer sabi where page suppose go 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. A page for ops/backup/restic dey wherever you put am, and you 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 to drag am with mouse. E get the most flexibility among the three, so na the easiest one to allow make e drift.
BookStack: di smallest install
BookStack na PHP application wey MySQL dey support. As of July 2026, di 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. Di current release line na 26.05.
Di project dey publish one installation script for each Ubuntu release. Di 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.shRead di warning for that script before you run am. Di 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 don already dey answer for port 80, di script go take that port and rewrite di Apache configuration. Use containers for there instead, or install BookStack by hand on top of existing LAMP stack for Ubuntu 24.04.
Di container method dey use LinuxServer.io image, and na di option wey 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 appkeyCopy di value wey e print enter APP_KEY, then write di 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 di address wey readers really type, including di scheme and any port. Set am to http://localhost, then serve di site over HTTPS. If you no do am, generated links and redirects go point to di 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 you continue with this one.
Bring am up and check say di application dey answer, no be only say di container dey run:
docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/loginA 200 OK mean say di PHP application don boot and reach di database. A 500 almost always mean say APP_KEY empty or di database credentials no match. docker compose logs bookstack go print which one of di two e be.
Wiki.js: one tree, plenty editors
Wiki.js na Node.js application. The documented Docker setup dey pair am with PostgreSQL, although the software still accepts MySQL, MariaDB, MSSQL and SQLite. Na this compose file dey come from 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. The tag dey pinned to ghcr.io/requarks/wiki:2 on purpose. The documentation no recommend latest, because major version jump dey change the database schema while one instance dey run.
Version 2 na the line to run. As of July 2026, the newest version 2 release na 2.5.314, from May 2026. Version 3 dey, and the documentation for am talk say: "This site na 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 dey guide you through in-browser setup wey dey create the administrator account. Until you finish am, anybody wey fit 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 wey get im own hostname fit naturally sit behind Traefik in front of plenty 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 dey help when you dey import old content for format wey you no wan convert. But e fit still make four house styles enter one wiki. So decide the default editor on day one and write the decision down.
Outline: editor wey dey best, but prerequisites plenty
Outline na wetin people usually mean when dem talk say dem want something wey dey feel like commercial notes tool. E na Node.js application, and the current release as of July 2026 na 1.9.2. Its sample environment file list wetin e need: PostgreSQL through DATABASE_URL, Redis through REDIS_URL, two random secrets, and publicly reachable URL.
openssl rand -hex 32
openssl rand -hex 32Run am two times and keep both values. The first one go become SECRET_KEY, and the second one go 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 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 go write uploads to the directory above. That directory must be 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 those files for S3 compatible bucket.
Now na this part dey surprise people. Outline no get built-in username and password login. Its own 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 identity provider. If your team already dey sign in with Google Workspace or Microsoft Entra, that last part fit take ten minutes, and Outline go become very attractive. If e no be so, you go also self-host something like Keycloak or Authentik. That one na second service wey you must 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 handles who may read what
BookStack get local email and password accounts out of the box, and e support LDAP, SAML2 and OIDC as alternatives. You set permissions per role, and you fit am for one shelf, book, chapter or page if needed. Since the hierarchy fixed, permissions dey inherit down am for one way wey easy to predict.
Wiki.js too get local accounts, and e add plenty strategies wey you enable for the admin area. E page rules fit allow or deny access based on path pattern. This one powerful, but e easy make mistake, because rule wey you write for ops/* go quietly cover every page wey you later file under that path.
Outline leave the whole question to your identity provider. Membership follow your identity provider, and inside Outline you control access by collection and group. When person comot from the company, Outline no leave local account behind. This na real advantage when the identity provider already be the system wey you use to deprovision users.
How search dey work for each one
Search na where wiki fit prove say e useful, or turn into folder wey full with files wey nobody remember again.
BookStack dey search the database and e give readers query language wey dem fit learn within one minute. If you put phrase for quotes, like "london meeting", e go require that exact string. Square brackets dey search tags: [location=london] go match by tag name, value, or both, with comparisons like !=, >= and like. Curly braces dey filter metadata, like {created_after:2016-12-30}. You fit negate any exact, tag, or filter term by putting - for front. BookStack get limit for 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 engines wey documentation list na basic database engine, PostgreSQL engine, Elasticsearch, Algolia, AWS CloudSearch and Azure Search. The basic engine dey okay for some hundred pages. If you dey run PostgreSQL, change to PostgreSQL engine for admin area, because e dey use the database own full text index instead of simple matching. Use Elasticsearch only when the 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 still dey search the 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 to dey fast enough, you no get any setting to adjust.
Which one fit you
Choose BookStack if you want the wiki to 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 dey easiest among the three to back up, because the complete state na one database dump plus the uploads directory.
Choose Wiki.js if you need one particular editor or authentication strategy wey the others no offer, or if you dey import plenty existing Markdown or AsciiDoc and you want make e preserve the path structure. Accept say you dey run a heavier stack, and pin the major version tag.
Choose Outline if writing quality na the most important thing, the wiki na for team instead of the public, and you already get an identity provider. That setup go give you an editor wey people really enjoy to use. No choose am as your first self-hosted application.
If none of the three fit, the problem usually na the content type. Scanned invoices and contracts belong for document management system like Paperless-ngx instead of wiki, and forcing them inside one na why many wikis end up abandoned. For broader view of other things wey deserve place for your own server, see self-hosting shortlist for 2026.
Sizing and backups
All three fit for small VPS, but the realistic minimum dey differ because of wetin dey run behind each one. BookStack na one application process and MySQL. Wiki.js na Node process and PostgreSQL. Outline na Node process, PostgreSQL and Redis, usually with identity provider join am. Na why you suppose give am extra memory.
Back up the database and the uploads together. Restore both inside throwaway instance once before you trust that backup. Wiki backup wey nobody don restore na just guess. For BookStack, e 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. E be 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 only need one 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. To run 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 plainly say e be 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 the database schema while the instance dey run.
Which one get the best search?
Each one strong for different things. 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 one wey you fit tune pass, because you dey choose the engine, and PostgreSQL engine worth switching to as soon as your wiki pass 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 normally dey survive. 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 them before you commit to migration.