BookStack is a self-hosted wiki that replaces Confluence with an intuitive shelf-and-book hierarchy, native LDAP and SAML SSO, and embedded diagramming.
An engineering consultancy onboarding twenty client accounts faces a recurring dilemma: enterprise wiki subscriptions demand costly per-seat licenses and lock documentation inside proprietary silos. BookStack organizes runbooks, operational standard operating procedures, and internal knowledge into a familiar bookshelf hierarchy on self-hosted infrastructure. The platform pairs visual and Markdown editing with direct control over data and identity.
Confluence gates identity features behind Atlassian Guard subscriptions and routes documentation through proprietary formatting macros. BookStack approaches integrations from an open infrastructure baseline. Administrators connect corporate directories using OpenID Connect, SAML 2.0, or LDAP without add-on tiers or per-seat penalties. Teams can also authenticate through Google, GitHub, or GitLab. In addition, BookStack embeds diagrams.net directly into the interface, letting engineers maintain architectural diagrams without buying marketplace extensions.
External automation relies on a built-in REST API and event webhooks that dispatch notifications for page and book changes to Slack, Discord, or custom scripts. Confluence retains an advantage for teams embedded in the Atlassian suite, offering two-way Jira issue embeds and real-time concurrent editing. BookStack omits live multi-user drafting and third-party plugin stores in favour of simple PHP and MySQL operations, S3-compatible asset storage, and clean exports to PDF, HTML, and Markdown.
APP_URL, complicating dual access across internal corporate networks and external domains without reverse-proxy header rewrites.Can BookStack replace Confluence for small teams? Yes, BookStack handles standard operating procedures, technical runbooks, and team documentation with minimal server overhead and zero license fees. However, teams that depend on real-time collaborative editing, Jira widgets, or Atlassian Marketplace plugins will miss those integrations.
Is BookStack free for commercial use? Yes, BookStack is distributed as free open-source software under the MIT license without commercial restrictions or seat caps. Organizations pay only for their compute infrastructure and backup storage.
Does BookStack support SSO and LDAP authentication? Yes, BookStack includes native support for LDAP, SAML 2.0, and OpenID Connect, alongside social login providers like Google and GitHub. User roles can be mapped directly to directory groups without third-party plugins.
BookStack is a dependable choice for teams wanting structured knowledge organization, native single sign-on, and full data sovereignty without enterprise subscription overhead. It is not suitable for organizations that require real-time collaborative whiteboards or deeply nested page trees. Active development, regular releases, and a permissive MIT license that permits unencumbered commercial use make BookStack an easy recommendation for internal documentation.
We started this exact setup from scratch in a clean Linux machine on Oct 24, 2026 and checked it through BookStack's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p bookstack && cd bookstack
curl -fsSL https://open-source.store/tools/bookstack/compose.yml -o compose.ymlcat > .env <<EOF
APP_URL=http://localhost:6875
APP_KEY=$(openssl rand -base64 32)
DB_PASSWORD=$(openssl rand -hex 12)
DB_ROOT_PASSWORD=$(openssl rand -hex 12)
ADMIN_PASSWORD=$(openssl rand -hex 12)
EOFAPP_URL — Public URL where BookStack is accessible; set to your public URL (e.g. http://<your-server>:6875 or https://wiki.example.com) for links, images, and redirects.APP_KEY — Random 32-byte key that encrypts sessions and stored secrets. Generated above; keep it secret.DB_PASSWORD — Password BookStack uses for its MariaDB database. Generated above; keep it secret.DB_ROOT_PASSWORD — Root password of the bundled MariaDB database. Generated above; keep it secret.ADMIN_PASSWORD — Password used by smoke tests to configure the administrator account. Generated above; keep it secret.docker compose up -dservices:
bookstack:
image: lscr.io/linuxserver/bookstack:v26.09.2-ls292
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- APP_URL=${APP_URL}
- APP_KEY=base64:${APP_KEY}
- DB_HOST=bookstack_db
- DB_PORT=3306
- DB_USERNAME=bookstack
- DB_PASSWORD=${DB_PASSWORD}
- DB_DATABASE=bookstackapp
volumes:
- bookstack_config:/config
ports:
- 6875:80
depends_on:
bookstack_db:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -fs http://localhost/status || exit 1"]
interval: 10s
timeout: 5s
retries: 5
start_period: 60s
restart: unless-stopped
bookstack_db:
image: lscr.io/linuxserver/mariadb:11.8.8-r0-ls234
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
- MYSQL_DATABASE=bookstackapp
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=${DB_PASSWORD}
volumes:
- bookstack_db_config:/config
healthcheck:
test: ["CMD-SHELL", "mariadb-admin ping -h 127.0.0.1 -u bookstack -p$${MYSQL_PASSWORD} | grep -q alive"]
interval: 5s
timeout: 5s
retries: 30
start_period: 30s
restart: unless-stopped
volumes:
bookstack_config:
bookstack_db_config:
Lint, codegen, breaking-change checks and dependency management in one Git-native CLI. Open source, no registry lock-in.
Show that BookStack is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 90 s: lscr.io/linuxserver/mariadb:11.8.8-r0-ls234, lscr.io/linuxserver/bookstack:v26.09.2-ls292.
Based on the upstream setup. LinuxServer.io compose (the Docker image BookStack's install docs point to) with a bundled linuxserver/mariadb; images pinned, app key and passwords moved to .env, healthchecks added.
bookstack-1 | 2026-10-24T09:56:06.420703296Z bookstack-1 | 2026-10-24T09:56:06.430231754Z INFO Running migrations. bookstack-1 | 2026-10-24T09:56:06.430249838Z bookstack-1 | 2026-10-24T09:56:06.722496088Z 2014_10_12_000000_create_users_table ......................... 292.39ms DONE bookstack-1 | 2026-10-24T09:56:06.740194421Z 2014_10_12_100000_create_password_resets_table ................ 16.55ms DONE bookstack-1 | 2026-10-24T09:56:06.744708421Z 2015_07_12_114933_create_books_table ........................... 3.46ms DONE bookstack-1 | 2026-10-24T09:56:06.752919921Z 2015_07_12_190027_create_pages_table ........................... 6.92ms DONE bookstack-1 | 2026-10-24T09:56:06.758438421Z 2015_07_13_172121_create_images_table .......................... 4.07ms DONE bookstack-1 | 2026-10-24T09:56:06.763701921Z 2015_07_27_172342_create_chapters_table ........................ 4.20ms DONE bookstack-1 | 2026-10-24T09:56:06.817313838Z 2015_08_08_200447_add_users_to_entities ....................... 52.19ms DONE bookstack-1 | 2026-10-24T09:56:06.822461213Z 2015_08_09_093534_create_page_revisions_table .................. 4.03ms DONE bookstack-1 | 2026-10-24T09:56:06.828053130Z 2015_08_16_142133_create_activities_table ...................... 4.52ms DONE bookstack-1 | 2026-10-24T09:56:06.934367963Z 2015_08_29_105422_add_roles_and_permissions .................. 104.94ms DONE bookstack-1 | 2026-10-24T09:56:06.938909755Z 2015_08_30_125859_create_settings_table ........................ 3.55ms DONE bookstack-1 | 2026-10-24T09:56:06.939830838Z 2015_08_31_175240_add_search_indexes ........................... 0.03ms DONE bookstack-1 | 2026-10-24T09:56:06.957106421Z 2015_09_04_165821_create_social_accounts_table ................ 16.13ms DONE bookstack-1 | 2026-10-24T09:56:06.975055921Z 2015_09_05_164707_add_email_confirmation_table ................ 17.00ms DONE bookstack-1 | 2026-10-24T09:56:06.981623671Z 2015_11_21_145609_create_views_table ........................... 5.05ms DONE bookstack-1 | 2026-10-24T09:56:07.098587130Z 2015_11_26_221857_add_entity_indexes ......................... 115.93ms DONE bookstack-1 | 2026-10-24T09:56:07.099240255Z 2015_12_05_145049_fulltext_weighting ........................... 0.02ms DONE bookstack-1 | 2026-10-24T09:56:07.117152046Z 2015_12_07_195238_add_image_upload_types ...................... 17.33ms DONE bookstack-1 | 2026-10-24T09:56:07.122797755Z 2015_12_09_195748_add_user_avatars ............................. 4.54ms DONE bookstack-1 | 2026-10-24T09:56:07.131388921Z 2016_01_11_210908_add_external_auth_to_users ................... 7.95ms DONE bookstack-1 | 2026-10-24T09:56:07.148936338Z 2016_02_25_184030_add_slug_to_revisions ....................... 16.90ms DONE bookstack-1 | 2026-10-24T09:56:07.177673713Z 2016_02_27_120329_update_permissions_and_roles ................ 27.90ms DONE bookstack-1 | 2026-10-24T09:56:07.233952963Z 2016_02_28_084200_add_entity_access_controls .................. 55.45ms DONE bookstack-1 | 2026-10-24T09:56:07.245443296Z 2016_03_09_203143_add_page_revision_types ..................... 10.61ms DONE bookstack-1 | 2026-10-24T09:56:07.255080630Z 2016_03_13_082138_add_page_drafts .............................. 8.80ms DONE bookstack-1 | 2026-10-24T09:56:07.263415505Z 2016_03_25_123157_add_markdown_support ......................... 7.63ms DONE bookstack-1 | 2026-10-24T09:56:07.272351046Z 2016_04_09_100730_add_view_permissions_to_roles ................ 8.10ms DONE bookstack-1 | 2026-10-24T09:56:07.330935796Z 2016_04_20_192649_create_joint_permissions_table .............. 57.52ms DONE bookstack-1 | 2026-10-24T09:56:07.350609171Z 2016_05_06_185215_create_tags_table ........................... 18.82ms DONE bookstack-1 | 2026-10-24T09:56:07.354198755Z 2016_07_07_181521_add_summary_to_page_revisions ................ 3.02ms DONE bookstack-1 | 2026-10-24T09:56:07.367469338Z 2016_09_29_101449_remove_hidden_roles ......................... 12.72ms DONE bookstack-1 | 2026-10-24T09:56:07.380971255Z 2016_10_09_142037_create_attachments_table .................... 12.79ms DONE bookstack-1 | 2026-10-24T09:56:07.387373921Z 2017_01_21_163556_create_cache_table ........................... 5.63ms DONE bookstack-1 | 2026-10-24T09:56:07.393537963Z 2017_01_21_163602_create_sessions_table ........................ 5.57ms DONE bookstack-1 | 2026-10-24T09:56:07.415009463Z 2017_03_19_091553_create_search_index_table ................... 20.89ms DONE bookstack-1 | 2026-10-24T09:56:07.427541296Z 2017_04_20_185112_add_revision_counts ......................... 11.95ms DONE bookstack-1 | 2026-10-24T09:56:07.428265296Z 2017_07_02_152834_update_db_encoding_to_ut8mb4 ................. 0.03ms DONE bookstack-1 | 2026-10-24T09:56:07.445090130Z 2017_08_01_130541_create_comments_table ....................... 16.15ms DONE bookstack-1 | 2026-10-24T09:56:07.449007921Z 2017_08_29_102650_add_cover_image_display ...................... 3.38ms DONE bookstack-1 | 2026-10-24T09:56:07.458803380Z 2018_07_15_173514_add_role_external_auth_id .................... 9.05ms DONE bookstack-1 | 2026-10-24T09:56:07.546497005Z 2018_08_04_115700_create_bookshelves_table .................... 86.93ms DONE bookstack-1 | 2026-10-24T09:56:07.558369088Z 2019_07_07_112515_add_template_support ........................ 11.18ms DONE bookstack-1 | 2026-10-24T09:56:07.570845880Z 2019_08_17_140214_add_user_invites_table ...................... 11.52ms DONE bookstack-1 | 2026-10-24T09:56:07.589692922Z 2019_12_29_120917_add_api_auth ................................ 18.13ms DONE bookstack-1 | 2026-10-24T09:56:07.616944838Z 2020_08_04_111754_drop_joint_permissions_id ................... 26.38ms DONE bookstack-1 | 2026-10-24T09:56:07.621261963Z 2020_08_04_131052_remove_role_name_field ....................... 3.47ms DONE bookstack-1 | 2026-10-24T09:56:07.629505838Z 2020_09_19_094251_add_activity_indexes ......................... 7.56ms DONE bookstack-1 | 2026-10-24T09:56:07.641765672Z 2020_09_27_210059_add_entity_soft_deletes ..................... 11.68ms DONE bookstack-1 | 2026-10-24T09:56:07.657396838Z 2020_09_27_210528_create_deletions_table ...................... 15.04ms DONE bookstack-1 | 2026-10-24T09:56:07.682994005Z 2020_11_07_232321_simplify_activities_table ................... 25.02ms DONE bookstack-1 | 2026-10-24T09:56:07.717446047Z 2020_12_30_173528_add_owned_by_field_to_entities .............. 33.75ms DONE bookstack-1 | 2026-10-24T09:56:07.722545505Z 2021_01_30_225441_add_settings_type_column ..................... 4.14ms DONE bookstack-1 | 2026-10-24T09:56:07.738928088Z 2021_03_08_215138_add_user_slug ............................... 15.06ms DONE bookstack-1 | 2026-10-24T09:56:07.756951672Z 2021_05_15_173110_create_favourites_table ..................... 16.62ms DONE bookstack-1 | 2026-10-24T09:56:07.772498963Z 2021_06_30_173111_create_mfa_values_table ..................... 14.22ms DONE bookstack-1 | 2026-10-24T09:56:07.777581922Z 2021_07_03_085038_add_mfa_enforced_to_roles_table .............. 3.96ms DONE bookstack-1 | 2026-10-24T09:56:07.780106088Z 2021_08_28_161743_add_export_role_permission ................... 1.60ms DONE bookstack-1 | 2026-10-24T09:56:07.786633880Z 2021_09_26_044614_add_activities_ip_column ..................... 5.76ms DONE bookstack-1 | 2026-10-24T09:56:07.793747630Z 2021_11_26_070438_add_index_for_user_ip ........................ 6.04ms DONE bookstack-1 | 2026-10-24T09:56:07.825158130Z 2021_12_07_111343_create_webhooks_table ....................... 30.33ms DONE bookstack-1 | 2026-10-24T09:56:07.834591422Z 2021_12_13_152024_create_jobs_table ............................ 8.29ms DONE bookstack-1 | 2026-10-24T09:56:07.844793672Z 2021_12_13_152120_create_failed_jobs_table ..................... 9.24ms DONE bookstack-1 | 2026-10-24T09:56:07.866246255Z 2022_01_03_154041_add_webhooks_timeout_error_columns .......... 20.29ms DONE bookstack-1 | 2026-10-24T09:56:07.874455797Z 2022_04_17_101741_add_editor_change_field_and_permission ....... 7.14ms DONE bookstack-1 | 2026-10-24T09:56:07.888503463Z 2022_04_25_140741_update_polymorphic_types .................... 12.92ms DONE bookstack-1 | 2026-10-24T09:56:07.945208297Z 2022_07_16_170051_drop_joint_permission_type .................. 55.29ms DONE bookstack-1 | 2026-10-24T09:56:08.005151047Z 2022_08_17_092941_create_references_table ..................... 57.07ms DONE bookstack-1 | 2026-10-24T09:56:08.008477297Z 2022_09_02_082910_fix_shelf_cover_image_types .................. 1.07ms DONE bookstack-1 | 2026-10-24T09:56:08.051155005Z 2022_10_07_091406_flatten_entity_permissions_table ............ 40.86ms DONE bookstack-1 | 2026-10-24T09:56:08.103075588Z 2022_10_08_104202_drop_entity_restricted_field ................ 49.86ms DONE bookstack-1 | 2026-10-24T09:56:08.153514047Z 2023_01_24_104625_refactor_joint_permissions_storage .......... 48.43ms DONE bookstack-1 | 2026-10-24T09:56:08.154923963Z 2023_01_28_141230_copy_color_settings_for_dark_mode ............ 0.66ms DONE bookstack-1 | 2026-10-24T09:56:08.164004338Z 2023_02_20_093655_increase_attachments_path_length ............. 8.23ms DONE bookstack-1 | 2026-10-24T09:56:08.171691505Z 2023_02_23_200227_add_updated_at_index_to_pages ................ 6.68ms DONE bookstack-1 | 2026-10-24T09:56:08.173992255Z 2023_06_10_071823_remove_guest_user_secondary_roles ............ 1.32ms DONE bookstack-1 | 2026-10-24T09:56:08.174955755Z 2023_06_25_181952_remove_bookshelf_create_entity_permissions ... 0.03ms DONE bookstack-1 | 2026-10-24T09:56:08.177364172Z 2023_07_25_124945_add_receive_notifications_role_permissions ... 1.62ms DONE bookstack-1 | 2026-10-24T09:56:08.201109672Z 2023_07_31_104430_create_watches_table ........................ 21.84ms DONE bookstack-1 | 2026-10-24T09:56:08.208616505Z 2023_08_21_174248_increase_cache_size .......................... 6.58ms DONE bookstack-1 | 2026-10-24T09:56:08.216193005Z 2023_12_02_104541_add_default_template_to_books ................ 6.44ms DONE bookstack-1 | 2026-10-24T09:56:08.241014089Z 2023_12_17_140913_add_description_html_to_entities ............ 23.87ms DONE bookstack-1 | 2026-10-24T09:56:08.247180547Z 2024_01_01_104542_add_default_template_to_chapters ............. 5.19ms DONE bookstack-1 | 2026-10-24T09:56:08.253443214Z 2024_02_04_141358_add_views_updated_index ...................... 5.36ms DONE bookstack-1 | 2026-10-24T09:56:08.262423839Z 2024_05_04_154409_rename_activity_relation_columns ............. 8.01ms DONE bookstack-1 | 2026-10-24T09:56:08.264840089Z 2024_09_29_140340_ensure_editor_value_set ...................... 1.36ms DONE bookstack-1 | 2026-10-24T09:56:08.267906464Z 2024_10_29_114420_add_import_role_permission ................... 1.62ms DONE bookstack-1 | 2026-10-24T09:56:08.275870797Z 2024_11_02_160700_create_imports_table ......................... 7.31ms DONE bookstack-1 | 2026-10-24T09:56:08.281230964Z 2024_11_27_171039_add_instance_id_setting ...................... 4.37ms DONE bookstack-1 | 2026-10-24T09:56:08.286042964Z 2025_01_29_180933_create_sort_rules_table ...................... 4.01ms DONE bookstack-1 | 2026-10-24T09:56:08.291587839Z 2025_02_05_150842_add_sort_rule_id_to_books .................... 4.78ms DONE bookstack-1 | 2026-10-24T09:56:08.305847714Z 2025_04_18_215145_add_content_refs_and_archived_to_comments ... 13.47ms DONE bookstack-1 | 2026-10-24T09:56:08.323315922Z 2025_09_02_111542_remove_unused_columns ....................... 16.44ms DONE bookstack-1 | 2026-10-24T09:56:08.390195797Z 2025_09_15_132850_create_entities_table ....................... 65.86ms DONE bookstack-1 | 2026-10-24T09:56:08.397076505Z 2025_09_15_134701_migrate_entity_data .......................... 5.75ms DONE bookstack-1 | 2026-10-24T09:56:08.701493339Z 2025_09_15_134751_update_entity_relation_columns ............. 303.34ms DONE bookstack-1 | 2026-10-24T09:56:08.734154755Z 2025_09_15_134813_drop_old_entity_tables ...................... 30.22ms DONE bookstack-1 | 2026-10-24T09:56:08.921600631Z 2025_10_18_163331_clean_user_id_references ................... 185.30ms DONE bookstack-1 | 2026-10-24T09:56:08.937375131Z 2025_10_22_134507_update_comments_relation_field_names ........ 14.35ms DONE bookstack-1 | 2026-10-24T09:56:08.977210214Z 2025_11_23_161812_create_slug_history_table ................... 38.33ms DONE bookstack-1 | 2026-10-24T09:56:09.005802881Z 2025_12_15_140219_create_mention_history_table ................ 27.38ms DONE bookstack-1 | 2026-10-24T09:56:09.017721714Z 2025_12_19_103417_add_views_viewable_type_index ............... 10.15ms DONE bookstack-1 | 2026-10-24T09:56:09.023361631Z 2026_04_19_141616_add_revision_view_all_permission ............. 3.77ms DONE bookstack-1 | 2026-10-24T09:56:09.038272172Z 2026_07_27_201402_update_users_external_auth_id_collation ..... 13.64ms DONE bookstack-1 | 2026-10-24T09:56:09.039993422Z bookstack-1 | 2026-10-24T09:56:09.068641506Z [custom-init] No custom files found, skipping... bookstack-1 | 2026-10-24T09:56:09.104158631Z [ls.io-init] done. bookstack_db-1 | 2026-10-24T09:55:57.426804125Z 2026-10-24 9:55:57 0 [Note] InnoDB: Buffer pool(s) dump completed at 261024 9:55:57 bookstack_db-1 | 2026-10-24T09:55:57.475374292Z 2026-10-24 9:55:57 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1" bookstack_db-1 | 2026-10-24T09:55:57.475399208Z 2026-10-24 9:55:57 0 [Note] Shutdown completed; log sequence number 45450; transaction id 16 bookstack_db-1 | 2026-10-24T09:55:57.480562083Z 2026-10-24 9:55:57 0 [Note] mariadbd: Shutdown complete bookstack_db-1 | 2026-10-24T09:55:58.319572500Z Database Setup Completed bookstack_db-1 | 2026-10-24T09:55:58.334016292Z [custom-init] No custom files found, skipping... bookstack_db-1 | 2026-10-24T09:55:58.389303126Z 261024 09:55:58 mysqld_safe Logging to '/config/log/mysql/mariadb-error.log'. bookstack_db-1 | 2026-10-24T09:55:58.402711792Z 261024 09:55:58 mysqld_safe Starting mariadbd daemon with databases from /config/databases bookstack_db-1 | 2026-10-24T09:55:59.357952501Z Connection to localhost (::1) 3306 port [tcp/mysql] succeeded! bookstack_db-1 | 2026-10-24T09:55:59.389349334Z Logrotate is enabled bookstack_db-1 | 2026-10-24T09:55:59.418856418Z [ls.io-init] done.