Koha Upgrades

Koha Upgrade for Fall 2021

For ByWater Partners, we are doing a double release this Fall 2021! We will be upgrading you to the 21.05 version which will include all the features and enhancements from both 20.11 and 21.05! We have combined the release notes in this blog post to make it easier for libraries to see the fun stuff coming to a Koha module of your choice.

If you prefer to look at each Upgrade separately:

Koha 20.11 Upgrade Notes

Koha: 21.05 Upgrade Notes


We have scheduled two webinars to cover our favorite new features and enhancements for Koha versions 20.11 and 21.05, followed by two Q&A sessions to answer all of your questions! Webinars were held on October 13 and 15, and Q&A sessions will be held October 26 and 28. Recordings, Q&A, registration links, and more details are available here.

Blog Posts / Tutorial Videos

ByWater has created blog posts and tutorial videos on some of the enhancements and features coming with this Fall 2021 release. This list will be updated as posts are released:

Create Matching Profiles When Importing Records (What's New Webinar)

Koha Adds a Credit Numbering System

Unwanted Fields in the Purchase Suggestion Form (What's New Webinar)

Monday Minutes: Publisher Drop-down in Cataloging

Monday Minutes: PayPal System Preferences

Customizing Purchase Suggestions by Branch (What's New Webinar)

Pseudonymization in 21.05: The new feature you'll want to learn to spell and pronounce

Monday Minutes: Default Expire Date for Holds

Monday Minutes: System Preference Interface Improvements

Hold Cancellation: Reasons and Notices (What's New Webinar)

Subfield Sequence: Create a Default Order for Subfields (What's New Webinar)

Overdue and Lost Items in Koha 21.05: Restore Overdue Fines on Found Items (What's New Webinar)

Circulation Rules: decreaseLoanHighHolds and useDaysMode (What's New Webinar)

Set a Default Table View for Batch Patron Modification Tool

Invoice Table Improvements: Open/Closed Tabs and Bulk Status Changes

Monday Minutes: Automatic Checkin by Item Type

Monday Minutes: Viewing Holds History in the OPAC

Monday Minutes: New Logs are Added

Monday Minutes: Inventory Filtering (What's New Webinar)

Monday Minutes: Easy MARC Record Suppression

Monday Minutes: Secure Passwords per Patron Category

Monday Minutes: Adding a Dropdown Option in Reports

Monday Minutes: New Option With Claims Returned

Monday Minutes: Refund Lost Update

Monday Minutes: Confirm Materials at Check-In

Monday Minutes: Auto Renewal Messaging Preferences

Module Specific Blog Posts

Patrons & Circulation

Technical Services

Administration and Reports

OPAC & Public Services

New Features

Architecture, internals, and plumbing

[22417] Add a task queue


[21946] Group circulation by item type

[25534] Add ability to specifying and store a reason when cancelling a hold

Fines and fees

[19036] Number payment receipts / payment slips


[22818] ILL should be able to send notices


[24151] Add a pseudonymization process for patrons and transactions

System administration

[22343] Add configuration options for SMTP servers

[26290] Add the ability to set a default SMTP server in koha-conf.xml

[26633] Add advanced editor for transfer limits


[23019] Ability to create ‘matching profiles’ when importing records


[20212] Improve performance of acquisitions receive page

[22773] Bulk close invoices and filter invoice view (open/closed)


[11299] Add a button to automatically link authority records in cataloguing (AJAX)

Marc bibliographic data support

[8976] Default sequence of subfields in cataloguing and item editor

Staff client

[22569] Add a ‘Transfers to send’ report



  • [23971] Add logging for basket related actions
  • [26630] Allow custom text for each library on the purchase suggestion page
  • [27023] Add class names in the suggestions column in suggestions management
  • [27240] Export basket: remove spaces and don’t export links
  • [27606] Breadcrumbs on parcel.pl should include a link to the vendor
  • [27646] Allow export of acquisitions home and funds table
  • [27793] Store Contents of FTX segment of EDI quotes for inclusion in orders
  • [27794] Add link to biblio in lateorders page
  • [15329] Show budget in addition to fund for late orders in acquisition

  • [21882] Add price column to acquisition details tab in staff interface

  • [21898] Add basket info available for ACQORDER

  • [23420] Add “SuggestionsUnwantedFields” to hide fields from the suggestions form

  • [23682] Add ability to manually import EDI invoices as an alternative to automatic importing on download

  • [24157] Additional acquisitions permissions
  • [25033] Counts of suggestions are confusing
  • [26014] Add publication year and edition to Z39.50 results in acquisition

  • [26089] Add acquisitions-related reports to acquisitions sidebar menu

  • [26503] Allow to limit on standing orders in acquisition advanced search

  • [26582] Add Koha::Acquisition::Basket->close

  • [26680] Update (rcvd) to (received) with its own class in basket view

  • [26712] Set focus for cursor to basket name input box on basketheader.pl

  • [26729] When adding a new vendor set focus for cursor to name input box

Architecture, internals, and plumbing

  • [16357] Plack error logs are not time stamped

  • [20582] Turn Koha into a Mojolicious application

  • [21395] Make perlcritic happy

  • [22393] Remove last remaining manualinvoice use

  • [22394] Remove C4::Accounts::manualinvoice

  • [23070] Use Koha::Hold in C4::Reserves::RevertWaitingStatus

  • [23092] Add ‘daterequested’ to the transfers table

  • [23166] Simplify code related to orders in catalogue/*detail.pl

  • [23376] Cleanup order receive page code

  • [23632] Remove C4::Logs::GetLogs

  • [23895] Tidy up the directories under installer/data/mysql/

  • [25067] Move PO file manipulation code into gulp tasks

  • [25070] Include files to display address and contact must be refactored

  • [25114] Remove duplicated logic from GetLoanLength()

  • [25287] Add columns_settings support to API datatables wrapper

  • [25333] Change message transport type for Talking Tech from “phone” to “itiva”

  • [25334] Add generic ‘phone’ message transport type

  • [25663] Koha::RefundLostItemFeeRules should be merged into Koha::CirculationRules

  • [25723] Improve efficiency of holiday calculation

  • [25998] Add ‘library’ relation to Koha::Account::Line

  • [26132] Improve readability of TooMany

  • [26133] Unneeded calls in detail.pl can be removed

  • [26141] Duplicated code in search.pl

  • [26251] Remove unused routines from svc/split_callnumbers

  • [26268] Remove items.paid for once and for all

  • [26325] Add primary_key_exists function to Installer.pm

  • [26394] .mailmap needs to be updated

  • [26432] Remove unused ModZebrations

  • [26485] Simplify itemnumber handling in returns.pl

  • [26515] Add Koha::Acquisition::Order->cancel
    Sponsored by ByWater Solutions

  • [26524] Add Koha::Acquisition::Basket->orders

  • [26555] Add a way for Koha::Object(s) to carry execution information

  • [26577] Make basket.pl and cancelorder.pl use $order->cancel

  • [26579] Remove unused C4::Acquisition::DelOrder function

  • [26580] Remove unused C4::Acquisition::DelBasket function

  • [26584] Remove unused C4::Acquisition::CloseBasket function

  • [26600] Missing module in Indexer.pm

  • [26621] .mailmap adjustments

  • [27002] Make Koha::Biblio->pickup_locations return a Koha::Libraries resultset
  • [22824] Replace YAML::Syck with YAML::XS
  • [23271] Koha::Patron::Category should use Koha::Object::Limit::Library
  • [23583] Handle OpacHiddenItems with yaml_preference
  • [23830] Koha::AuthorisedValues should use Koha::Objects::Limit::Library
  • [24254] Add Koha::Items->filter_by_visible_in_opac
  • [25026] RaiseError must be set for the UI
  • [25670] Add useful methods to Koha::Acquisition::Orders
  • [25755] Add a Koha::Item->request_transfer method
  • [25757] Add a Koha::Item::Transfer->transit method
  • [25767] Add Koha::Item::Transfer->receive method

  • [25802] Koha::Calendar->addDate should be renamed addDuration to better reflect it’s purpose

  • [26057] Add Koha::Item::Transfer->cancel method

  • [26481] Add Koha::Item::Transfer->in_transit method

  • [26618] C4/RotatingCollections.pm should not use C4::Circulation::transferbook

  • [26950] Checkin failure messages are unclear or too specific

  • [27069] Change holdallowed values from numbers to strings

  • [27131] Move code from circ/pendingreserves.pl to modules

  • [27246] Remove apache only code from C4::Context BEGIN

  • [27268] Move C4::Biblio::GetMarcNotes to Koha namespace

  • [27281] Replace call to C4::Circulation::DeleteTransfer with Koha::Item::Transfer->cancel({ comment => $comment }) in C4::Circulation::LostItem

  • [27485] Rename system preference gist to TaxRates

  • [27486] Rename system preference delimiter to CSVDelimiter

  • [27487] Rename system preference reviewson to OPACComments

  • [27491] Rename system preference opaclanguages to OPACLanguages

  • [27636] Replace Koha::Account::pay with a simpler method

  • [27673] Replace YAML with YAML::XS
    Replaces uses of YAML module with more widely supported YAML::XS module.

  • [27756] background_jobs_worker.pl is memory inefficient

  • [27833] Koha::Exceptions::Patron::Attribute::* should have parameters

  • [27851] Add Koha::Old::Checkouts->filter_by_todays_checkins method

  • [27896] Remove C4::Circulation::DeleteTransfer
  • [27930] Move escape* functions from acq/parcel.tt to be re-usable

  • [27995] Koha::Account::Line->apply should return the update Koha::Account::Line object

  • [28056] Add Koha::Exceptions::Patron::MissingMandatoryExtendedAttribute

  • [28210] C4::Circulation::LostItem should pass through skip_record_index to MarkIssueReturned

  • [28278] Improve $KOHA_CONF parsing speed by using XML::LibXML

  • [28386] Replace dev_map.yaml from release_tools with .mailmap


  • [18506] SSO – Shibboleth Only Mode


  • [5428] Back to results after deleting a record

  • [12533] Improve authority search result display

  • [15851] Only display “Analytics: Show analytics” when records have linked analytics.
  • [15933] Add cataloguing plugin to search for existing publishers in other records

  • [16314] Show upload link for upload plugin in basic MARC editor

  • [20154] Stay in the open tab when editing authority record

  • [22399] Improve responsive behavior of the basic marc editor

  • [24134] Add placeholder for 2 digit years to allow autogeneration of dates in 008

  • [24176] Show the date of the last circulation in the items table in the staff interface

  • [25728] Add the ability to create a new authorised value within the cataloguing module

  • [26145] Add the ability to attach a cover image at item level

  • [23302] Less clicks on Z3950 search results

  • [24108] Configure if biblionumber or control number is used for saved files from detail page or advanced cataloguing editor

  • [26943] Show not for loan descriptions in cataloging search (addbooks.pl)

  • [27422] HTML5Media is http by default but Youtube is https only

  • [27545] NewItemsDefaultLocation is only used from additem.pl

  • [27980] Replace obsolete title-string sorting: Catalog templates

  • [28035] Improve breadcrumbs of cataloging search page

  • [28179] Use a lightbox gallery to display the images – detail page, staff interface


  • [12656] Allow a CANCELLATION_REASON to be specified on the cancel_expired_holds.pl job

  • [14866] Make high holds work with different item types and number of open days

  • [15780] Include inventory number in patron account summary print

  • [16112] Specify renewal date for batch renew

  • [16748] Batch checkout needs set due date

  • [19351] Add copynumber in the checkouts table in staff interface

  • [19382] Add ability to block guarantees based on fees owed by guarantor and other guarantees

  • [20469] Add item status to staff article requests form

  • [21750] Move collection to its own column in checkins table

  • [23916] Issuer should be recorded and visible in patron circulation history

  • [23979] “Account is locked” message should be displayed on all patron pages

  • [24083] Koha should support “seen” vs “unseen” renewals

  • [24159] Allow daysMode for calculating due and renewal dates to be set at the circulation rules level

  • [24201] Attach desk to intranet session

  • [25232] Add ability to skip trapping items with a given notforloan value

  • [25261] Multiple parts handling – confirmation alert

  • [25430] Improve the styling of the claims returned tab

  • [25699] Add edition information to Holds to pull report

  • [25717] Improve messages for automatic renewal errors

  • [25798] Copyright year to Holds to pull report

  • [25799] Edition information to Holds queue report

  • [25907] When cancelling a waiting hold on returns.pl, looks for new hold to fill without rescanning barcode

  • [26424] Better performance of svc/checkouts

  • [26501] Article requests: Add datatables to requests form in staff client

  • [26643] Staff should be notified that a transfer has been completed on checkin

  • [26694] Set focus for cursor to search input box on guarantor_search.pl

  • [12224] Allow easy printing of patron check-in slip
  • [18532] Messaging preferences for auto renewals
  • [18912] Show more item information when using itemBarcodeFallbackSearch
  • [21883] Show authorized value description for withdrawn in check-in
  • [23207] Allow automatic checkin/return at end of circulation period
  • [26937] Add an optional delay to the CheckPrevCheckout system preference
  • [27306] Add subtitle to return claims table
  • [27924] Display number of holds awaiting pickup on check out screens
  • [28034] Add DataTables to lists of clubs in “Clubs” tabs on patron account
Command Line Utilities
  • [15986] Add a script for sending hold waiting reminder notices
  • [24272] Add a command line script to compare the syspref cache to the database
  • [24541] Database clean-up: purge messages
  • [26459] Allow sip_cli_emulator to handle cancelling holds
  • [27048] Add timestamps to verbose output of rebuild_zebra.pl
  • [27049] Add a script to bulk writeoff debts
  • [27050] Allow multiple category_codes in delete_patrons.pl
  • [27839] koha-worker missing tab-completion in bash
  • [21111] Add –exclude-indexes option to koha-run-backups

  • [21591] Data inconsistencies – Item types and biblio level

  • [23696] build_oai_sets.pl should take biblios from deletedbiblio_metadata too

  • [24152] Add the ability to purge pseudonymized data

  • [24153] Add a confirm flag to the cleanup_database.pl cronjob

  • [24306] Add debug option to koha-indexer

  • [25511] Add –force option to update_dbix_class_files.pl

  • [25624] Update patrons category script should allow finding null and not null and wildcards

  • [26175] Remove warn if undefined barcode in misc/export_records.pl

  • [26451] Small typo in bulkmarcimport.pl

  • [26641] link_bibs_to_authorities.pl: Add the ability to specify the MARC field to operate on

Course Reserves

  • [14648] Batch remove reserve items

  • [25606] Adds “Remove all reserves” button to course details

  • [26880] Add explanatory text to Add course reserve screens

Fines and Fees

  • [16486] Display the TIME a fine was collected/written off
  • [23215] Remove PayPal logic from Koha
  • [24300] Add a ‘payout amount’ option to accounts
  • [26272] Allow cashup summaries to be displayed from the library summary page
  • [26273] Expose cashup summary history for a cash register
  • [27967] Modals on the borrower account page don’t validate minimum values
  • [27971] The VOID method should be updated to respect double-entry accounting
  • [28127] POS register details tables should have a transaction date
  • [8338] Add ability to remove fines with dropbox mode

  • [23091] Add options to charge new or restore forgiven overdues when a lost item is returned

  • [24603] Allow to cancel charges in patron accounting

  • [24610] Let user switch between ‘Pay’ and ‘Write off’ mode

  • [24786] Allow setting a cash register for a login session and configuring library-default cash registers

  • [26160] Add column configuration to the Point of sale, Items for purchase table

  • [26172] Add a cashup summary view (with option to print)

  • [26327] Include checkout library in fines

  • [26506] Koha::Account::pay will fail if $userenv is not set

Hold Requests
  • [19889] LocalHoldsPriority needs exclusions

  • [22789] Establish non-priority holds

  • [23820] Club hold pickup locations should be able to default to patron’s home library

  • [24412] Attach waiting hold to desk

  • [25892] Clarify the visual hierarchy of holds by library and itemtype

  • [26281] Add cancellation reason to holds history

  • [24359] Remove items from Holds Queue when checked in

  • [26498] Add option to set a default expire date for holds at reservation time

  • [27016] Make the pickup locations dropdowns use Select2

  • [27790] Possibility to filter Holds to pull list using pickup place

  • [27864] Visual feedback on overridden pickup locations when placing biblio-level hold

  • [27894] Add visual feedback on overridden pickup locations

  • [28092] Holds to pull needs to include reserve notes


  • [25317] Move translatable strings out of additem.js.inc

  • [25320] Move translatable strings out of merge-record-strings.inc into merge-record.js

  • [25321] Move translatable strings out of strings.inc into the corresponding JavaScript

  • [25351] Move cart-related strings out of opac-bottom.inc and into basket.js

  • [25443] Improve translation of “Select the host record to link%s to”

  • [25687] Switch Y/N in EDI accounts table for Yes and No for better translatability

  • [25922] aria-labels are currently not translatable

  • [26065] Move translatable strings out of marc_modification_templates.tt and into marc_modification_templates.js

  • [26118] Move translatable strings out of tags/review.tt and into tags-review.js

  • [26217] Move translatable strings out of templates into acq.js

  • [26225] Move translatable strings out of audio_alerts.tt and into audio_alerts.js

  • [26229] Move translatable strings out of categories.tt and into categories.js

  • [26230] Move translatable strings out of item_search_fields.tt and into item_search_fields.js

  • [26237] Move translatable strings out of preferences.tt and into JavaScript files

  • [26240] Move translatable strings out of sms_providers.tt and into sms_providers.js

  • [26242] Move translatable strings out of results.tt and into results.js

  • [26243] Move translatable strings out of templates and into circulation.js

  • [26256] Move translatable strings out of templates and into serials-toolbar.js

  • [26291] Move translatable strings out of z3950_search.inc into z3950_search.js

  • [26334] Move translatable strings out of members-menu.inc into members-menu.js

  • [26339] Move translatable strings out of addorderiso2709.tt into addorderiso2709.js

  • [26395] Move translatable strings out of letter.tt into letter.js

  • [26439] Move translatable cart-related strings out of js_includes.inc and into basket.js

  • [26441] Move translatable strings out of catalog-strings.inc into catalog.js

  • [26697] Make translation file for types and descriptions of charges consistent between OPAC and staff


  • [20799] Add a link from biblio detail view to ILL request detail view, if a biblio has an ILL request

  • [23391] Hide finished ILL requests

Label/Patron Card Printing

  • [15563] Add option to regularly delete patroncard and label batches to cleanup_database.pl cronjob
  • [26875] Allow printing of just one barcode
  • [26962] Koha notice/slips/receipts should print in true black (#000000) of just one barcode
  • [28041] Improve breadcrumbs and headings on label creator pages
  • [28119] Use full description in layout type selection

Installation and upgrade (web-based installer)

  • [24973] Allow to localize and translate system preferences with new yaml based installer

  • [25129] Update German (de-DE) web installer files for 20.05


  • [24884] Remove ‘New list’ button in ‘Public lists’ tab if OpacAllowPublicListCreation is disabled

MARC Authority data support

  • [25313] Add optional skip_merge parameter to ModAuthority

MARC Bibliographic data support

  • [15141] Add MARC21 770/772 to OPAC and staff detail pages

  • [15436] MARC21: Use semicolon between series name and volume information

  • [15437] MARC21: Show $i for 780/785

  • [16728] Add MARC21 777 – Issued with entry to staff and OPAC detail pages

  • [24322] National Library of Medicine (NLM) call number to XSLT Detail

  • [12966] Edition statement missing from card view in Z39.50 result list (acq+cataloguing)
  • [27022] Add publisher number (MARC21 028) to OPAC and staff detail pages
  • [27852] Link YES_NO authorized value category to 942$n in Default framework

Marc Bibliographic Record Staging/Import

  • [26199] Record matching rule match check should include Leader/LDR


  • [16371] Quote of the Day (QOTD) for the staff interface.
  • [24197] Custom destination for failed overdue notices

  • [24591] Add developer script to preview a letter

  • [25097] Add option to message_queue to allow for only specific sending notices

  • [25776] Add last updated date for notices and slips

  • [26745] Notice titles/subjects should support Template Toolkit

  • [11257] Document “items.content” for DUEDGST and PREDUEDGST and update sample notices
  • [14233] Add logging support to notices and slips management
  • [14723] Additional delivery notes to messages
  • [21886] Add option to send notices from owning library instead of issuing library
  • [26734] Convert accounts (monetary) notices to use GetPreparedLetter
  • [5927] Show series information in search results page

  • [8732] Add a system preference to allow users to choose to display an icon based on the Koha bibliographic level itemtype

  • [16696] Rename “Publisher” to “Publication details” on detail and result lists

  • [18911] Option to set preferred language in OPAC

  • [19616] Add MARC21 505$g – Formatted Contents Note / Miscellaneous information

  • [20168] Update of the OPAC bootstrap template to bootstrap v4

  • [20936] Holds history for patrons in OPAC

  • [22807] Accessibility: Add ‘Skip to main content’ link

  • [23795] Convert OpacCredits system preference to news block

  • [23796] Convert OpacCustomSearch system preference to news block

  • [23797] Convert OpacLoginInstructions system preference to news block

  • [24405] Links in facets are styled differently than other links on the results page in OPAC

  • [25151] Accessibility: The ‘Your cart’ page does not contain a level-one header

  • [25154] Accessibility: The ‘Search results’ page does not use heading markup where content is introduced

  • [25155] Accessibility: The ‘Login modal’ contains semantically incorrect headings

  • [25236] Accessibility: The ‘Refine your search’ box contains semantically incorrect headings

  • [25237] Accessibility: The ‘Author details’ in the full record display contains semantically incorrect headings

  • [25238] Accessibility: Multiple ‘H1’ headings exist in the full record display

  • [25239] Accessibility: The ‘Confirm hold page’ contains semantically incorrect headings

  • [25242] Accessibility: The ‘Holdings’ table partially obscures navigation links at 200% zoom

  • [25244] Accessibility: Checkboxes on the search results page do not contain specific aria labels

  • [25402] Put OPAC cart download options into dropdown menu

  • [25639] Add search queries to HTML so queries can be retrieved via JS

  • [25771] Allow the user to sort checkouts by the renew column in the OPAC

  • [25801] Add itemnumber parameter to the OPAC detail page that allows to show a single item

  • [25871] Add “only library” to OpacItemLocation options

  • [25984] Accessibility: Shelf browse lacks focus visibility when cover image is missing

  • [26008] Remove the use of jquery.checkboxes plugin from OPAC cart

  • [26039] Accessibility: Shelf browser is not announced upon loading

  • [26041] Accessibility: The date picker calendar is not keyboard accessible

  • [26094] “Suggest for Purchase” button missing unique CSS class

  • [26148] OpenLibrary “Preview” link target is unclear to patrons

  • [26266] Add jQuery validator to opac-password-recovery.tt

  • [26299] Help text for OPAC SMS number should be less North American-centric

  • [26454] Add system preference to set meta description for the OPAC
    Functionality to add meta description tag with content with the system preference OpacMetaDescription. This is used by search engines to add a description to the library in search results.

  • [26519] Clean up OPAC buttons with incorrect classes

  • [26655] Accessibility: Checkboxes on OPAC lists do not contain aria labels

  • [26695] Set focus for cursor to login box on the login popup modal

  • [26706] Fix btn-default styling for better contrast

  • [26718] Change ‘Your reading history” to “Your checkout history”

  • [26753] Set focus for cursor to password field on Overdrive login popup on OPAC

  • [26763] Use standard information style for multi-hold message

  • [26783] Set OpacRenewalAllowed to “Allowed” for new installations

  • [26805] Remove remaining instances of jquery.checkboxes plugin from the OPAC

  • [26825] Add span for publication date in OPAC

  • [26828] Set focus for cursor to current password field when updating in the OPAC

  • [26830] Set focus for cursor to name input box when creating a new list in the OPAC

  • [26881] Remove the period at the end of ‘Limit to currently available items’ in facets

  • [12260] Printing a page from bootstrap shows unnecessary links

  • [18989] Allow displaying biblios with all items hidden by OpacHiddenItems
  • [20410] Remove OpacGroupResults system preference and feature
  • [22752] Show item-level hold details for patrons when logged into their account
  • [25775] Add DataTables controls to user’s checkouts table in OPAC
  • [26123] Show info about existing OPAC note/Patron message on patron’s dashboard
  • [26847] Make borrower category code accessible in all pages of the OPAC
  • [27005] Adding a filter in the datatable of opac-readingrecord page
  • [27029] Detail page missing Javascript accessible biblionumber value
  • [27098] Rename ‘Relatives fines’ to ‘Relatives charges’ in OPAC
  • [27440] Improve structure and style of result toolbars in the OPAC[27493] Improve structure and style of checkbox columns in tables
  • [27610] Accessibility: OPAC – h1 on each page is Logo but should be page description/title
  • [27618] Don’t show dropdown if PatronSelfRegistrationLibraryList only has one library
  • [27681] Style OPAC self-registration CAPTCHA as uppercase
  • [27728] Add a search box on OPAC search history
  • [27740] Accessibility: OPAC – Headings should have correct tags and hierarchy
  • [27742] Accessibility: OPAC – Page titles should have unique information first

  • [27814] Improve responsive behavior of the user page in the OPAC

  • [27876] Accessibility: OPAC – Reduce heading redundancy

  • [27991] Message field for checkout notes should have a maxlength set

  • [28018] Replace obsolete title-string sorting: OPAC templates


  • [8326] Allow patron attributes to be made repeatable after initial creation
  • [21549] Lock expired patron accounts after x days
  • [22150] Make it easier to unselect one member permission after selecting all

  • [27607] Add the ability to compare patron records during merge process

  • [27990] Replace obsolete title-string sorting: Patrons

  • [6725] Make patron duplicate matching flexible

  • [10910] Add a warn when deleting a patron with pending suggestions

  • [13625] RenewalSendNotice setting should be reflected in messaging preferences descriptions

  • [20057] Auto-approve option for borrower modifications

  • [21345] Patron records with attached files not obvious from patron details view

  • [22087] Show city and state in patron search results

  • [23816] Allow to have different password strength and length settings for different patron categories.

  • [25364] Add “Other” to the gender options in a patron record

  • [25654] Make the contact and non-patron guarantor sections separate on patron entry form

  • [26534] Add a Font Awesome icon to help identify staff patrons

  • [26687] Add a Font Awesome icon for superlibrarian patrons

Plugin architecture

  • [21468] Plugins need hooks for checkin and checkout actions

  • [24031] Add plugin hook after_hold_create

  • [24633] Add support for gitlab searching of plugins

  • [25855] Add hook to AddRenewal using a new aftercirc_actions method in circulation

  • [25961] Add hooks for plugins to inject variables to XSLT
  • [26063] Use Koha::Plugins->call for other hooks

  • [26338] Show tool plugins run in tools home

  • [25245] Add a plugin hook to allow running code on a nightly basis

Rest API

  • [23666] Add routes for extended patron attributes

  • [26274] Expose cash register cashup summaries via an API route.

  • [26636] Add objects.find Mojolicious helper

  • [27015] Add filtering options to the pickup_locations routes

  • [27352] Add GET /biblios/:biblio_id/items

  • [27353] Return the number of total records

  • [27366] Add GET /patrons/:patron_id/holds

  • [27544] Simplify /checkouts implementation

  • [27587] Use Basic auth on API tests

  • [27760] Add handling for x-koha-override

  • [27797] Make POST /holds use the stashed koha.overrides

  • [27854] Clean GET /patrons controller

  • [27855] Allow embedding extended_attributes on /patrons routes

  • [27898] Make PUT /holds/:hold_id handle x-koha-override for pickup locations

  • [27932] Add GET /biblios/:biblio_id/pickup_locations

  • [28002] Add optional extended_attributes param to POST /patrons

  • [28157] Add the ability to set a library from which an API request pretends to come from

  • [28189] Move the base swagger file to YAML

  • [28463] Change spec for better looking in the docs


  • [24665] Add ability to run cash register report with new cash register feature
    This enhancement exposes the ability to refine the cash register report by cash register the transactions have taken place upon if you are using the ‘UseCashRegisters’ feature.

  • [24834] Display report number after running

  • [24958] Remember last selected tab in SQL reports

  • [25605] Exporting report as a tab delimited file can produce a lot of warnings

  • [22152] Hide printing the tools navigation when printing reports

  • [24695] Improve SQL report validation

  • [26708] Add option to preview SQL from list of saved reports

  • [26713] Add pagination to bottom of saved SQL reports table

  • [27380] Add option for taking a list parameter in reports

  • [27643] Add CodeMirror custom syntax highlighting for SQL runtime parameters

  • [27644] Add button to SQL report editor for inserting runtime parameters

  • [27994] Replace obsolete title-string sorting: Reports templates


  • [14300] siplogs do not record process IDs

  • [26591] Add a choice to prevent the checkout or warn the user if CheckPrevCheckout is used via SIP2
  • [12556] SelfCheck machine starts the hold instantly with an email sent out
    [21979] Add option to SIP2 config to send arbitrary item field in CR instead of collection code

  • [24165] Add ability to send any item field in a library chosen SIP field

  • [25344] Add support for circulation status 10 ( item in transit )

  • [25347] Add support for circulation status 11 ( claimed returned )

  • [25348] Add support for circulation status 12 ( lost )

  • [25541] Add ability to prevent checkin via SIP of items with holds


  • [20888] Allow use of boolean operator ‘not’ in item search

  • [25867] Label holdingbranch as Current library rather than Current location

  • [26032] Add ‘is new’ filter in items search

  • [21249] Syspref to choose whether to search homebranch, holding branch or both for library groups in advanced search
  • [23763] Move pagination calculations to a subroutine


  • [24863] QueryFuzzy syspref says it requires Zebra but Elasticsearch has some support

  • [25054] Display search field aliases in search engine configuration

  • [26991] Add action logs to search engine administration

  • [27682] Add a floating table header for Search engine configuration
  • [19482] Elasticsearch – prevent removal / editing of required indexes

  • [24155] Weights should be (optionally) applied to Advanced search

  • [24807] Add “year” type to improve sorting by publication date

  • [26180] Elasticsearch – Add option to index records in descending order

  • [26310] Allow setting trace_to parameter in Elasticsearch config

  • [26484] Add serials-related reports to serials sidebar menu

  • [23243] Allow filtering out of historic subscription expirations in the check expiration of serials page

  • [27998] Replace obsolete title-string sorting: Serials templates

  • [28036] Improve breadcrumbs of serial claims page

Staff Client

  • [12093] Add CSS classes to item statuses in detail view

  • [15400] Display patron age in useful places in the staff interfacet

  • [18170] Show damaged status on check-in

  • [26007] Warning/reminder for changes to Koha to MARC mapping

  • [26182] Clearly pair UpdateItemWhenLostFromHoldList and CanMarkHoldsToPullAsLost system preferences

  • [26435] AutoSelfCheckID syspref description should warn it blocks OPAC access

  • [26458] Get item details using only itemnumber

  • [26473] Get items for editing using only itemnumber

  • [14004] Add ability to temporarily disable added CSS and Javascript in OPAC and interface

  • [25462] Shelving location should be on a new line in holdings table

  • [26703] Modify the “title” elements to contain unique information first

  • [26707] Split cart and lists button on bibliographic detail pages

  • [27404] Update intranet-tmpl/prog/en/modules/labels/label-edit-range.tt for ACC2

  • [27405] Update intranet-tmpl/prog/en/modules/pos/register.tt for ACC2

  • [27406] Update admin/searchengine/elasticsearch/mappings.tt to adhere to ACC2

  • [27407] Update intranet-tmpl/prog/en/modules/reserve/request.tt for ACC2

  • [27409] Update members/boraccount.tt for ACC2

  • [27411] Update tools/automatic_item_modification_by_age.tt to reflect ACC2

  • [27412] Update intranet-tmpl/prog/en/modules/tools/overduerules.tt to adhere to ACC2

  • [27582] Breadcrumb incorrect for POS: Library details page

  • [27846] Accessibility: Staff Client – Breadcrumbs should be more accessible

  • [27982] Replace obsolete title-string sorting: Acquisitions templates part 1

  • [27983] Replace obsolete title-string sorting: Acquisitions templates part 2

  • [28091] Add meta tag with Koha version number to staff interface pages

System Administration

  • [27251] Rewrite the QOTD editor using the Koha REST API

  • [27263] Link to preferences mentioned in system preference descriptions

  • [27395] Add warning to PatronSelfRegistrationDefaultCategory to avoid accidental patron deletion

  • [27415] Add note to ILLHiddenRequestStatuses preference to the ILLSTATUS authorized value category

  • [27598] Add UPLOAD as a built-in system authorized value category

  • [27652] Offer selections for preferences which ask for patron categories
  • [27805] Use input type “email” for email preferences

  • [27975] Replace obsolete title-string sorting: Administration templates
  • [20815] Add ability to choose if lost fee is refunded based on length of time item has been lost

  • [22844] Simplify the process of selecting database columns for system preferences
  • [23823] Allow system preferences to be bookmarked

  • [25288] Make the libraries list use the API

  • [25630] More capitalization and terminology fixes for system preferences
  • [25709] Rename systempreference from NotesBlacklist to NotesToHide

  • [25945] Description of AuthoritySeparator is misleading

  • [26595] Add SMTP server column to libraries table

  • [23148] Replace Bridge icons with transparent PNG files

  • [23410] Add submenus to system preferences sidebar menu

  • [23852] Merge biblio-title.inc and biblio-default-view.inc

  • [24012] Display ‘Locked’ budget with a lock icon

  • [24156] Basket – Make sort order and number of items to display configurable

  • [24625] Phase out jquery.cookie.js: showLastPatron

  • [24899] Reindent record matching rules template

  • [25031] Improve handling of multiple covers on the biblio detail page in the staff client
  • [25354] Clean up JavaScript markup in cataloging plugin scripts
  • [25363] Merge common.js with staff-global.js

  • [25427] Make authority subfield management interface consistent with bibliographic subfield management view

  • [25471] Add DataTables to MARC subfield structure admin page for bibliographic frameworks

  • [25593] Terminology: Fix “There is no order for this biblio.” on catalog detail page

  • [25627] Move OPAC problem reports from administration to tools

  • [25727] Update the Select2 JS lib
    Sponsored by Orex Digital

  • [25827] Add floating toolbar to the holds summary page in staff interface

  • [25832] Add DataTables to MARC subfield structure admin page for authorities

  • [25834] Relabel “Search to add” to “Search for guarantor” or “Add guarantor” on patron form

  • [25879] Improve display of guarantor information in the patron entry form

  • [25906] Style corrections for OPAC serial pages

  • [25941] Reindent Upload local cover image page

  • [25968] Make logs sort by date descending as a default and add column configuration options

  • [26004] Remove unused jQuery plugin jquery.hoverIntent.minified.js from the OPAC

  • [26010] Remove the use of jquery.checkboxes plugin from staff interface cart

  • [26011] Remove unused jQuery plugin jquery.metadata.min.js from the OPAC

  • [26015] Terminology: staff interface should be used everywhere

  • [26016] Capitalization: MARC Preview

  • [26060] Replace staff interface table sort icons with SVG

  • [26061] Improve style of sidebar datepickers

  • [26085] Add the copy, print and export DataTables buttons to lost items report

  • [26087] Add table configuration and export options to orders by fund report

  • [26091] Add column configuration and export options to catalog statistics report

  • [26120] Remove the use of jquery.checkboxes plugin from tags review template

  • [26149] Remove jquery.checkboxes plugin from problem reports page

  • [26150] Remove the use of jquery.checkboxes plugin from inventory page

  • [26151] Remove the use of jquery.checkboxes plugin from suggestions management page

  • [26152] Remove the use of jquery.checkboxes plugin from serial collection page

  • [26153] Remove the use of jquery.checkboxes plugin from items lost report

  • [26154] Remove the use of jquery.checkboxes plugin from batch item deletion and modification

  • [26159] Remove the use of jquery.checkboxes plugin from batch record delete page

  • [26164] Replace OPAC table sort icons with SVG

  • [26194] Messages about missing cash registers should link to cash register management

  • [26201] Remove the use of jquery.checkboxes plugin from batch extend due dates page

  • [26202] Remove the use of jquery.checkboxes plugin from batch record modification page

  • [26204] Remove the use of jquery.checkboxes plugin from staff interface lists

  • [26212] Remove the use of jquery.checkboxes plugin from pending offline circulations

  • [26214] Remove the use of jquery.checkboxes plugin on late orders page

  • [26215] Remove the use of jquery.checkboxes plugin from Z39.50 search pages

  • [26216] Remove the use of jquery.checkboxes plugin from catalog search results

  • [26245] Remove unused functions from members.js

  • [26261] Split calendar.inc into include file and JavaScript file

  • [26280] Add unique IDs or class names for each condition in returns.tt

  • [26419] Replace OPAC Koha logo with SVG

  • [26456] Reindent MARC subfield structure template

  • [26504] Remove the use of jquery.checkboxes plugin from checkout notes page

  • [26530] Use patron card number as checkbox label during patron merge

  • [26767] Remove the use of jquery.checkboxes plugin from duplicate orders template

  • [26768] Remove the use of jquery.checkboxes plugin from library transfer limits page

  • [26769] Remove the use of jquery.checkboxes plugin from staff interface search history

  • [26795] Remove the use of jquery.checkboxes plugin from ILL pages

  • [26798] Remove the use of jquery.checkboxes plugin from patron detail page

  • [26799] Remove the use of jquery.checkboxes plugin from patron payment page

  • [26800] Remove the use of jquery.checkboxes plugin from checkout page

  • [26806] Remove the jquery.checkboxes plugin from the staff client

  • [26817] “Total” line in checkouts table is too short when ExportCircHistory is activated

  • [26826] Set focus for cursor to name input box when creating a new list

  • [21851] Improve style of sidebar forms

  • [24623] Phase out jquery.cookie.js: Advanced MARC editor

  • [24624] Phase out jquery.cookie.js: Receipt summary

  • [25846] Improve handling of multiple covers on catalog search results in the staff client
  • [26755] Make the guarantor search popup taller

  • [26958] Move Elasticsearch mapping template JS to the footer

  • [26959] Reindent batch item modification template

  • [26960] Move batch item modification template JavaScript to the footer

  • [26970] Add row highlight on drag in Elasticsearch mapping template

  • [26982] Typo in system preference UsageStats: statisics

  • [26985] Remove code for “Upcoming events” from codebase as not implemented

  • [27192] Set focus for cursor to item type input box when creating new item types

  • [27210] Typo in patron-attr-types.tt

  • [27289] Template tweaks for point of sale page

  • [27402] Add column filtering to the Datatables REST API wrapper

  • [27403] Enable fixedHeader for Datatables

  • [27437] Improve hint labels on library creation form

  • [27439] Improve hint labels on patron attribute type entry form

  • [27455] Add focus to branch code when a new library is added

  • [27465] Add column visibility to the admin/cities.pl

  • [27469] Improve link text when returning to vendor page

  • [27471] Improve link text when successfully merging authorities and remove JS redirect

  • [27472] Improve link text when successfully merging bibliographic records

  • [27473] Improve link text in the installer

  • [27474] Improve link text to define a label printer profile if none defined and fix conditional

  • [27475] Improve link text to define a patron card printer profile if none are defined

  • [27476] Improve link text for logging in on OPAC

  • [27477] Improve link text when a record has too many items on the OPAC

  • [27478] Improve link text when viewing an ILL requested item

  • [27479] Improve link text after successfully resetting password in OPAC

  • [27592] Link audio alerts to corresponding preference and back

  • [27605] Add floating toolbar to patron search page

  • [27699] Add cash register information to responsive staff interface header menu

  • [27749] Phase out jquery.cookie.js: Search to hold

  • [27751] Phase out jquery.cookie.js: Batch item modifications

  • [27792] Improve jEditable configuration for point of sale fields

  • [27974] Replace obsolete title-string sorting: Circulation templates

  • [28006] Restore “Additional fields” link on serials navigation menu

  • [28016] Replace obsolete title-string sorting: Assorted templates

  • [28046] Add “Additional fields” link on acquisition navigation menu

  • [28047] Standardize: Call number, callnumber, Call no. etc.

  • [28055] Convert DataTables option names to current version

  • [28066] Remove select tag’s size attribute where it is 1

  • [28081] Make card number a label in patron search results

  • [28132] Remove “this” from button descriptions on basket and basket group pages

  • [28134] Replace use of input type number in onboarding templates

Test Suite
  • [18146] C4::Circulation CanBookBeRenewed lacks full test coverage
  • [25113] Make CirculationRules.t flexible for new scope combinations
    Sponsored by National Library of Finland

  • [26157] Redirect expected DBI warnings

  • [26462] t/db_dependent/Holds.t tests delete data unnecessarily

  • [4985] Copy a change on the calendar to all libraries

  • [5087] Option to not show CSV profiles in OPAC

  • [21066] Replace opac_news.timestamp by published_on and add updated_on as timestamp

  • [22660] Allow use of CodeMirror for editing HTML in the news editor

  • [23114] Inventory: allow to scan barcodes into input field

  • [25101] Add ability to skip previewing results when batch extending due dates

  • [25694] Add ability to delete a MARC modification template when viewing

  • [25845] Cannot limit system logs to ‘api’ interface

  • [26013] Date on ‘manage staged MARC records’ is not formatted correctly

  • [26086] Add a ‘cron’ interface limit to the log viewer

  • [26207] Compare values of system preference log entries

  • [26431] Use split button to offer choice of WYSIWYG or code editor for news

  • [26572] Add autocomplete to librarian field in log viewer

  • [26736] Compare values of reports log entries

  • [26804] News: Move the news preview out of the table and into a modal

  • [26844] Log viewer does not indicate which logs are enabled

  • [4037] Inventory tool missing item type filter

  • [24446] Stockrotation: Update to use daterequested in branchtransfers

  • [25476] Uploaded files can’t be easily browsed via upload.pl

  • [27594] Add access to public download link for publicly-accessible uploads

  • [27766] Hide expired news items by default

  • [27773] Hide unique holidays and exceptions which have passed

  • [28007] Replace obsolete title-string sorting: Tools templates

  • [28014] Add table settings to batch patron modification

  • [28037] Improve breadcrumbs of CSV profiles page
  • [28108] Move action logs ‘SERIAL CLAIM’ and ‘ACQUISITION CLAIM’ to a new ‘CLAIMS’ module
Web Services
  • [19353] Make possible to have custom XSL template for marcxml and marc21 metadata prefixes in OAI server

  • [25460] Allow using item information in OAI set mappings and automatically update sets when items are added, edited or deleted

  • [25650] Add location and itype descriptions in ILS-DI GetRecords

  • [27584] Improve OAI-PMH provider performance

New System Preferences

  • AddressForFailedOverdueNotices

  • ArticleRequestsMandatoryFieldsItemOnly

  • AutoCreditNumber

  • BiblioItemtypeInfo

  • CircConfirmItemParts

  • DefaultLongOverdueSkipLostStatuses

  • EdifactInvoiceImport

  • HoldsNeedProcessingSIP

  • ILLDefaultStaffEmail

  • ILLHiddenRequestStatuses

  • ILLSendStaffNotices

  • NewsToolEditor

  • NoIssuesChargeGuarantorsWithGuarantees

  • NoRefundOnLostReturnedItemsAge

  • NotesToHide

  • OAI-PMH:AutoUpdateSetEmbedItemData

  • OPACHoldsHistory

  • OPACSuggestionUnwantedFields

  • OpacMetaDescription

  • PatronDuplicateMatchingAddFields

  • PhoneNotification

  • Pseudonymization

  • PseudonymizationPatronFields

  • PseudonymizationTransactionFields

  • RecordStaffUserOnCheckout

  • SkipHoldTrapOnNotForLoanValue

  • UnseenRenewals

  • AcquisitionLog

  • AutoRenewalNotices

  • ChargeFinesOnClosedDays

  • CheckPrevCheckoutDelay

  • ClaimsLog

  • DefaultHoldExpirationdate

  • DefaultHoldExpirationdatePeriod

  • DefaultHoldExpirationdateUnitOfTime

  • DefaultSaveRecordFileID

  • ElasticsearchCrossFields

  • LockExpiredDelay

  • NoticesLog

  • OpacHiddenItemsHidesRecord

  • Reference_NFL_Statuses

  • SearchLimitLibrary

  • casServerVersion

Renamed System Preferences

  • delimiter => CSVDelimiter

  • LetterLog => ClaimsLog

  • UseICU => UseICUStyleQuotes

  • gist => TaxRates

  • opaclanguages => OPACLanguages

  • reviewson => OPACComments

  • NotesBlacklist => NotesToHide

Deleted System Preferences

  • opaccredits

  • OpacCustomSearch

  • OpacLoginInstructions

  • GoogleIndicTransliteration

  • AllowPurchaseSuggestionBranchChoice

  • EnablePayPalOpacPayments

  • PayPalChargeDescription

  • PayPalPwd

  • PayPalReturnURL

  • PayPalSandboxMode

  • PayPalSignature

  • PayPalUse

New Authorized Value Categories



New Letter Codes









More Koha Resources

Koha 21.05.00 Manual can be found at:

Koha 21.05.00 schema can be found at:

Read more by Kelly McElligott

Tags 20.11, 21.05