BookStack
BookStack is a free and open-source platform for organizing and storing information, functioning as a simple, self-hosted wiki and knowledge management system that structures content into books, chapters, and pages.[1] Developed using the PHP-based Laravel framework and requiring a MySQL database, it emphasizes ease of use with a WYSIWYG editor, making it suitable for teams with varying technical skills. Released under the MIT license, BookStack supports features like searchable content, role-based permissions, authentication integrations (including LDAP, SAML, and OIDC), multi-language support for over 10 languages, and export options for PDFs and Markdown.[2] It can run on modest hardware, such as a low-cost virtual private server, and includes tools for page revisions, diagrams via diagrams.net integration, and customizable themes with dark and light modes.[1] Initiated on July 12, 2015, by developer Dan Brown to address the need for an accessible documentation tool for mixed-skill teams, BookStack has evolved into a community-driven project hosted on GitHub, with Brown remaining the primary contributor.[3] As of July 2025, marking its tenth anniversary, the platform has seen steady releases, with the November 2025 release of version 25.11 introducing database structure changes for better performance, API enhancements, and UI refinements such as improved time-zone display, while amassing 16,926 GitHub stars and supporting a global user base through official demos and documentation.[4] [5] Its opinionated design prioritizes a straightforward out-of-the-box experience over extensive customization, distinguishing it from more complex alternatives in the open-source documentation space.[2]Overview
Development and licensing
BookStack was developed by Dan Brown, an English web developer, as a personal project to address documentation needs in his mixed-technical-skilled workplace.[3] The project began with its initial commit on July 12, 2015, under the name Oxbow, and was renamed to BookStack just 11 days later on July 23, 2015, reflecting a rapid evolution in its conceptual focus.[6] This early development laid the foundation for a self-hosted platform designed for organizing and sharing knowledge in a book-like structure. Released under the MIT License, BookStack permits free use, modification, and distribution, fostering widespread adoption among individuals and organizations seeking customizable documentation solutions.[7] As an open-source project hosted on GitHub, it encourages community involvement through pull requests for code enhancements and issue tracking for bug reports and feature requests, enabling collaborative improvements while maintaining core stability.[2] The platform's internationalization efforts have resulted in support for 52 languages, achieved through volunteer-driven translations coordinated via Crowdin, allowing users worldwide to interface with BookStack in their preferred language.[8][4] Built on the Laravel PHP framework, it leverages a robust backend for efficient content management.[3]Core architecture
BookStack's core architecture is built on the Laravel PHP framework for the backend, leveraging its robust features for routing, middleware, and ORM capabilities to handle application logic and data interactions.[1][2] This foundation enables efficient server-side processing, with PHP version 8.2 or higher required to support modern syntax and security standards.[9] The primary database backend utilizes MySQL version 5.7 or later, or equivalently MariaDB version 10.2 or later, to store all content, user data, and metadata in a single schema managed by the application.[9] This relational structure supports scalable storage for documentation elements, with full permissions granted to the database user for schema creation and maintenance.[9] On the frontend, BookStack employs standard HTML for structure, CSS for styling, and JavaScript for interactivity, prioritizing a lightweight and straightforward implementation without reliance on heavy external libraries or frameworks beyond core web standards.[2] This design choice facilitates easy self-hosting on standard web servers, requiring only a PHP-compatible environment and minimal dependencies like Composer for package management, ensuring broad compatibility and reduced overhead.[9] At the heart of the architecture lies a hierarchical data model where books serve as the primary containers for organizing content, encompassing optional chapters and individual pages that hold the actual information.[10] This structure directly influences the user interface by providing intuitive navigation through nested views and extends to the API endpoints, which mirror the hierarchy for programmatic access to books, chapters, and pages.[10] The organizational structure using books, chapters, and pages allows for flexible content grouping while maintaining relational integrity in the database.[10] Security is embedded architecturally through role-based access control (RBAC), where predefined or custom roles define permissions for system-wide actions, content creation, and asset management, with granular overrides applicable at the shelf, book, chapter, or page levels.[11] Roles stack additively for users, and permissions follow a priority logic that favors specificity—such as content-level grants overriding global role denials—ensuring admins retain full access while enabling fine-tuned control for other users.[11]History
Founding and early development
BookStack was initiated by Dan Brown, a UK-based web developer, in response to his need for a straightforward, self-hosted documentation platform suitable for a workplace with varying technical skill levels, as existing options often involved per-user costs or required significant customization for usability.[3] The project's first commit occurred on July 12, 2015, initially under the name "Oxbow," which at that stage consisted solely of basic book structures without support for users, chapters, or pages.[6] Just eleven days later, on July 23, 2015, the project was renamed to BookStack, coinciding with the addition of sidebar navigation to enhance organization.[6] By October 2015, the core layout had been finalized, incorporating a logo, header bar, and an overall design inspired by established wiki tools, establishing the foundational structure that would define its book-chapter-page hierarchy.[6] The early beta phase, beginning in August 2015, concentrated on implementing essential wiki functionalities, including user management, notifications, a WYSIWYG editor for page creation, revision tracking, and chapter organization to support hierarchical content structuring.[6] BookStack remained in beta status during this period, prioritizing stability and core features over advanced capabilities.[3] Community engagement began with the public GitHub repository, where the project was officially announced in late 2015 via forums like Reddit's r/selfhosted, leading to initial user adoption by 2016 as evidenced by steady website traffic growth and over 200 GitHub stars by mid-year.[6][3] This early traction was bolstered by community referrals and documentation resources, fostering organic adoption among users seeking simple knowledge management solutions.[6]Major releases and milestones
BookStack's development progressed significantly from 2019, with key releases introducing enhancements to usability, stability, and functionality. The v0.26 release on May 6, 2019, focused on mobile optimization and UI refinements, providing a refreshed design with improved mobile experience and new features.[12] A pivotal milestone occurred on April 9, 2021, with the v21.04 release, which marked the end of the beta phase and transitioned to a full stable version using a year-month numbering scheme, signifying the platform's maturity after over five years of development.[13] In terms of community growth, BookStack reached 10,000 GitHub stars on September 15, 2022, reflecting its rising popularity as an open-source documentation platform.[14] Advancing into 2025, the v25.05 release on May 31 introduced a comment system for pages and books, along with features like comment referencing and archiving support.[15] The v25.07 release on July 30 brought enhanced editing tools, including a plaintext Markdown editor, and expanded customization options such as ZIP import/export via API and tag-based styling derived from parent structures.[16] July 2025 also celebrated the project's 10-year anniversary, commemorating the initial commit on July 12, 2015, with reflections on its evolution, community contributions, and statistical achievements like 16,926 GitHub stars.[4] Most recently, the v25.11 release on November 9 included a database schema overhaul for improved performance, alongside expanded REST API endpoints for comments and images. These updates continue to build on BookStack's Laravel foundation for ongoing enhancements in scalability and integration.[5]Content Management
Organizational structure
BookStack utilizes a hierarchical content model to facilitate organized knowledge management, featuring four primary levels: shelves, books, chapters, and pages. Shelves function as optional top-level collections that group multiple books, enabling thematic or categorical organization across broader scopes. Books serve as mandatory top-level containers for all content, providing the foundational structure for housing related materials. Chapters act as optional subdivisions within books, allowing for intermediate grouping of related topics, while pages constitute the essential, mandatory units for holding individual pieces of content such as text, images, and attachments. This layered approach promotes scalability, from simple single-book setups to complex multi-shelf libraries.[17][10] The mandatory elements—books and pages—ensure a consistent baseline for content creation, with chapters and shelves available optionally to enhance granularity without imposing rigidity. For example, a user documenting software procedures might employ books for major modules and pages for step-by-step guides, adding chapters only where subtopics warrant separation, and shelves to aggregate books by project phase. This flexibility supports diverse use cases, from personal notes to enterprise wikis.[17][10] Within books, chapters and pages support intuitive sorting and reordering through drag-and-drop mechanisms in the interface, or via bulk operations like the "Sort" action for maintaining sequential logic. Books can similarly be reordered within shelves or across the system using manual adjustments or automated sort rules based on criteria such as name or creation date, ensuring content remains navigable and user-defined.[17] Page-level revision history tracks all changes, automatically generating a new version each time content is saved, complete with timestamps, authors, and optional change summaries. Users access this history via the "Revisions" link in the page's sidebar menu, where they can browse versions, view side-by-side diffs highlighting additions and deletions, and restore any prior version to overwrite the current one, provided they hold edit permissions on the page. To manage storage, BookStack defaults to retaining the 100 most recent revisions per page, pruning older ones automatically, though administrators can adjust or disable this limit via configuration.[18][19][20] Permissions operate on a role-based system and are inheritable down the hierarchy, with options to override at shelves, books, chapters, or pages for targeted control. Common actions like view (access content), edit (modify details), and delete (remove items) can be granted or restricted per role at any level; for instance, a book's view permission cascades to its chapters and pages unless a chapter-specific override denies edit access to certain users. This granular application supports secure, context-specific access without global restrictions.[11]Editing capabilities
BookStack provides users with dual editing interfaces for creating and modifying page content: a visual What You See Is What You Get (WYSIWYG) editor and a Markdown source editor, allowing seamless toggling between them via a dropdown menu when editing permissions permit.[21][22] The WYSIWYG editor functions similarly to standard word-processing tools, supporting direct formatting through toolbar buttons and keyboard shortcuts, such as Ctrl+B (or Cmd+B on macOS) for bold text and Ctrl+K for inserting hyperlinks.[21] Meanwhile, the Markdown editor adheres to the CommonMark specification with extensions for tables and task lists, enabling users to write structured content using simple syntax like# Header for headings or | Column1 | Column2 | for tables, and includes a live preview pane that updates in real-time as text is entered.[22][1]
Rich text capabilities in both editors facilitate the inclusion of multimedia and structural elements without requiring external tools. Users can insert images directly into content via upload or URL linking (e.g.,  in Markdown), embed external content through hyperlinks or iframes where supported, create tables for data organization, generate diagrams using an integrated diagrams.net editor that opens inline for drawing and editing flowcharts, UML diagrams, or other visuals, and syntax highlighting for additional languages including Groovy (as of v25.11).[21][22][23][5] These features extend to advanced formatting like blockquotes, code blocks, ordered and unordered lists, and callouts for highlighting key information, ensuring content remains visually engaging and accessible.[21]
At the page level, BookStack supports attachments for supplementary files, allowing users to upload documents, images, or other media via a sidebar panel in the editor (accessible through a paperclip icon) or by drag-and-drop.[24] Once attached, files can be linked within the page content by generating URLs, dragging them into the editor, or using the insert link tool, with attachments inheriting the page's view permissions for secure access and download.[24] This system stores files server-side or via cloud options like Amazon S3, enabling inline previews for compatible formats while maintaining separation from core content to avoid bloating page storage.[24][25]
Collaboration is enhanced through an updated threaded comment system, with new abilities introduced in version 25.05, which permits users to add comments directly on pages and books for discussion and feedback.[15] Comments can reference specific sections of content via inline selection, appearing as highlighted bubbles or badges that link to threaded replies in a sidebar; these references update dynamically to indicate if the targeted content has changed, with options to archive threads for organization.[15] This feature, available in the WYSIWYG editor and on viewed pages, fosters iterative improvements without altering the original content.[15]
To prevent data loss during editing sessions, BookStack implements draft saving and auto-save mechanisms across both editors. Changes are automatically preserved as drafts every few seconds, with manual draft saves triggered by Ctrl+S (or Cmd+S), allowing users to resume work later; full saves use Ctrl+Enter to publish while continuing the session.[21][22] These drafts are tied to the hierarchical structure of books, chapters, and pages, ensuring edited content integrates smoothly into the overall organizational framework.[10]
User Experience
Search and navigation
BookStack provides a full-text search engine that indexes the names, descriptions, and body content of books, chapters, and pages, enabling users to discover relevant information across the platform.[26] The search functionality supports relevance-based ranking by default, with options for advanced sorting such as by last commented date using syntax like{sort_by:last_commented}.[26] Users can perform global searches via the header bar, which queries all content levels, or scoped searches within a specific book or chapter using sidebar inputs.[26][27]
Advanced search features include filters for content type (e.g., {type:page} or {type:chapter}), tags (e.g., [location=london] or [name=value] with operators like =, >, or like), and other criteria such as update dates (e.g., {updated_after:2016-12-30}) or ownership (e.g., {updated_by:me}).[26] Search syntax allows for exact phrases in quotes (e.g., "london meeting"), multi-term matching (e.g., london meeting), and negation with a minus sign (e.g., -location).[26] Results display live previews with options to view all matches, including pagination for large sets as of version 25.11 (November 2025), facilitating quick navigation to indexed items.[26][27][5]
Navigation within BookStack is aided by a sidebar tree view that displays the hierarchical structure of books and chapters, with expandable sections and next/previous links for sequential traversal.[27] Breadcrumbs appear above content areas, providing a clickable path from shelves or top-level books to the current page, helping users maintain context during exploration.[27] Internal linking supports cross-page hyperlinks via permalinks, which can reference entire pages or specific sections using anchors (e.g., appending #section to scroll to headings or selected text blocks).[28] Paragraph-level anchors are generated automatically for headings in the WYSIWYG editor, and users can create custom ones by selecting text to obtain a permalink popup.[28]
A recent activity feed on the homepage and within books lists updates such as page edits, with clickable links to affected content and a "View All" option for comprehensive overviews.[27] This feed enhances navigation by highlighting changes across the content structure, complementing the platform's book-based hierarchy.[27] As of version 25.11 (November 2025), UI refinements include consistent absolute time displays with time zone support, improving temporal context in feeds and throughout the interface.[5]
Authentication and permissions
BookStack provides built-in authentication through email and password registration, where new users must verify their email address to activate their account. This process ensures secure onboarding by requiring confirmation via an email link sent upon registration.[29] For broader access, BookStack integrates with third-party services for social logins, including GitHub, Google, and Facebook, allowing users to authenticate using their existing accounts. Enterprise options extend this capability with LDAP for directory-based login, where user details are synced from an LDAP server, and SAML 2.0 support for single sign-on providers like Okta, enabling seamless integration with identity management systems.[30][31][32] Access control in BookStack employs granular role-based access control (RBAC), with default roles including Guest, Viewer, Editor, Creator, and Admin, each defining specific permissions for actions like viewing, editing, or managing content. Permissions are scoped to organizational levels such as shelves, books, chapters, and pages, allowing overrides at more specific content hierarchies while inheriting from broader levels. As detailed in the organizational structure, these permissions cascade downward unless explicitly restricted, providing fine-tuned control over content visibility and modification.[11] To enhance security, BookStack supports multi-factor authentication (MFA) on a per-user basis, using time-based one-time passwords (TOTP) generated by authenticator apps, along with backup codes for recovery. Administrators can enforce MFA requirements through role settings, prompting users to enable it upon login.[33] Session management relies on secure cookies for maintaining user logins, with options to enforce secure transmission over HTTPS, and includes standard logout functionality to terminate active sessions and clear authentication data.[33]Deployment and Extensibility
Installation and configuration
BookStack requires specific system prerequisites to ensure compatibility and performance. The platform is built on PHP version 8.2 or higher, including extensions such as GD, DOM, iconv, mbstring, mysqlnd, openssl, PDO, PDO MySQL, tokenizer, XML, and ZIP; optional extensions like LDAP and EXIF may be needed for advanced features. Additionally, it needs MySQL 5.7 or later, or MariaDB 10.2 or later, along with Git for repository management and updates, Composer version 2.2.0 or higher for handling PHP dependencies, and a compatible web server such as Apache or Nginx to serve the application files.[9] For a manual installation, begin by cloning the official GitHub repository using the commandgit clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch bookstack, which downloads the stable release branch into a directory named "bookstack." Next, navigate into the directory and execute composer install --no-dev to install the required PHP dependencies without development tools. Create a copy of the example environment file with cp .env.example .env, then edit .env to configure the database connection details (such as DB_HOST, DB_DATABASE, DB_USERNAME, and DB_PASSWORD) and mail settings (like MAIL_MAILER, MAIL_HOST, and MAIL_FROM_ADDRESS). Ensure the directories storage, bootstrap/cache, and public/uploads have appropriate write permissions for the web server user. Generate an application key by running php artisan key:generate. Point the web server's document root to the public folder, then execute php artisan migrate to set up the database schema. Access the application via the web server, logging in with the default credentials [email protected] and password, and immediately change them upon first use.[9]
BookStack supports containerized deployment through community-maintained Docker images, such as the one provided by LinuxServer.io, enabling quick setup in isolated environments. To deploy, use a Docker Compose file that pulls the image (e.g., linuxserver/bookstack), maps ports (typically 80 for HTTP), and configures persistent volumes for the /config (application data, including uploads for files and images) and a separate persistent volume for the database in its dedicated container, to prevent data loss on container restarts. An example setup involves defining services for BookStack and a MySQL/MariaDB container, setting environment variables for database credentials and the application URL, then running docker-compose up -d to start the stack. This approach simplifies dependency management and scalability on servers with Docker installed.[34]
After installation, configure core settings via the .env file to tailor the application to the deployment environment. Set the APP_URL variable to the full base URL of the installation (e.g., https://example.com) to ensure proper link generation and redirects. For email functionality, specify the mail driver and server details, such as MAIL_MAILER=smtp, MAIL_HOST=smtp.example.com, MAIL_PORT=587, MAIL_USERNAME, and MAIL_PASSWORD, allowing notifications for user registrations and content updates. The initial administrator account is automatically provisioned upon first login with the default credentials, after which additional users can be managed through the application's interface.[9][18]
Common configurations include securing the installation with HTTPS and adjusting file storage options. To enable HTTPS, configure the web server (e.g., via Let's Encrypt certificates in Apache or Nginx) to enforce SSL/TLS encryption, updating the APP_URL to use https:// accordingly. File storage defaults to the local filesystem, with uploaded images and attachments saved to storage/app/public/uploads; this path can be customized in config/filesystems.php if needed, though local storage is recommended for simplicity in most self-hosted setups. Ensure all configurations are tested post-setup to verify functionality.[9][35]
Customization and integrations
BookStack supports extensive customization through its theme system, which allows users to modify both the visual appearance and underlying behavior of the platform. The visual theme system enables overrides for views, translation strings, and icons primarily via CSS and Blade template modifications, providing flexibility for branding and UI adjustments without altering core files.[36] This system is implemented by creating a custom theme directory and setting theAPP_THEME environment variable, though such overrides are considered unstable and may require updates after core releases.[36] Complementing this, the logical theme system uses PHP event hooks to extend functionality, such as adding custom routes or commands, allowing deeper behavioral changes like integrating additional logic during content processing.[36]
The platform's REST API facilitates programmatic interactions, supporting create, read, update, and delete (CRUD) operations on content entities like books, chapters, pages, and shelves, as well as user management tasks.[36] Authentication for API requests is handled via API tokens, which can be generated for users with the 'Access system API' permission, enabling secure external access.[36] In version 25.11, released on November 9, 2025, the API was expanded to include full CRUD endpoints for comments and new retrieval options for image data, enhancing integration capabilities for dynamic content handling.[5]
Users can inject custom HTML and JavaScript to embed external elements, such as calendars or interactive charts, either through the WYSIWYG editor's HTML mode for page-specific additions or via the global "Custom HTML Head Content" setting in the administration panel for site-wide scripts and styles.[36] This injection method supports overrides for functionality and appearance but requires caution to avoid conflicts with updates or security policies like Content Security Policy (CSP).[36]
While BookStack lacks a formal plugin ecosystem, extensions are achieved through the theme systems and community-contributed hacks, with a limited but growing set of tools for enhancements like LDAP group synchronization and scripted exports via the API.[31][37] For instance, LDAP authentication is natively supported for user import and role mapping, configurable via environment variables to sync groups with BookStack roles.[31]
Integrations with external services are enabled through outgoing webhooks, which trigger POST requests in a Slack-compatible format for events like content updates, allowing notifications to platforms such as Discord, Zulip, or Microsoft Teams.[29] Configuration occurs in the "Settings > Webhooks" interface, with options for asynchronous processing via a queue worker to minimize performance impact.[29] Additionally, single sign-on (SSO) is supported via SAML 2.0, replacing default authentication with identity provider login, automatic user registration using external IDs, and optional group synchronization to roles.[32] Setup involves editing the .env file with IdP metadata and providing BookStack's ACS and SLS endpoints to the provider.[32]