Koha Upgrades

Koha 22.05: Release Notes

Koha Community Documentation

Koha 22.05 includes 6 new features and 239 enhancements! New features, enhancements, and changes to system preferences, authorized value categories, and letter codes are linked below, and full 22.05 release notes are available at koha-community.org.

New Features
System Preferences, Authorized Value Categories, and Letter Codes

22.05 manuals:
Full list of available languages

Return to the upgrades hub

New Features


[28786] Two-factor authentication for staff client – TOTP
Sponsored by Orex Digital

[29924] Introduce password expiration to patron categories
Sponsored by
Colorado Correctional Institutions (part of the Colorado Library Consortium)


[19532] Recalls for Koha


[6815] Capture member photo via webcam

System Administration

[13952] Import and export of authority types


[30136] Add back to top button when scrolling



[30544] Add font awesome version to licenses page


[16258] Add a preference to turn EDIFACT off

[26296] Use new table column selection modal for OPAC suggestion fields

[27212] Add column configuration to the acquisitions home page

[28082] Add acquisitions toolbar to vendors on vendor search page

[30130] Allow setting EDI type at the vendor level

[30135] We should allow configuration of whether EDI LSQ segments map to ‘location’ or ‘collection’

[30438] Add select all/clear buttons to invoices.tt open and closed tables

[30510] Add a Patron reason column to the suggestion table in the staff interface

Architecture, internals, and plumbing

[26019] Koha should set SameSite attribute on cookies

[26704] Koha::Item store triggers should utilise Koha::Object::Messages for message passing

[27266] Move C4::Biblio::GetMarcAuthors to Koha namespace
Sponsored by Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)

[27344] Implement Elastic’s update_index_background using Koha::BackgroundJob

[27783] Introduce background job queues

[28416] Email::Sender::Transport::SMTP is using 10Mo of RAM

[28617] misc/kohalib.pl no longer useful

[28998] Encrypt borrowers.secret
Sponsored by Orex-Digital

[29155] Upgrade jquery version to 3.6.0

[29397] Add a select2 wrapper for the API

[29403] dt_from_string should fail if passed more data than expected for the format

[29420] HTTP status code incorrect when calling error pages directly under Plack/PSGI

[29486] kohamarc_update_bib_ids no longer needed for GetMarcBiblio

[29516] Remove dependency on IO::Scalar

[29562] Pass objects to CanItemBeReserved and checkHighHolds

[29609] Links to guess the biblio default view need to be centralized

[29629] Remove two unused intranet MODS XSLT sheets

[29660] reserve/request.pl should not deal with biblioitem

[29695] Centralize columns’ descriptions

[29703] Simplify GetBranchItemRule using get_effective_rules

[29718] DateTime – our ‘iso’ is not ISO 8601

[29741] Add Koha::Patron->safe_to_delete

[29746] Add a handy Koha::Result::Boolean class

[29757] Add filter_by_non_reversible/reversible methods for offsets

[29765] Make Koha::Patron->safe_to_delete return a Koha::Result::Boolean object

[29780] Add Koha::Old::Holds->anonymize

[29788] Make Koha::Item->safe_to_delete return a Koha::Result::Boolean object

[29791] KohaOpacLanguage cookie should set the secure flag if using HTTPS

[29843] Add ->anonymize and ->filter_by_anonymizable to Koha::Old::Checkouts

[29844] Remove uses of wantarray in Koha::Objects

[29847] Koha::Patron::HouseboundProfile->housebound_visits should return a resultset

[29859] Favor iterators over as_list

[29868] Add Koha::Old::Hold->anonymize

[29869] Add Koha::Hold->fill

[29886] Add Koha::Suggestions->search_limited

[29894] 2FA: Add few validations, clear secret, send register notice

[30007] Make ->anonymize methods throw an exception if AnonymousPatron is not set

[30023] Add Koha::Old::Checkout->anonymize

[30058] Add a Koha::Patrons method to filter by permissions

[30059] Add a JS equivalent to Koha::Patron->get_age

[30060] Missing primary key on user_permissions

[30061] Simplify Koha::Patron->get_age

[30076] Add ability to check patron messaging preferences from a notice
Sponsored by Uintah County Library & Wiggin Memorial Library

[30181] Koha::BackgroundJob->derivedclass returns an empty object

[30360] Add helper methods to Koha::BackgroundJobs

[30394] Add ‘draw’ handling to the datatables wrapper and REST API

[30459] BatchDeleteAuthority task does not deal with indexation correctly

[30460] BatchDeleteBiblio task does not deal with indexation correctly

[30464] BatchUpdateAuthority task does not deal with indexation correctly

[30465] BatchUpdateBiblio task does not deal with indexation correctly

[30728] Allow real-time holds queue opt-out


[29873] 2FA: Generate QR code without exposing secret via HTTP GET

[29925] Add a ‘set new password’ page for patron’s with expired passwords
Sponsored by Colorado Correctional Institutions (part of the Colorado Library Consortium)

[29926] Add ability for superlibrarians to edit password expiration dates
Sponsored by Colorado Correctional Institutions (part of the Colorado Library Consortium)


[26587] Cache libraries in Branches TT plugin to improve performance
Sponsored by Lund University Library

[29391] Improve output of reservoir search

[29781] Allow item batch modification to use capturing groups in regex option

[30604] Add value builders for UNIMARC 146 ($a, $h and $i)


[18392] Allow exporting circulation conditions as CSV or spreadsheet

[27946] Add a charge per article request to patron categories

[29519] Add option to resolve a return claim at checkin

[30226] Add system preference to disable auto-renew checkbox at checkout

Command-line utilities

[28962] Unverified self registrations should be removed shortly

[30511] Don’t lock entire database when dumping Koha instance
Sponsored by Catalyst

Fines and fees

[28138] Add system preference to make the payment type required

[29759] Refund credit when cancelling an article request

Hold requests

[27868] Adding the Expiration Date to the Holds Awaiting Pickup report

[28377] Use the API to suspend/resume holds

[28782] Get rid of custom query param list creation for request.pl

[29058] Add option to not load existing holds table automatically

[29346] Real-time holds queue update
Sponsored by Montgomery County Public Libraries

[29517] CanItemBeReserved fetches biblio for agerestriction check if feature not enabled

[29760] Show patron category in Holds queue

[30108] Allow making hold dates required


[22038] When exporting account table to excel, decimal is lost

[26244] Move translatable strings out of memberentrygen.tt and into JavaScript

[26257] Move translatable strings out of subscription-add.tt and into subscription-add.js

[29596] Add Yiddish language
Sponsored by Universidad Nacional de San Martín

[30373] Rewrite UNIMARC installer data to YAML

[30476] Remove NORMARC translation files

[30477] Add new UNIMARC installer translation files


[26346] Add option to make a public list editable by library staff only
Sponsored by Catalyst and Horowhenua District Council, New Zealand

[28716] Hide toolbar and opaccredits when printing lists

MARC authority data support

[11083] Authority search result display in staff interface should be XSLT driven

[13412] Allow configuration of auto-created authorities

[20615] Add the link of number of times the authority are used in edit mode

[29965] MARC preview for authority search results
Sponsored by Education Services Australia SCIS

[29990] Show authority heading use in search results
Sponsored by Education Services Australia SCIS

MARC bibliographic data support

[20362] Direct link to authority records missing in staff detail view (1xx, 7xx)


[29491] Improve display of notices in patron details

[30290] Article requests: Add TOC information to AR notices


[13188] Make it possible to configure mandatory patron data differently between OPAC registration and modification

[14242] Use ISBN-field to fill out purchase suggestions using Google Books API

[15594] Sequence of MARC 260 subfields different on XSLT result list and detail page

[17018] Split AdvancedSearchTypes for staff and OPAC

[24220] Convert OpacMoreSearches system preference to news block

[24221] Convert OPACMySummaryNote system preference to news block

[24630] UNIMARC XSLT Update for bug 7611

[27613] Pipe separated contents are hard to customize (OPAC)

[28876] No renewal before advisory text not wrapped in selector

[29066] Remove text in OPAC search form and use Font Awesome icons

[29212] Use Flatpickr on OPAC pages

[29515] Don’t require title for HTML customizations

[29526] Add ‘Immediately delete holds history’ button to patron privacy tab in opac

[29616] Replace library information popup in the OPAC with a modal

[29713] Make item table when placing an item level hold sortable

[29845] Styling OverDrive buttons is difficult

[29899] Show public note to patrons when placing a hold

[29949] Remove use of title-numeric sorting routine from OPAC datatables JS

[29960] Remove Modernizr dependency in the OPAC

[30190] Green buttons turn blue for a second when clicking them

[30243] When OPACSuggestionMandatoryFields includes branchcode the dropdown should default to an empty value

[30288] Provide links to OPACUserJS and OPACUserCSS from News/HTML customizations
Sponsored by Catalyst


[9097] Add option to trigger ‘Welcome mail’ manually

[15156] Get all Borrowers with pending/unpaid fines/accountlines

[29005] Add option to send WELCOME notice for new patrons added via patron imports

[29059] Keep non-repeatable attribute from patron to preserve

[29525] Privacy settings for patrons should also affect holds history

[29617] BorrowerUnwantedField should exclude the ability to hide categorycode

[30055] Rewrite some of the patron searches to make them use the REST API routes

[30063] Make the main patron search use the /patrons REST API route

[30093] Rewrite the patron search when placing a hold with the REST API route

[30094] Rewrite the patron search when requesting an article with the REST API route

[30120] Allow extended attributes during self registration when using PatronSelfRegistrationVerifyByEmail

[30237] Rename/rephrase AutoEmailOpacUser/ACCTDETAILS feature to clarify intended use

[30563] Add system preference to make the cash register field required when collecting a payment

[30611] Add ability to trigger a patron password reset from the staff client

Plugin architecture

[29787] Add plugin version to plugin search results

[30072] Add more holds hooks

[30180] Deprecate after_hold_create hook

[30410] Add a way for plugins to register background tasks


[28020] Error responses should return a code

[29620] Move the OpenAPI spec to YAML format

[29772] Make DELETE /patrons/:patron_id return error codes in error conditions

[29810] Add embed options documentation

[30074] Missing extended_attributes relationship in DBIC schema

[30194] Update required JSON::Validator version

[30674] x-koha-override should use collectionFormat: csv


[5697] Automatic linking in guided reports

[29767] Add cash registers, debit and credit types to report runtime parameters


[20517] Use the “sort bin” field in SIP2 Checkin Response

[25815] SIP Checkout: add more information on why the patron is blocked

[26370] Add ability to disable demagnetizing items via SIP2 based on patron categories

[29874] Remove unused method C4::SIP::ILS::Item::fill_reserve

[29936] Add ability to disable hold capture via SIP checkin
Sponsored by Cheshire Libraries Shared Services


[20689] Improve usability of Item search fields administration page

[22605] Adding the option to modify/edit searches on the staff interface

[27035] Shows the number of results in a facets after facet selection

Searching - Elasticsearch

[29856] Make the ES config more flexible


[6734] Show location in full and brief subscription history in OPAC

[23352] Define serial’s collection in the subscription
Sponsored by Catalyst

[29815] Pre-populate ‘Date acquired’ field when adding/editing items

Staff client

[17748] Show due date in item search results
Sponsored by Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)

[20398] Add a system preference to disable search result highlighting in the staff interface

[21225] Add Syndetics cover images to staff client

[27631] Accessibility: Staff interface – h1 on each page is Logo but should be page description/title
Sponsored by Catalyst

[29575] Add a JS render function equivalent of the patron-title.inc TT include

[30081] Display item type in patron’s holds table

System administration

[7374] Add remote image option for authorized values

[29626] Map biblioitems.place to 264$a by default (MARC21)

[29627] Map biblioitems.publishercode to 264$b by default (MARC21)

[29634] Map biblio.medium to 245$h by default (MARC21)

[29832] Make library column in desk list sortable


[24415] Authority enhancement – Improve access to tabs

[25025] Drag-and-drop cover image upload

[26975] Reindent authorities editor template

[27470] Improve link text for logging in
Sponsored by Catalyst

[27750] Remove jquery.cookie.js plugin

[28405] Add author info to the holds page in the staff interface

[28993] Switch magnifying glass in staff detail pages to FA icon

[29228] Use Flatpickr on offline circulation page

[29277] Replace the use of jQueryUI tabs on item circulation alerts page

[29289] ‘Show fines to guarantor’ should have its own id on patron detail page

[29406] Improve display of OPAC suppression message

[29458] Show login button consistently in relation to login instructions, reset and register links

[29602] We must be nicer with translators

[29648] Make KohaTable tables ‘default length’ and ‘default sort’ configurable

[29867] Reindent authorized values administration template

[29876] Style report id in report results heading

[29998] Replace the use of jQueryUI tabs on item types administration page

[29999] Replace the use of jQueryUI tabs on authorized values administration page

[30000] Replace the use of jQueryUI tabs on the search engine configuration page

[30011] Upgrade jQueryUI to 1.13.1 in the OPAC and staff interface

[30212] Make Select2 available for ILL backend developers

[30223] Move book cover image upload JS to a separate file

[30227] Replace the use of jQueryUI tabs on bibliographic detail page

[30316] Replace the use of jQueryUI tabs on MARC detail page

[30317] Replace the use of jQueryUI tabs on search history page

[30378] Convert about page tabs to Bootstrap

[30396] Convert basket groups page tabs to Bootstrap

[30398] Reindent invoices template

[30400] Convert invoices page tabs to Bootstrap

[30401] Convert budgets administration page tabs to Bootstrap

[30417] Switch to Bootstrap tabs on the basic library transfer limit page

[30419] Convert authority detail page tabs to Bootstrap

[30423] Convert authority merge page tabs to Bootstrap

[30424] Reindent advanced search template in the staff interface

[30433] Convert advanced search tabs to Bootstrap

[30434] Convert catalog merge page tabs to Bootstrap

[30436] Convert article requests tabs to Bootstrap

[30453] Convert offline circulation tabs to Bootstrap

[30454] Convert holds awaiting pickup tabs to Bootstrap

[30456] Convert checkout history tabs to Bootstrap

[30457] Convert holds page tabs to Bootstrap

[30466] Convert serials pages tabs to Bootstrap

[30473] Convert suggestions page tabs to Bootstrap

[30474] Convert tools pages tabs to Bootstrap (part 1)

[30475] Convert tools pages tabs to Bootstrap (part 2)

[30489] Convert MARC and authority subfield edit tabs to Bootstrap

[30491] Convert saved reports tabs to Bootstrap

[30494] Replace the use of jQueryUI Accordion on the table settings page

[30545] Replace the use of jQueryUI Accordion on the notices page

[30549] Replace the use of jQueryUI Accordion on pending patron updates page

[30695] Checkouts and holds count display in tab could be better in patron details

Test suite

[30125] Add full-stack tests for API pagination

[30446] Add a test for GetTagsLabels


[14393] Add collection code filter to inventory

[20076] Overdues email to library for patrons without email should be optional

[22785] Manage matches when importing through stage MARC record import
Sponsored by Fargo Public Library

[22827] Automatic item modifications by age: add age depencency on other field(s) than dateaccessioned

[23873] Allow marc modification templates to use capturing groups in substitutions

[27904] Improve display in creating profile for staging MARC records for import

[28840] Better texts in batch record modification/deletion

[29698] items are not available for TT syntax for PREDUEDGST

[29821] Add interface for generating barcodes using svc/barcode

[29824] Allow for quick spine labels to be editable for printing

[29946] Sort profiles alphabetically when staging MARC records for import

Web services

[20894] Add barcode size parameters to /svc/barcode

[22347] Translatability of ILSDI results for getavaibility
Sponsored by University Lyon 3

[28238] Add itemcallnumber to ILS-DI GetAvailability output
Sponsored by University Lyon 3

System Preferences, Authorized Value Categories, and Letter Codes

New System Preferences


Renamed System Preferences

AutoEmailOpacUser renamed AutoEmailNewUser
RecordIssuer renamed RecordStaffUserOnCheckout

Deleted System Preferences


New Authorized Value Categories


New Letter Codes


For everything 22.05, visit the Koha 22.05: Upgrades Hub

Read more by Sara Brown

Tags 22.05, upgrades