28 May 2026
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.11.05 can be downloaded from:
Installation instructions can be found at:
Koha 25.11.05 is a bugfix/maintenance release.
It includes 37 enhancements, 143 bugfixes.
System requirements
You can learn about the system components (like OS and database) needed for running Koha on the community wiki.
This fixes an accessibility issue with the course reserves table in the OPAC (OPAC > Course reserves): "Table header text should not be empty".
Previously when responsive table controls were shown for the list of course reserves (a green "+" button is shown when the browser window is narrower and all the columns can't be displayed), there was no title for the column header with the controls.
Now, the column header has the text "Expand" when the responsive controls are shown.
The magnifying glass icon links now have a title and aria label "View authority record".
42448 Staff Interface News (newsfooter) text does not have sufficient color contrast
Sponsored by Athens County Public Libraries
This fixes searching for suggestions using the "Bibliographic information" filter on the acquisitions page in the staff interface (Acquisitions > Suggestions).
Searching was not working as expected in some situations. For example, searching for a title of an existing suggestion did not return any results.
Embedding WebService::ILS::OverDrive into Koha to fix several perl validation errors. The author of the module is not reachable on CPAN. This can be reverted once upstream has been fixed.
Direct dependency upgrades: - gulp-exec from ^4.0.0 to ^5.0.0 (fixes lodash.template HIGH vulnerability) - lodash from ^4.17.12 to ^4.17.23 (MODERATE) - minimatch from ^3.0.2 to ^3.1.4 (HIGH)
Yarn resolutions added to pin secure versions of transitive dependencies: - form-data ^2.5.4 (CRITICAL) - fast-xml-parser ^4.5.4 (CRITICAL) - braces ^3.0.3 (HIGH) - qs ^6.14.1 (HIGH) - serialize-javascript ^7.0.3 (HIGH) - micromatch ^4.0.8 (MODERATE) - @cypress/request ^3.0.0 (MODERATE) - js-yaml ^4.1.1 (MODERATE) - undici ^6.23.0 (MODERATE)
This brings in upstream security fixes for critical, high, and moderate severity vulnerabilities reported by yarn audit. No functional changes are expected in Koha beyond those provided by the updated dependencies.
(Note: This should not cause any issues, as v1.0.5 is available and already used from Debian repositories for installation.)
42356 New yarn build warning: if() syntax is deprecated
Sponsored by Athens County Public Libraries
This updates the unimarc_field_010.pl value builder for UNIMARC systems. If the value builder finds a publisher from the ISBN entered in 010$a, it now automatically adds the publisher name to the 214$c (only the 214$c is updated if there is also a 210$c, as the 214$c is now the more important field with the bibliographic transition.).
41367 Staff user interface - no sidebar menu when on record sources pages
This adds the missing sidebar menu when using Administration > Catalog > Record sources.
Sponsored by OpenFifth
This change clarifies the option to delete bibliographic records if no items remain in the Batch Item Deletion cataloguing tool.
42176 Form to create an authorized value is submitted when cancelled
Sponsored by Lund University Library
This change fixes a timezone-related issue that occurs when checking patron expiry dates in certain timezones (e.g. Africa/Cairo) where the daylight savings time change erases midnight from that day.
While it is a rare problem, it can cause errors accessing patron details and check out pages in the staff interface for those Koha instances affected.
This fixes patron renewal from the patron check out or details page, so that you can't double-click the "Renew" link, and get double-charged the enrollment fee (where an enrollment fee is this is set for the patron category).
It also changes the "Renew" link from a text link to a standard light-grey action button.
21941 Incorrect GROUP BY in circ/reserveratios.pl
Sponsored by Lund University Library
Catches the unlikely case of there not being an itemtype associated with item or bib for bookings.
41938 Argument "" isn't numeric in numeric gt (>) ... warnings in circulation.tt
Sponsored by Ignatianum University in Cracow
41940 Use of uninitialized value... warnings in circulation.pl
Sponsored by Ignatianum University in Cracow
For those using the MySQL database. Starting from MySQL 5.7.31 and MySQL 8.0.20, mysqldump requires the PROCESS privilege to access tablespace metadata by default. Without this privilege, backup operations fail with permission errors.
This fixes this issue by adding the --no-tablespaces flag to the dbflag variable. This prevents mysqldump from attempting to access tablespace metadata, allowing backups to complete successfully without requiring the PROCESS privilege.
When PatronSelfRegistration is set to ignore (i.e. do nothing) if --del-exp-selfreg is passed to cleanup_database.pl we were issuing warnings. This patch removes those.
This fixes a database error that occurred when starting up a new Koha instance with MySQL version 8.4 or higher.
categories table
Fixes the spelling in the database comment for the categorycode field (in the categories table): 'idenfity' to 'identify'.
41386 Adding 0.00 as value for "Expired hold charge" in circulation rules can lead to exception Koha::Exceptions::Account::AmountNotPositive
Using value 0.00 in "Expired hold charge" rule on circulation rules caused Koha to die with exception Koha::Exceptions::Account::AmountNotPositive when expired hold charge was added for patron. This was caused by error in if statement in method Koha::Hold->cancel which allowed value 0.00 to be passed to method add_debit. This method then raised exception since value 0.00 is not positive. This patch fixes the erroneous if statement in method Koha::Hold->cancel.
Sponsored by Koha-Suomi Oy
When DisplayMultiItemHolds is enabled, item selection for specific items is done via checkboxes; no item is preselected unless there is only one. Otherwise an item is selected via radio buttons. The first one is preselected.
The endpoint requires the 'reserveforothers' permission.
With this change, both the old record (or item) number and new record number (or item) are now shown in the log viewer Info and Diff columns.
This is shown in the diff column as O for the old biblionumber (or itemnumber) and N for the new biblionumber (or itemnumber).
Example for the Diff column for a record-level hold that was moved:
Before (note "O":"11" and "N":11): {"D":{"biblionumber":{"O":"11","N":11},"timestamp":{"O":"2026-02-28 02:39:44","N":"2026-02-28 02:42:02"}}}
After (note "N":11 and "O":262): {"D":{"biblionumber":{"N":11,"O":262},"timestamp":{"O":"2026-02-28 02:54:57","N":"2026-02-28 02:55:18"}}}
Example for the Diff column for a record-level hold that was moved:
Before (note that no biblionumbers or itemnumbers are shown): {"D":{"timestamp":{"N":"2026-02-28 02:51:07","O":"2026-02-28 02:50:00"}}}
After (note that the new and old biblionumbers and itemnumbers are now shown): {"D":{"biblionumber":{"O":139,"N":255},"itemnumber":{"N":563,"O":296},"timestamp":{"N":"2026-02-28 02:59:33","O":"2026-02-28 02:58:34"}}}
Previously, each hold in the hold group was counted as a hold. So if the "Holds allowed (total)" or "Maximum total holds allowed (count)" circulation and fine rules values were exceeded you would not be able to place additional holds and get a message "Too many holds: [patron name] can place of the requested holds for a maximum of XX total holds.".
Example: if the total holds allowed is set to 2 and a group hold was placed on two records, this was counted as 2 holds - placing an additional hold would result in the the "Too many holds" message.
42343 JS error holdsQueueTable is undefined when no holds exist
Sponsored by Koha-Suomi Oy
This fixes a translation issue in the purchase suggestions table in the staff interface. When there is a suggestion title and author, a ", by" is added between the title and the author in the suggestion column. The "by" was not being translated when a language other than English was used for the staff interface.
The "New ILL requests batch" modal was not resetting its state correctly after being closed, causing unexpected behaviour when it was reopened.
The modal now resets its internal state fully when closed, so that each new batch creation session starts from a clean initial state regardless of how far through the workflow the previous session progressed.
(Note: 'Cost' is not editable in the user interface, but the backend used may set the value. 'Price paid' is editable through the 'Edit request' action)
This adds predefined record source values for new Koha installations (Administration > Catalog > Record sources).
The predefined values for record sources are: - batchmod (Batch record modification) - intranet (Staff interface MARC editor) - batchimport (Stage MARC import) - z3950 (Z39.50 import) - bulkmarcimport (Bulk import command line script) - import_lexile (Lexile.com scores from CSV using the command line script)
These values were formerly hardcoded for MARC overlay rules (Administration > Catalog > Record overlay rules). Bug 35380 (added in Koha 26.05) removed the hardcoded values, but didn't update the installation scripts.
This fixes deleting authority records - you can now successfully delete authority records with encoding errors and invalid MARCXML.
Previously, attempting to delete an authority record with encoding errors would result in a 500 error.
41859 Authority search autocomplete results not consistent with search results
Sponsored by Ignatianum University in Cracow
41759 The display of MARC 21 field 026 data (Fingerprint Identifier) is missing (both in intranet and OPAC)
Sponsored by Ignatianum University in Cracow
This fixes the MARC view in the OPAC where an item should be hidden when OPACHiddenItems rules should apply. The item was hidden in the normal view, but not in the MARC view.
41866 "Use of uninitialized value..." warning in opac-search.pl
Sponsored by Ignatianum University in Cracow
41870 Warning "Use of uninitialized value $borrowernumber" in opac-detail.pl
Sponsored by Ignatianum University in Cracow
This patch adjust the display of current holds in a patron's account in the OPAC to clarify which holds are grouped together. It adds a column showing the hold group number and makes it more clear that the message "part of a hold group" can be clicked to reveal a list of grouped holds.
42017 Fix content type of OPAC news RSS
Sponsored by Athens County Public Libraries
42020 (Bug 39482 follow-up) Library info link shown in OPAC without OpacLibraryInfo and library URL
This fixes the link to library information (the (i) icon) in the OPAC holdings table, before the current and home library name. The (i) icon now only appears if the OpacLibraryInfo HTML customization is defined.
Before this, a link to library information was appearing even if OpacLibraryInfo was not defined.
(If there is:
- only a URL defined for the library, the current and home library is an active link to the website
- an OpacLibraryInfo HTML customization AND a URL defined for the library, an (i) icon is shown and in the pop-up window there is the library information and a button with "Visit website".)
(This is related to bug 39482 - Link to edit OpacLibraryInfo from library edit page broken, included in Koha 26.05.00 and 25.11.01.)
Sponsored by Pontificia Università di San Tommaso d'Aquino (Angelicum)
This fixes the patron summary on the front page of the OPAC to show the correct number of holds when hold groups are enabled (DisplayAddHoldGroups system preference).
Grouped holds are now correctly shown as 1 hold, instead of the number of individual holds in hold groups.
This changes the OPAC self-registration form validation so that required fields need actual information, and not just spaces.
Before this, spaces could be entered into most required fields and the form would successfully submit. Now, when submitting, a warning is generated to fill in all missing fields for required fields with just spaces.
This patch fixes two issues with cash refunds on the register page:
Payouts were not appearing in the transactions table after being created because accountlines were fetched before the refund operation completed.
Account credit (AC) refunds were incorrectly creating payout transactions when no cash should leave the register.
This fixes API requests that update a bibliographic record (PUT /biblios/:biblio_id) so that they apply the record overlay rules if defined in Administration > Catalog > Record overlay rules > Module = source.
The predefined values for record sources are: - batchmod (Batch record modification) - intranet (Staff interface MARC editor) - batchimport (Stage MARC import) - z3950 (Z39.50 import) - bulkmarcimport (Bulk import command line script) - import_lexile (Lexile.com scores from CSV using the command line script) and can be expanded in Administration > Catalog > Record sources.
(Regression caused by Bug 39900 - Add public REST endpoint for additional_contents, in Koha 25.11 and 25.05.)
In Reports > Statistics wizards > Circulation there was no option to extract information about entries with statistics.type = 'onsite_checkout'.
This patch adds the 'sip2' user flag to systems on which it does not exist. This flag was introduced in Bug 37893 but due to an error in the upgrade script it was not added to systems without existing SIP configuration.
This fixes the section heading on the SIP2 account form to spell system preference in full ('Syspref overrides' to 'System preference overrides').
28884 ElasticSearch: Question mark in title search returns no results
Sponsored by Pontificia Università di San Tommaso d'Aquino (Angelicum)
41758 Add Fingerprint Identifier data to Elasticsearch index mappings
Sponsored by Ignatianum University in Cracow
41863 Facets generated from Authorized values sometimes show empty labels
Sponsored by Ignatianum University in Cracow
Previously, in UNIMARC instances, a search for "Corporate Body Name" authorities (authtypecode 'CO') in the OPAC or in the Staff interface would return "Collective Title" (authtypecode 'CO_UNI_TI') authorities as well. This has now been fixed. NOTE: this was a Zebra-only issue, Elasticsearch is not affected.
This fixes the self-checkout feature so that barcodes with characters (such as ? or +) work. Previously, attempting to check out an item with such a barcode resulted in an error page.
This change fixes the routing list note so that new lines converted to
don't get escaped by the HTML filter.
This fixes the system preference descriptions for AutoSwitchPatron, CardnumberLog, and SelfCheckoutByLogin so that they use "card number" instead of "cardnumber" (as per the terminology guidelines).
Uncaught TypeError: can't access property "DataTable", crtable is undefined
System preferences with a text input field can now be saved when they are changed back to the original value.
42638 Cannot delete an identity provider domain
Sponsored by Athens County Public Libraries
35237 Duplicate ids in markup of patron card layout edit form
Remove duplicate ID's in the markup to return valid html.
Sponsored by Catalyst
41760 Fix
and in several templatesSponsored by Athens County Public Libraries
41778 Broken display of not for loan status on item detail page
This patch makes some corrections to the way the item detail page template defines and display an item's not for loan status.
Sponsored by Athens County Public Libraries
41835 Add item forms Tag editor buttons on serial edition page are misaligned
Sponsored by Koha-Suomi Oy
This fixes the spelling of "marc" (marc to MARC) in two places: - an error message in the database audit (More > About Koha > Database audit) - the description for the marc_modification_templates permission
42134 String displays incorrectly: words “notices” and “for” appear concatenated
Sponsored by Athens County Public Libraries
This fixes the display of the guarantor information on a patron's details page for the staff interface - there is now a space between the guarantor's surname and relationship. For example: "Henry Acevedo (father)" instead of "Henry Acevedo(father)".
42438 Remove event attributes from icon selection include file
Sponsored by Athens County Public Libraries
42439 Remove event attributes from label-edit-batch.tt
Sponsored by Athens County Public Libraries
42442 Remove event attributes from bibliographic record merge template
Sponsored by Athens County Public Libraries
42445 Remove event attributes from list creation template
Sponsored by Athens County Public Libraries
42467 Remove event attributes from MARC modification templates template
Sponsored by Athens County Public Libraries
This fixes a problem with the batch hold modification tool that was allowing for holds to be batch updated to pickup location that are not valid.
This patchsets adds the ability to log information about holds modified via the batch hold modification tool. Modifications are only logged if the HoldsLog system preference is enabled.
Koha will now attempt to clean the record for parsing. If it can't be recovered, the record will be dropped from found matches.
Previously, uploading a JPEG cover image to Koha's local cover image store caused the file to be re-encoded as PNG, increasing file sizes by up to 10×. A 170 KB JPEG would be stored as ~930 KB.
After this fix, images are stored in their original format. The same image is now stored at ~92 KB — roughly half the original size, with no quality loss.
This affects all installations using the LocalCoverImages system preference.
40633 Add keyboard shortcut to advanced cataloging editor for fixed length field plugins
This enhancement adds a keyboard shortcut to the advanced cataloging editor to open the value builder plugins for the MARC leader, 006, 007, and 008 fields. This shortcut defaults to Control-Shift-H but can be customized as desired.
Sponsored by Main Library Alliance
41062 Expand cronjob erm_run_harvester.pl with parameter for providers
This enhancement adds a new option to define specific providers in the cronjob erm_run_harvester.pl that are used to run the harvesting for COUNTER Reports in the ERM module. Use parameter --provider-id or -p The parameter provider-id is repeatable. If the parameter for provider-id is not used all active providers will be harvested (as before). The script will check if these providers are active (as before).
Sponsored by Karlsruhe Institute of Technology (KIT)
This enhancement adds a notification to the hold found modal when the hold to be filled is part of a group. The modal will include the message "part of a hold group" and a link to the holds table in the patron's account.
42267 Update lists pages to use grid layout for forms
Sponsored by Athens County Public Libraries
37671 Can't print receipt for refund from cash register transaction history
This enhancements adds a new PAYOUT notice template to be use for receipt printing of refund transactions.
We then use that template from both the cash management registers page and the patron account pages.
Sponsored by OpenFifth
41751 Cash register transaction history returns 403 for users with only anonymous_refund permission
Sponsored by OpenFifth
42206 Add REST endpoint GET /libraries/{library_id}/closed_dates
Sponsored by Büchereizentrale Schleswig-Holstein
This patchset adds the abilty to set a maximum execution time in seconds for SQL report queries. Reports exceeding this limit will be automatically terminated. This is configured in the koha-conf.xml file by setting the report_sql_max_statement_time_seconds parameter. By default this is turned off.
You can now set custom defaults for koha-elasticsearch in /etc/default/koha-common. You can still override the defaults using the command line.
42016 Add identifier-other search field for authorities (MARC 21)
Sponsored by Pontificia Università di San Tommaso d'Aquino (Angelicum)
38009 Add a generate next button in serials receive page
This enhancement adds a "Generate next" button to the receive page for a serial, similar to the one on the serial collection page (Serials > [subscription page] > Receive).
Sponsored by Pymble Ladies' College
This enhancement improves the descriptions and tooltips for several SIP2 account form fields: - Allow and hide fields: instead of just codes (such as CQ), most codes now include a description (such as CQ - Valid Patron Password) - Improved tooltips for these fields: . CR item field . CT always send . CV always send 00 on success . CV triggers alert - Adds tooltips in the template section for the AE, AV, and DA field templates
23269 Long hold queues are slowing the service
The patron holds table now uses the REST API to fetch, display and modify hold information, replacing the previous implementation.
What Changed
Migrated the patron holds table to use REST API endpoints for data retrieval All existing holds table functionality remains intact with improved performance and maintainability
Impact
This change modernizes the holds table architecture by leveraging the REST API, providing:
Better separation of concerns between frontend and backend Improved consistency with other API-driven features Foundation for future enhancements to holds management
Sponsored by Koha-Suomi Oy
39780 Update library groups form to use grid layout
Sponsored by Athens County Public Libraries
40113 Update accounting admin pages to use grid layout for forms
Sponsored by Athens County Public Libraries
41823 Update acquisitions admin pages to use grid layout for forms
Sponsored by Athens County Public Libraries
41827 Update authority types pages to use grid layout for forms
Sponsored by Athens County Public Libraries
This enhancement adds a 'diff' to the action logs for purchase suggestions (creating, modifying, and deleting).
Previously, no diff was recorded (although some information was recorded in the Info column).
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.11.05 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.11.05
We thank the following individuals who contributed patches to Koha 25.11.05
We thank the following libraries, companies, and other institutions who contributed patches to Koha 25.11.05
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.11.x-security.
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 28 May 2026 19:24:27.