BookStack Hacks
This part of the site lists available "hacks" that can be applied to customize BookStack or extend its functionality. These hacks are not official supported and can cause instability, introduce issues and may conflict with future updates. Apply at your own risk!
Dynamic Glossary
This hack adds the ability to write global and book-level glossaries, which will then be utilised when viewing pages by marking those words in page content with a dashed underline. »
Prune Revisions Command
This hack registers a custom command using the logical theme system, which will prune the revisions of a specific page to just those with a changelog provided (in addition to the current revision), before resetting the revision numbers across the remaining versions to be sequential without gaps. »
Format Webhooks for Pushover
This is a hack to adapt outgoing webhooks from BookStack so that they are directly compatible with the pushover message API. »
WYSIWYG Docx Import
This hack adds the ability to import “.docx” files into the WYSIWYG editor, by dragging and dropping a “docx” file into the editor area. »
WYSIWYG Editor Autocomplete Suggestions
This hack adds custom autocomplete suggestions to the WYSIWYG page editor (TinyMCE). An autocomplete popup box will show after a “trigger character” (: as configured by default in this hack) is entered after a space, or at the start of a line. »
WYSIWYG Editor Footnotes
This hack adds some level of “footnote” support to the WYSIWYG editor. A new “Footnote” button is added to the toolbar, next to the “Italic” button, that allows you to insert a new footnote reference. »
Custom WYSIWYG Editor Buttons
This hack provides an example of adding custom actions to the WYSIWYG page editor (TinyMCE). By default, this adds an additional “…” overflow menu to the end of the WYSWIYG toolbar, which contains a single new “Insert Cat” button that has a custom icon. »
IFrame Specific Tweaks
This hack will add custom styles & scripts, hiding many parts of the interface while adding additional light/dark mode control, intended to provide a cleaner view that’s suitable for use within iframes embedded on external pages. »
Page Export Contents List
This hack uses the visual theme system to customize the page export template file, used for both PDF and HTML exports, to add a simple linked “Contents” list to the top of the file, generated from the headers within the document. »
Render TeX/LaTeX Mathematics with MathJax
This hack will allow TeX/LaTeX mathematic markup to be rendered within a page on BookStack using MathJax. Inline math can be surrounded with $ and math blocks can be surrounded with $$ or \[. »
Simple Latest Pages RSS Feed
This is a hack to add a simple latest-page RSS feed to the BookStack using the logical theme system. A YouTube video covering the build and use of this customization can be found here. »
Custom Login Form Message
This logical theme system hack allows you to show a custom message on the login form, above the inputs and below the title. »
Force Page Content Links to Open in New Tabs
This hack will force HTML links, within the main content body of a page, to open in a new tab. »
Autosort Tagged Books
This is a hack to BookStack to enable auto-sorting of book chapters and pages upon page or chapter create/update. It sorts by name, ascending, with chapters first. »
Notify Page Updates for Tagged Books
This allows you to configure notifications to be sent to users within roles defined via tags applied to parent books. For example, if a tag with name Notify and value Admins, Viewers is applied to a book, updates to pages within will be notified via email to all users within the “Admins” and “Viewers” roles. »
Notify Updates for Favourited pages
This hack sends out page update notification emails to all users that have marked that page as a favourite. Considerations The sending of emails may slow down page update actions, and these could be noisy if a user edits a page many times quickly. »
Username-based Login
This is a hack to BookStack, using the theme system, so that login presents itself as a username. Upon login attempt, this will match to a user of <username>@<configured-domain> within the database. »