25 Sep 2025
Koha is the first free and open source software library automation package (ILS). Development is sponsored by libraries of varying types and sizes, volunteers, and support companies from around the world. The website for the Koha project is:
Koha 25.05.04 can be downloaded from:
Installation instructions can be found at:
Koha 25.05.04 is a bugfix/maintenance release.
It includes 37 enhancements, 88 bugfixes.
System requirements
You can learn about the system components (like OS and database) needed for running Koha on the community wiki.
This fixes the Koha about > Licenses page to use the US American spelling for license (instead of licence, which is the British English spelling).
This fixes vendor pages when running Koha as a Mojolicious application. You couldn't search for or create vendors (you get a page not found error). (This is related to bug 38010 - Migrate vendors to Vue, added to Koha 25.05.)
40146 Untranslatable actions on vendor
Sponsored by Athens County Public Libraries
40497 Item add form does not respect framework maxlength setting
Sponsored by Athens County Public Libraries
This patch fixes a bug where setting TransfersBlockCirc to 'Don't block' did not allow scanning to continue after the modal pop-up was displayed.
This patchset fixes a bug where the "Drop box mode" and "Forgive overdue charges" checkbox values were not retained when a wrong transfer modal is displayed.
desk_id not cleared when revert_found() called37926 Bookings - "to" untranslatable
Sponsored by Athens County Public Libraries
40510 Add context to the word "More" in several templates
Sponsored by Athens County Public Libraries
40557 Onboarding enrollment period fields styled badly
This fixes the 'Create a patron category' page in the web installer. It tidies up the layout for the enrolment period - the 'In months' and 'Until date' fields were further down the page, instead of aligned to the right of enrolment period label.
Sponsored by Athens County Public Libraries
40618 The display of the field 255 (Cartographic Mathematical Data) is missing (both in intranet and OPAC)
Sponsored by Ignatianum University in Cracow
This standardizes the terminology used throughout the payment system to consistently use 'tendered' instead of the mixed usage of 'collected' and 'tendered' that has caused confusion over the years.
It changes the variable names used in the code, HTML forms, and notices for the point of sale module and patron accounting - there is no change to the terms staff see on the pages in the staff interfaces.
Note: It changes the variable names used in the RECEIPT and ACCOUNT_CREDIT notices. If you have not made any change to the default notices, they will automatically be updated. If you have customized these notices, you will need to manually update them.
40602 Broken HTML showing in Alert 'subscriptions' tab
Sponsored by Athens County Public Libraries
40612 Eliminate duplicate element id in OPAC language menus
Sponsored by Athens County Public Libraries
40614 Invalid markup in cookie consent modal
Sponsored by Athens County Public Libraries
This fixes the recalls history page for a patron - the patron's home library is now shown in the patron information section in the staff interface (previously, "Home library:" was shown without the patron's actual home library showing).
36536 Make REST API's validateUserAndPassword update borrowers.lastseen
This patch add the option in the 'TrackLastPatronActivityTriggers' system preference to update a patron's 'Lastseen' entry when that patron's username and password are successfully validated via the REST API's /auth/password/validation endpoint.
Sponsored by Westlake Porter Public Library
This fixes checking in items using SIP, and there is a hold cancellation request - the hold is now cancelled.
Before this, it did not cancel the hold and it was still listed under "Holds with cancellation requests" (Circulation > Holds > Holds awaiting pickup).
This fixes the basket order table so that when you close (or reopen) a basket, the columns shown remain the same as the table configuration. Before this fix, if you closed a basket and then reopened it, the table settings columns hidden by default were ignored and all the possible columns were shown.
This patch fixes a problem that made the column search filters not to work when doing an item search.
40592 Fix incorrect row highlighting on patron checkout history page
Sponsored by Athens County Public Libraries
40600 Typo in ILL requests template: "Complete request request"
Sponsored by Athens County Public Libraries
40691 CCODE label not includes in case of 'wrong place' problem (and maybe others cases) into inventory.pl
Sponsored by BibLibre
This change adds a new borrower subpermission "api_validate_password" with the description "Validate patron passwords using the API". This permission allows API borrower accounts, especially for third-parties, the ability to authenticate users without needing full create-read-update-delete (CRUD) permissions.
38642 DataTables expand button has no label
Sponsored by Athens County Public Libraries
This enhancement imports the value in 071$d to the price field when adding an item to a basket using the "From a new file" option. Before this, it only imported the value from 010$d and 345$d.
35654 Add option to delete_items.pl to delete record if existing item getting deleted is the only one attached to the bib
This patch updates the delete_items script to use Koha::Items->search instead of a direct database query.
Using a --where option that refers to the items table by name such as: ./misc/cronjobs/delete_items.pl --where "items.withdrawn = 0"
will no longer work and result in an error: execute failed: Unknown column 'items.withdrawn' in 'where clause'
Use the --where option without naming the items table instead: ./misc/cronjobs/delete_items.pl --where "withdrawn = 0"
Sponsored by Cape Libraries Automated Materials Sharing
This patch makes keyword searching available when performing a z39.50 search via the advanced search modal in the advanced cataloging editor.
9762 Log circulation overrides
Summary: Koha circulation actions (checkout, renewal, return) previously lacked detailed logging when staff overrode system restrictions, making it difficult to audit and track these important decisions.
Fix: Added comprehensive override logging that captures when staff bypass circulation restrictions:
- JSON Action Logs: All circulation overrides now log structured data including confirmation codes (
DEBT,AGE_RESTRICTION,ON_RESERVE, etc.) and forced override reasons- Consistent Format: Standardized JSON logging across all circulation operations (AddIssue, AddRenewal)
- Enhanced Display: Action log viewer shows human-readable descriptions of overrides (e.g., "Patron is restricted", "Renewal limit override")
- Comprehensive Coverage: Tracks overrides for patron restrictions, age limits, checkout limits, holds conflicts, fine overrides, and more
Impact: Provides complete audit trail for circulation policy overrides, improving accountability and compliance reporting. Librarians can now easily track when and why staff bypassed system restrictions during checkout, renewal, and return operations.
Technical Details: Override information is stored as JSON in action logs with format:
json { "issue": 123, "itemnumber": 456, "confirmations": ["DEBT", "AGE_RESTRICTION"], "forced": ["TOO_MANY"] }
Sponsored by OpenFifth and Solutions inLibro inc.
This enhancement adds a new system preference, PreventWithDrawingItemsStatus. When the system preference is enabled it will prevent items that are in-transit or checked out from being withdrawn.
* Sponsored by Cuyahoga County Public Library *
36789 Transform a booking into checkout
Sponsored by Association de Gestion des Œuvres Sociales d'Inria (AGOS) and LMS Cloud
This enhancement adds support to the ERM module for Release 5.1 of the Code of Practice for COUNTER Metrics that came into force in January 2025, with a requirement for reports to be delivered by the 28th of February 2025.
This enhancement adds a 'checkbox' column to the patron holds table located on the 'Holds' tab on the patron 'Details' page and the patron 'Check out' page. It also reimplements suspending and cancelling multiple holds on these pages from a UI/UX point of view. Before, the user was required to check the box under the 'Delete?' column for the respective hold and then click a 'Cancel marked holds' button alongside a cancellation reason. Now, the user selects the holds they want to cancel and click a new 'Cancel selected holds' button. This reworked button now shows the hold cancellation modal, becoming more consistent to what happens when cancelling holds in other pages where this action is also possible. Suspending multiple holds has received the same treatment, with the additional benefit that is now possible to suspend a set of selected holds, rather than only being able to suspend either a single or all holds. This work also serves as preparation for future holds 'bulk actions' on these patron pages, now that selecting multiple holds on these pages has been standardized.
This enhancement adds a new relator term "waw - Writer of afterword" to the RELTERMS authorized values list (from the MARC21 4 June 2025 technical notice).
Note: This change only affects new installations. For existing installations, manually update the RELTERMS authorized values list.
Notes: 1. This change only affects new installations. 2. For existing installations, manually update the RELTERMS authorized values list to reflect the changes from the technical notice. 2. As there is a deprecated term (aui): - Importing records with a nonexistent value will not delete data from the records. It will simply say "aui (Not an authorized value)". - For existing installations and records, use batch record modification before deleting the deprecated term (aui), where required.
Note: This change only affects new installations. For existing installations, manually update the RELTERMS authorized values list.
The patch makes it so NEW_SUGGESTION email notices do not show up in a patron's notice history.
This enhancement adds details of patron merges to the log viewer (when BorrowersLog is enabled).
This enhancement adds new parameters to the install_plugins.pl script to specify which plugins to install.
New parameters : --include
(repeatable) install ONLY the plugins specified --exclude
(repeatable) install all the plugins EXCEPT the ones specified The parameters require the full plugin class (e.g. Koha::Plugin::PluginName).
The parameters cannot be used simultaneously.
This enhancement to quided reports renames the label for the last step from "Next" to "Save" - this reflects the actual behavour.
This enhancement adds the system preference FilterSearchResultsByLoggedInBranch. When turned on this feature will allow librarians to filter search results to only show those belonging to the logged in branch. This selection will be set in the browser's localStorage.
This patch adds a direct link to default framework from the MARC bibliographic frameworks page.
36095 Improve translation of title tags: OPAC part 2
Sponsored by Athens County Public Libraries
38877 Improve translation of title tags: OPAC part 3
Sponsored by Athens County Public Libraries
This enhancement removes the italics formatting from the shelving location in a record's holdings table, now that it is in its own column. (The formatting was there to differentiate the shelving location from the library name when they were in the same column. This is not necessary anymore.)
(This is a follow-up to Bug 15461 - Add shelving location to holdings table as a separate column, added in Koha 25.04.)
34561 Move IntranetReportsHomeHTML to HTML customizations
This enhancement moves the IntranetReportsHomeHTML system preference into HTML customizations. This makes it possible to have language-specific and library-specific content. The option has been renamed StaffReportsHome for better consistency with other HTML customization regions.
Sponsored by Athens County Public Libraries
The Koha manual is maintained in Sphinx. The home page for Koha documentation is
Koha Documentation As of the date of these release notes, the Koha manual is available in the following languages:
The Git repository for the Koha manual can be found at
Complete or near-complete translations of the OPAC and staff interface are available in this release for the following languages:
Partial translations are available for various other languages.
The Koha team welcomes additional translations; please see
For information about translating Koha, and join the koha-translate list to volunteer:
The most up-to-date translations can be found at:
The release team for Koha 25.05.04 is
Release Manager: Lucas Gass
QA Manager: Martin Renvoize
QA Team:
Documentation Manager: David Nind
Documentation Team:
Translation Manager: Jonathan Druart
Wiki curators:
Release Maintainers:
Release Maintainer assistants:
We thank the following libraries, companies, and other institutions who are known to have sponsored new features in Koha 25.05.04
We thank the following individuals who contributed patches to Koha 25.05.04
We thank the following libraries, companies, and other institutions who contributed patches to Koha 25.05.04
We also especially thank the following individuals who tested patches for Koha
We regret any omissions. If a contributor has been inadvertently missed, please send a patch against these release notes to koha-devel@lists.koha-community.org.
The Koha project uses Git for version control. The current development version of Koha can be retrieved by checking out the main branch of:
The branch for this version of Koha and future bugfixes in this release line is 25.05.x.
Bug reports and feature requests can be filed at the Koha bug tracker at:
He rau ringa e oti ai. (Many hands finish the work)
Autogenerated release notes updated last on 25 Sep 2025 18:51:29.