BookStack
BookStack is an open-source, self-hosted wiki and documentation platform that organizes content into a Shelves, Books, Chapters, and Pages hierarchy, with a built-in WYSIWYG editor and a Markdown editor for people who’d rather type it by hand. It’s one of the most recommended self-hosted wikis for homelabs and small teams, alongside Wiki.js and DokuWiki.
BookStack’s own home has changed too, though not through a fork or a buyout. The project now runs primarily on Codeberg, and its GitHub repository is kept only as a mirror, labeled plainly “NOW MANAGED ON CODEBERG.” The license hasn’t changed; it’s still MIT throughout, and Dan Brown, who started the project in 2015, remains its only lead maintainer, funded through donations and support contracts rather than investors.
License: MIT, confirmed directly from the LICENSE file in the bookstack/bookstack repository on Codeberg (also mirrored on GitHub), Copyright (c) 2015-2026, Dan Brown and the BookStack project contributors. Free for any use, including commercial, with no feature paywall. BookStack ships only one free, open version; its official FAQ confirms there’s no separate paid or enterprise edition.
Quick facts: official site bookstackapp.com · source codeberg.org/bookstack/bookstack (GitHub kept only as a mirror) · no official Docker image, the docs recommend LinuxServer.io’s linuxserver/bookstack first, with solidnerd/bookstack listed as an alternative · requires PHP 8.2+ (Laravel) and a separate MySQL 8.0+ or MariaDB 10.6+ database, no SQLite option · latest stable v26.05.2.
What BookStack actually does: Shelves, Books, Chapters, Pages
BookStack organizes information the way a library organizes physical books, and that hierarchy is the whole reason to pick it over a flat note-taking app. A Book is the top-level unit for one topic: a homelab, a client, a department. Inside a book you write Pages directly, or split it into Chapters first once it’s getting long; chapters are optional and exist only to keep large books navigable. Once several books pile up, a Bookshelf groups them together, and the same book can sit on more than one shelf. Only pages hold actual content, written in BookStack’s default WYSIWYG editor or a Markdown editor, according to BookStack’s own content overview docs.
Installing BookStack with Docker
BookStack has no official, first-party Docker image. Its own installation docs point to two community-maintained ones instead. LinuxServer.io’s image is listed first and gets updated the most, so that’s what the setup below uses. Both options need a MySQL or MariaDB database running next to BookStack; there’s no bundled or SQLite fallback.
services:
bookstack_db:
image: lscr.io/linuxserver/mariadb:latest
container_name: bookstack_db
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- MYSQL_ROOT_PASSWORD=changeme_root
- MYSQL_DATABASE=bookstackapp
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=changeme_db
volumes:
- ./bookstack_db:/config
restart: unless-stopped
bookstack:
image: lscr.io/linuxserver/bookstack:latest
container_name: bookstack
depends_on:
- bookstack_db
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- APP_URL=http://your-server-ip:6875
- APP_KEY=base64:changeme_generated_key
- DB_HOST=bookstack_db
- DB_PORT=3306
- DB_USERNAME=bookstack
- DB_PASSWORD=changeme_db
- DB_DATABASE=bookstackapp
volumes:
- ./bookstack:/config
ports:
- "6875:80"
restart: unless-stopped
- Generate an APP_KEY before the first start: run
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkeyand paste the output into the compose file above. - Save the file as docker-compose.yml, match PUID and PGID to whoever should own the ./bookstack_db and ./bookstack folders, and run docker compose up -d.
- Give the database container a minute to finish initializing before BookStack’s first request; the app container may need a restart if it tries to connect too early.
- Open http://your-server-ip:6875 and log in with the default
and password, then change both immediately from Settings > Users.
docker compose up -d
docker compose logs -f bookstack
Before you start: BookStack isn’t a single-container, SQLite-based app like some of the other tools on this site. It expects a real MySQL 8.0+ or MariaDB 10.6+ database with its own credentials, so plan for a second container, or an existing database server, before writing the compose file.
Security notes: The default
/ password login should be changed the moment you log in, not left for later. If BookStack sits behind a reverse proxy in a subfolder, or the external hostname differs from what you configured, APP_URL has to match exactly or logins and uploads quietly break. BookStack has no HTTPS of its own, so a public-facing instance needs a reverse proxy such as Nginx Proxy Manager or Caddy in front of it, or should stay off the open internet behind a private network tool like Tailscale.
BookStack vs Wiki.js vs Confluence
All three organize written knowledge into pages with some kind of hierarchy, but they differ in stack, license, and who’s expected to host them.
| BookStack | Wiki.js | Confluence | |
|---|---|---|---|
| Hosting | Self-hosted only | Self-hosted only | Atlassian Cloud or self-managed Data Center |
| License | MIT | AGPL-3.0 | Proprietary, paid |
| Stack | PHP/Laravel + MySQL or MariaDB | Node.js, choice of SQL database | Proprietary |
| Editor | WYSIWYG and Markdown | Markdown and WYSIWYG, with an optional Git-backed storage mode | Rich text |
| Structure | Shelves > Books > Chapters > Pages | Flat pages with tree navigation | Spaces > Pages |
| Cost | Free, no enterprise tier | Free | Paid per user |
- MIT-licensed with no feature paywall and no separate enterprise tier; what you self-host is the whole product
- The Shelves, Books, Chapters, and Pages hierarchy scales from a one-person homelab wiki to a multi-team knowledge base without forcing a restructure later
- The built-in WYSIWYG editor is genuinely easy for non-technical contributors, and a Markdown editor is there for people who prefer it
- Development is active and steady, with feature releases roughly every couple of months and fast security patches
- No official Docker image, so day to day you’re trusting a third-party image (LinuxServer.io or solidnerd) to track upstream releases
- Needs a standalone MySQL or MariaDB database, one more moving part than SQLite-based alternatives
- No plugin system by design; BookStack stays deliberately simple rather than extensible, so unusual feature requests are often turned down outright
- No official managed hosting from the project itself, only third-party providers like PikaPods or Cloudron
Hardware: BookStack doesn’t publish an exact CPU or RAM minimum, but as a PHP and Laravel app backed by MySQL or MariaDB, it runs comfortably on the same small VM or single-board computer that handles other lightweight self-hosted apps. Two CPU cores and 1 to 2GB of RAM is enough for a personal or small-team wiki. Our homelab setup guide for beginners covers picking that first machine.
Reaching BookStack from outside your network works like any other homelab service: a reverse proxy for a real HTTPS domain, or a private network tool if you’d rather not expose it publicly at all. Our Nginx Proxy Manager and Caddy fiches cover the reverse-proxy route, and Tailscale covers skipping public exposure entirely. If what you actually need is scanning and archiving paperwork rather than writing new pages, our Paperless-ngx fiche covers that different, OCR-focused job.
FAQ
Is BookStack free to use?
Yes. It’s MIT-licensed and free for any use, including commercial, with no feature paywall. BookStack doesn’t sell a separate paid or enterprise edition; the self-hosted version is the only version that exists. The project does sell optional support plans, but nothing about running the software depends on them.
What do you use BookStack for?
Documentation that would otherwise live in scattered text files or a paid wiki tool: homelab and infrastructure notes, internal team knowledge bases, client-facing help docs, personal reference material. The project’s own goal is a platform mixed-skill teams can use without anyone needing to learn Markdown or Git first.
Does BookStack need a database, or can it run on SQLite?
It needs a real database, MySQL 8.0 or newer or MariaDB 10.6 or newer. There’s no SQLite mode. That’s a deliberate design choice, not a missing feature, and it’s worth planning for before picking a Docker image.
BookStack or Wiki.js for a self-hosted wiki?
Both are solid and actively maintained. BookStack’s fixed Shelves, Books, Chapters, and Pages structure and WYSIWYG-first editing tend to win with non-technical contributors and teams who’d rather have the structure decided for them. Wiki.js’s Git-backed storage option and wider choice of databases tend to win with people who want more control over how content is stored. Neither is a wrong choice for a homelab.
A homelab that already has scattered setup notes, docker-compose snippets, and passwords for services nobody remembers configuring is exactly what BookStack is good at fixing. The database requirement and the missing official Docker image are the only real friction points, and neither matters much once the compose file above is written.