categories = ["Releases"]
tags = ["Releases"]
title = "BookStack Release v25.02"
-date = 2025-02-27T12:00:00Z
+date = 2025-02-26T14:30:00Z
author = "Dan Brown"
image = "/images/blog-cover-images/cc-by-4/resevoir-julian-herzog.jpg"
slug = "bookstack-release-v25-02"
+++
Today we release BookStack v25.02! This aimed to be a maintenance
-release to upgrade the core framework, but it also introduces
-automatic sorting along with some other enhancements.
+release with the primary goal of upgrading our core framework, but it
+grew a little to include some goodies like automatic sorting,
+theme system additions, and editor improvements.
* [Update instructions](/docs/admin/updates)
* [GitHub release page](https://github.com/BookStackApp/BookStack/releases/tag/v25.02)
**Upgrade Notices**
-TODO - Copy to updates page
-
-- **PHP Version Requirement Change** - The minimum supported PHP version has changed from PHP 8.0.2 to PHP 8.1 in this release. Please see our ["Updating PHP & Composer" documentation page](/docs/admin/updating-php/#updating-php) for guidance on updating PHP where needed.
+- **PHP Version Requirement Change** - The minimum supported PHP version has changed from PHP 8.1 to PHP 8.2 in this release. Please see our ["Updating PHP & Composer" documentation page](/docs/admin/updating-php/#updating-php) for guidance on updating PHP where needed.
- **Sorting** - Basic sort order changes for chapters and pages will no longer affect the "updated" time for these items. Wider changes during sorting (moving to a new parent) will still increment the "updated" time.
- **Theme System** - A `public/` folder within an active theme folder will now be exposed for public access. If for some reason you already have such a folder that you don't want exposed, rename it before upgrading.
-TODO - Video
-<!-- {{<pt imWKrALvSwokP3vrjRdUXh>}} -->
+{{<pt iUZWrk4oxLYc2dFsAPjDyY>}}
### Automatic Sorting with Sort Rules
This is done using "Sort Rules" which are centrally managed via a new "Sorting"
page in the application settings:
-TODO - Image of sorting settings
+
Within a sort rule, you can configure a range of sort operations which will be applied
in the configured order:
-TODO - Image of sort operations
+
Created rules can then be assigned to books via an option in the "Sort"
view for a book:
-TODO - book sort option
+
It's also possible to configure a default sort rule to assign to any new
-created books. This is also part of the new "Sorting" settings page.
+created books. This is part of the new "Sorting" settings page.
These sort rules will then automatically run on events which may alter the sort order,
-like page/chapter create/update.
+like page/chapter create/update events.
The operations within a sort rule can be updated as needed, and upon save
-any assigned books will be automatically sorted to use the new order.
+any assigned books will be automatically re-sorted to use the new order.
For those that want to assign a sort rule to their existing books, [a new
command](/docs/admin/commands/#assign-sort-rule) has been added to make this easy.
### Search Indexing Improvements
The way BookStack indexes content for search now follows more advanced logic
-for this release to address some common limitation faced.
+for this release to address some common limitations faced.
Specifically, single terms containing certain punctuation like `.` periods
would have previously been split, leaving any searches for terms like "24.5"
-falling back to slower exact matches.
+falling back to slower (and non-score based) exact matches.
As of v25.02, BookStack will now index the non-split term in addition to the split term,
allowing both to match with indexed and scored results.
direct way using the theme system via simply creating a `public` directory
within your theme folder.
Any files within this folder will then be served at the `theme/<theme_name>/`
-location of your BookStack instance.
+url path of your BookStack instance.
For full details, see the added ["Publicly Accessible Files"](https://github.com/BookStackApp/BookStack/blob/development/dev/docs/visual-theme-system.md#publicly-accessible-files) section of the visual theme system documentation.
A big thanks to the following ingenious interlingual interpreters that have helped
to translate BookStack since our last feature release:
-- User - *Lang - 4580 words*
-
-*\* Word counts are those tracked by Crowdin, indicating original EN words translated.*
+- HrCalmar - *Danish - 2633 words*
+- cbridi - *Portuguese, Brazilian - 1083 words*
+- zeronell - *Chinese Simplified - 628 words*
+- Indrek Haav (IndrekHaav) - *Estonian - 447 words*
+- m0uch0 - *Spanish - 373 words*
+- julien Vinber (julienVinber) - *French - 370 words*
+- randi (randi65535) - *Korean - 367 words*
+- KateBarber - *Welsh - 356 words*
+- David Bauer (davbauer) - *German - 329 words*
+- scureza - *Italian - 303 words*
+- Tim (thegatesdev) - *Dutch - 251 words*
+- Honza Nagy (honza.nagy) - *Czech - 248 words*
+- Hyunwoo Park (oksure) - *Korean - 242 words*
+- aram.rafeq.7 (aramrafeq2) - *Kurdish - 75 words*
+- Raphael Moreno (RaphaelMoreno) - *Portuguese, Brazilian - 70 words*
+- Antti-Jussi Nygård (ajnyga) - *Finnish - 37 words*
+- Mohammad Aftab Uddin (chirohorit) - *Bengali - 36 words*
+- felixxx - *German Informal - 18 words*
+- Filip Antala (AntalaFilip) - *Slovak - 15 words*
+- Pavel Zlatarov (pzlatarov) - *Bulgarian - 14 words*
+- ingelres - *French - 4 words*
+
+*Word counts are those tracked by Crowdin, indicating original EN words translated.*
### Next Steps
----
-<span style="font-size: 0.8em;opacity:0.9;">Header Image Credits: <span>Photo by <a href="https://commons.wikimedia.org/wiki/File:Howden_Dam_Upper_Derwent_Reservoir_2023_01.jpg">Julian Herzog (CC-BY-4)</a> - Image Modified</span></span>
\ No newline at end of file
+<span style="font-size: 0.8em;opacity:0.9;">Header Image Credits: <span>Photo by <a href="https://commons.wikimedia.org/wiki/File:Howden_Dam_Upper_Derwent_Reservoir_2023_01.jpg">Julian Herzog (CC-BY-4)</a> - Image Modified</span></span>