2 categories = ["Releases"]
4 title = "BookStack Release v24.02"
5 date = 2024-02-29T12:10:00Z
7 image = "/images/blog-cover-images/cc-by-sa-2/burnieside-steven-brown.jpg"
8 slug = "bookstack-release-v24-12"
12 For our first feature release of 2024 we have a variety enhancements to enjoy, many
13 building upon the work from the previous release, and many others addressing some
14 common pain-points in BookStack.
16 * [Update instructions](/docs/admin/updates)
17 * [GitHub release page](https://github.com/BookStackApp/BookStack/releases/tag/v24.02)
21 TODO - Add security notice for v23.12.3.
22 TODO - Copy to updates page.
24 - **Comments** - The ability to use markdown content in comments has been removed in this release, replaced by a WYSWIYG editor. This was a fairly hidden feature though so was not commonly utilised. Existing markdown comments will remain although formatting may be lost if old markdown comments are edited.
25 - **Commands** - The "Regenerate Comment Content" command has been removed in this release as this action is now redundant.
26 - **OIDC Authentication** - Proof Key for Code Exchange (PKCE) support has been added to BookStack OIDC authentication. This should not affect existing OIDC use, but you may want to enforce PKCE to be required for BookStack on your authentication system, if supported, for extra security.
29 <!-- {{<pt 4gCUZhHumJDLTtSbGQzXzU>}} -->
31 ### Simple WYSIWYG comment editor
33 Last feature release [we added](https://www.bookstackapp.com/blog/bookstack-release-v23-12/#wysiwyg-editor-for-descriptions)
34 a simple WYSIWYG editor for shelf, book and chapter descriptions. In this release we've
35 updated comments to now also use this editor:
37 TODO - Image of comments editor
39 Formatting in comments was previously possible via markdown but this was little known and not really
40 intuitive for the mixed-skill environment we target, so this should make things much more accessible.
41 This does mean some previously supported markdown formats are no longer supported, but those comments
42 will still remain as-is, unless edited in which case they might lose unsupported formatting while editing.
44 ### Default Page Templates for Chapters
46 Building on the default page template option we added to books in the last release,
47 the same functionality has been carried across for chapters in this release.
48 So it's now possible to set a default page template at the chapter level which
49 will be used as the default content for new pages, when a page is created
50 within that specific chapter:
52 TODO - Image of chapter template selection
54 New pages will use the chapter-level template if set, or otherwise look to
55 use the book-level template if set there.
57 A shout-out to [@Man-in-Black](https://github.com/BookStackApp/BookStack/pull/4750) for developing
58 out the implementation for this feature.
60 ### WYSIWYG Table Improvements
62 Tables are a fairly complex type of content supported by our WYSIWYG editor, especially
63 with all the options and variations that can apply to them. It's easy for sizing & formatting
64 to go wrong, or become somewhat "stuck", while it's difficult to reset these kinds of options.
65 In this release, we've focused on a whole range of improvements to make it easier to handle
66 these kinds of scenarios.
68 TODO - Image of table menu
70 Within the table toolbar menu, there are now a couple of extra options: "Clear table formatting" which
71 makes it easy to reset all sizing and formatting across the whole table in a single click.
72 "Resize to contents" which resets all fixed sizes across the tables, allowing it to automatically scale
75 Multi-table-cell selection has been enhanced, so that clear-formatting & text-direction controls
76 will now properly apply across the whole selection range. We've also addressed an issue with
77 scrollbars clogging up the view in such selections in certain browsers.
79 Lastly, enabling a header row has been made easier. Previously, this required navigating multiple
80 levels of menus but instead you'll now see a "Toggle header row" button in the table toolbar
81 when focused on the first table row:
83 TODO - Table header toggle button
85 ### Improved Video Attachment Support
87 While we don't have video-specific media management in BookStack, some users would upload videos
88 via attachments then embed them into the page, which had the advantage that access to videos would
89 be controlled by access to the page they're uploaded to.
90 While this could work, video ideally needs to be served in a way that can be streamed, otherwise
91 the browser would attempt to download the whole video in one go, and things like timeline scrubbing
94 In this release we've added "Range request" support that allows browsers to fetch video in a
95 stream-supporting manner, while still being behind BookStack's permission control management.
96 Going further, to help the process of embedding, adding an attachment link
97 (or drag and dropping the attachment into the editor) for a video will directly insert that as a
98 video embed rather than a standard link:
100 TODO - Embed preview/animation
102 ### OIDC Authentication PKCE Support
104 Proof Key for Code Exchange (PKCE) is a mechanism that can be added to the OAuth/OIDC authentication flow
105 to help protect against a range of potential attacks via an extra layer of checks against the credentials
106 gained and used by a client application like BookStack.
108 In v24.02 we now support PKCE for the the OIDC authentication flow. This is active by default, and will be used
109 on all OIDC login flows without any additional BookStack configuration needed.
110 OIDC authentication systems that support PKCE will be able to detect and use this for extra security.
111 Some authentication systems also provide the option to make PKCE mandatory, which if provided you may
112 want to enable to harden security further in this area.
114 ### Auth Pre-Register Logical Theme Event
116 A new `AUTH_PRE_REGISTER` event is now available for use via the
117 [logical theme system](https://github.com/BookStackApp/BookStack/blob/development/dev/docs/logical-theme-system.md).
118 This event runs just before a user is created through any self-registration events
119 (including auto-registration events for third-party/saml/ldap/oidc authentication)
120 and its return value can be used to indicate of the registration should be allowed.
121 A `false` return value will stop the registration, and return the user to the login screen.
122 Here's an example use of this logical theme event:
127 use BookStack\Theming\ThemeEvents;
128 use BookStack\Facades\Theme;
130 Theme::listen(ThemeEvents::AUTH_PRE_REGISTER, function (string $authSystem, array $userData) {
131 return str_starts_with($userData['email'], 'barry');
135 This arbitrary example will only allow registration if the user's email address begins with 'barry'.
136 There's a lot of better ways this could be used though, to add custom logic that BookStack does not support
137 by default. For example, you could cross-reference the user against a file, you could check against another API,
138 or even force disable this kind of registration completely by simply returning `false`.
142 There have been some significant changes this release cycle in regards to how the majority
143 of data is queried out from the database. This was mostly a code & data organisation
144 change but some performance optimization was performed alongside these changes.
146 There have also been changes to how redirects and session history tracking are performed
147 which should help avoid some edge cases where users could be redirected to
148 unexpected places, like to uploaded images.
152 A big thanks again to all our terrific tireless translators who provide their time to help
153 translate text for the BookStack interface. Here's those that have contributed since
154 the initial v23.12 release:
156 - Name - *Language - x words*
159 *\* Word counts are those tracked by Crowdin, indicating original EN words translated.*
163 Our next release will be focused on updating the framework used by BookStack, from Laravel 9
164 to Laravel 10. This will require an update of requirements, specifically to the minimum
165 PHP version, which will jump from PHP 8.0 to PHP 8.1. Therefore we'll also be dedicating
166 effort to updating install scripts and to guidance for updating PHP, to support this change.
168 Upon that, I'd like to address the options provided for PDF rendering.
169 Right now we provide DOMPDF by default, which works great via just PHP and is license-compatible
170 for BookStack, while also documenting a way to use WKHTMLtoPDF which offers more advanced
171 rendering but has security & technical considerations. WKHTMLtoPDF is also no longer
172 maintained nor developed, and is dropping out of operating system software repositories,
173 so it's time to look at filling that gap.
174 My current idea is to support a generic, command-calling-based, interface which can then be
175 configured for a variety of PDF rendering solutions, with some guidance in the BookStack
176 docs to make this easy to configure.
178 ### Full List of Changes
180 **Released in v24.02**
182 * Added simple WYSIWYG comment editor inputs. ([#4815](https://github.com/BookStackApp/BookStack/pull/4815), [#3018](https://github.com/BookStackApp/BookStack/issues/3018))
183 * Added default page templates for chapters. Thanks to [@Man-in-Black](https://github.com/BookStackApp/BookStack/pull/4750). ([#4750](https://github.com/BookStackApp/BookStack/pull/4750), [#4764](https://github.com/BookStackApp/BookStack/issues/4764))
184 * Added PKCE support for OIDC. ([#4804](https://github.com/BookStackApp/BookStack/pull/4804), [#4734](https://github.com/BookStackApp/BookStack/issues/4734))
185 * Added "Clear table formatting" & "Resize to contents" WYSIWYG table options. ([#4845](https://github.com/BookStackApp/BookStack/issues/4845))
186 * Added "Toggle header row" button to table toolbar in WYSWIYG editor. ([#985](https://github.com/BookStackApp/BookStack/issues/985))
187 * Added attachment serving range request support. ([#4758](https://github.com/BookStackApp/BookStack/pull/4758), [#3274](https://github.com/BookStackApp/BookStack/issues/3274))
188 * Added new `AUTH_PRE_REGISTER` logical theme event. ([#4833](https://github.com/BookStackApp/BookStack/issues/4833))
189 * Updated app entity loading to be more efficient and avoid global addSelects. ([#4827](https://github.com/BookStackApp/BookStack/pull/4827), [#4823](https://github.com/BookStackApp/BookStack/issues/4823))
190 * Updated book/shelf cover image wording to make sizing in usage clearer. ([#4748](https://github.com/BookStackApp/BookStack/issues/4748))
191 * Updated PWA manifest to allow landscape use. Thanks to [@shashinma](https://github.com/BookStackApp/BookStack/pull/4828). ([#4828](https://github.com/BookStackApp/BookStack/pull/4828))
192 * Updated redirect handling to reduce chance of redirecting to images. ([#4863](https://github.com/BookStackApp/BookStack/issues/4863))
193 * Updated some EN text for consistency/readability. ([#4794](https://github.com/BookStackApp/BookStack/pull/4794))
194 * Updated WYSIWYG editor with improved cell selection formatting clearing. ([#4850](https://github.com/BookStackApp/BookStack/pull/4850))
195 * Updated WYSIWYG text direction & alignment controls to work more reliably on complex structures. ([#4843](https://github.com/BookStackApp/BookStack/issues/4843))
196 * Fixed breadcrumb dropdowns being partly out of view on mobile screen sizes. ([#4824](https://github.com/BookStackApp/BookStack/issues/4824))
197 * Fixed description WYSIWYG not respecting RTL text. ([#4810](https://github.com/BookStackApp/BookStack/issues/4810))
198 * Fixed header bar collapse on smaller screen sizes when when no name or logo is used. ([#4841](https://github.com/BookStackApp/BookStack/issues/4841))
199 * Fixed incorrect pagination display in RTL layout. ([#4808](https://github.com/BookStackApp/BookStack/issues/4808))
200 * Fixed JavaScript error logged on WYSIWYG editor load due to how custom styles were imported. ([#4814](https://github.com/BookStackApp/BookStack/issues/4814))
201 * Fixed scrollbars showing on WYSIWYG table cell range selection in some browsers. ([#4844](https://github.com/BookStackApp/BookStack/issues/4844))
202 * Fixed WYSIWYG code block text direction controls not being respected. ([#4809](https://github.com/BookStackApp/BookStack/issues/4809))
204 **Released in v23.12.3**
208 **Released in v23.12.2**
210 * Fixed attachment list ctrl-click not opening attachments inline. ([#4782](https://github.com/BookStackApp/BookStack/issues/4782))
211 * Updated translations with latest Crowdin changes. ([#4779](https://github.com/BookStackApp/BookStack/pull/4779))
212 * Fixed entity selector popup pre-fill not searching term as expected. ([#4778](https://github.com/BookStackApp/BookStack/issues/4778))
214 **Released in v23.12.1**
216 * Fixed chapter API missing expected "book_slug" field. ([#4765](https://github.com/BookStackApp/BookStack/issues/4765))
217 * Updated translations with latest Crowdin changes. ([#4747](https://github.com/BookStackApp/BookStack/pull/4747))
221 <span style="font-size: 0.8em;opacity:0.9;">Header Image Credits: <span>Photo by <a href="https://www.geograph.org.uk/photo/7714511">Steven Brown (CC-BY-SA-2)</a> - Image Modified</span></span>