Koha Upgrades

Koha: 20.05 Upgrade Notes

Attention ByWater Solution partners, Koha 20.05 is coming in February.

Koha 20.05

Koha 20.05.00 is a major release, that comes with many new features. It includes 13 new features, 275 enhancements, and 592 bug fixes.

20.05 Resources

Koha Community 20.05 Release Notes

Koha Community 20.05 Manual

Koha Community 20.05 Schema

Tutorial Videos and Blog Posts

OPAC: Not for Loan Descriptions

OPAC: Customizing Course Reserves

Monday Minutes: More OPAC System Preferences Move to News Feature

OPAC: Purchase Suggestions Enhancements

Monday Minutes: Customizing the Patron Form

Monday Minutes Batch Functionality in the Staff Search

Save and Share Your Advanced Catalog Editor Macros

Adding a Library Link to the OPAC

Reporting a Problem Through the OPAC

Define Groups of Locations for Hold Pickups in Koha

Point of Sale Functionality in Koha

Define which Fields are Copied from Guarantor to Guarantee in Koha

Monday Minutes: View Updated Time in Patron Notices

Monday Minutes: Exporting Items in Item Search

Monday Minutes: Printing a Range of Barcode Labels

Monday Minutes: Using the Logs

Monday Minutes: Using the Reports Plus Plugin

Recorded What's New Webinar

Q&A Blog Post

Here is a link to our Q&A blog post featuring all the questions that were asked during our two upgrade webinars:

Koha 20.05 What's New Webinar Questions and Answers

Module Specific Blog Posts

20.05: Administration and Report Updates

20.05 OPAC and Public Services Updates

20.05 Technical Services Updates

20.05 Patrons and Circulation

Here is a breakdown of the 20.05 new features and enhancements from the Koha Community

New Features


  • [24347] Add a ‘search to order’ function
    Sponsored by Athens County Public Libraries
    This new feature allows staff to add items to an order via a new ‘Search to order’ function accessible from the basket. The order can then be created either directly from the result list or the detail pages of the catalog. This replaces the former search functionality for existing records within the acquisitions module and makes it possible to use all search features and information shown in the normal catalog.


  • [13881] Add ability to defined circulation desks
    Sponsored by Bibliothèque Universitaire des Langues et Civilisations (BULAC)
    When enabled, this feature makes it possible to define circulation desks per library. Future developments are planned to allow associating hold pickup locations with desks and other features. New system preference: UseCirculationDesks defaults to disabled.
  • [24846] Add a tool to enable bulk edit of due dates
    Sponsored by BibLibre, ByWater Solutions and PTFS Europe
    With events sometimes leading to unforeseen library closures, (Coronavirus for example), this new tool allows librarians to update due dates in bulk based on library and current due date of the materials on loan.Access to the tool requires a new permission batch_extend_due_dates.

Fines and fees

  • [23354] Add a ‘Point of sale’ screen to allow anonymous payments
    Sponsored by Cheshire Libraries Shared Services and PTFS Europe
    The new feature adds point of sale functionality to Koha.
    When enabled, a new “Point of sale” screen will be available from the staff client home page. From this screen, one can build up a transaction consisting of various items defined in the account debit types administration area and then process the transaction anonymously making a ‘sale’ to the end-user. The payment type, cash register and staff user id’s are all stored for later auditing purposes.
    New system preference: EnablePointOfSale defaults to disabled.
  • [23355] Add a ‘cashup’ process to accounts
    Sponsored by Cheshire Libraries Shared Services and PTFS Europe
    This new feature complements the new ‘Point of sale’ page introduced in bug 23354 by adding a page to display historic transactions that have taken place on the selected cash register since the last ‘cashup’ event. One can record a ‘cashup’ from this page by comparing the summary values displayed on the page to the actual amounts found in the cash register and then clicking the ‘cashup’ button to record that this process has taken place.
  • [23442] Add a ‘refund’ process to accounts
    Sponsored by Cheshire Libraries Shared Services and PTFS Europe
    This enhancement adds a workflow that allows staff with the new refund permission to refund/reimburse patrons when they have been incorrectly charged for a transaction. It records an audit trail for the process.
  • [24080] Add a ‘payout’ process to accounts
    Sponsored by Cheshire Libraries Shared Services and PTFS Europe
    This new feature adds an audited process for paying out excess credits on a patrons account.


  • [23112] Add circulation process to inter-library loans
    Sponsored by Loughborough University
    This new feature, when enabled, adds the option for library staff to immediately issue a received inter-library loan item to the patron who requested it. The checkout is immediate and due date is set, either as a fixed date entered by the librarian or based upon the standard circulation rules. New system preference: CirculateILL defaults to disabled.


  • [4461] Add a context-sensitive report a problem process
    Sponsored by Catalyst
    This new feature, when enabled, lets patrons report problems using the OPAC. It adds a link to each page of the OPAC to a form so that patrons can report problems. Problems are then available via a new problem report management area in the staff interface. New system preference: OPACReportProblem defaults to disabled.

Plugin architecture

  • [23975] Add ability to search and install plugins from GitHub
    This patch makes public plugins discoverable from within Koha itself via a search box at the top of the plugin management page.
    One can search for plugins and install them directly from their source.
    WARNING: Plugins are not yet verified by the community, use at your own risk. The feature is disabled by default; to enable it an administrator must uncomment, or add new lines to, the relevant configuration lines inside the plugin_repos config block within koha-conf.xml.


  • [24302] Add a way to specify nested objects to embed in OpenAPI
    This development introduces a way to define embeddable objects on API routes.


  • [14567] Add an elasticsearch driven browse interface to the OPAC
    This is an interface for quick and efficient browsing through records with Elasticsearch. It presents a page at /cgi-bin/koha/opac-browse.pl that allows you to enter the prefix of an author, title, or subject and it’ll give you a list of the options that begin with the text you entered. You can then scroll forward through these and select the one you’re after.
    New system preference: OpacBrowseSearch defaults to disabled.

Web services

  • [24369] Add ability to set CORS header in Koha
    This development adds support for setting the Access-Control-Allow-Origin header in Koha using the new AccessControlAllowOrigin system preference.
    New system preference: AccessControlAllowOrigin defaults to empty.



  • [12502] Add columns for note, order number and ISBN to late orders page
    This adds the internal note, vendor note, order number and ISBN to the late orders table. The notes are editable directly from the table using a modal dialog.
  • [14963] Add the ability to suggest purchase from existing titles
    Sponsored by Bibliothèque Universitaire des Langues et Civilisations (BULAC)
  • [14973] Add an alert during purchase suggestion submissions to warn the user when an existing biblio appears to satisfy the request
    Sponsored by Bibliothèque Universitaire des Langues et Civilisations (BULAC)
  • [16784] Add table configuration for the suggestions table
  • [22774] Add ability to limit the number of purchase suggestions a patron may submit in a specified time period. New system preferences: MaxTotalSuggestions defaults to empty (unrestricted) and NumberOfSuggestionDays defaults to empty (disabled).
  • [22784] Add the ability to archive purchase suggestions
    Sponsored by Bibliothèque Universitaire des Langues et Civilisations (BULAC)
  • [23590] Add the ability to change the manager of a suggestion and notify the new manager
    Sponsored by Bibliothèque Universitaire des Langues et Civilisations (BULAC)
  • [23591] Add a new “Suggestions details” tab on bibliographic record
  • [23592] Add a shortcut from suggestion details to the bibliographic details in the staff client
    Sponsored by Bibliothèque Universitaire des Langues et Civilisations (BULAC)
  • [23593] Add a shortcut from suggestion details to the bibliographic record in the OPAC
    Sponsored by Bibliothèque Universitaire des Langues et Civilisations (BULAC)
  • [23594] Add ability to batch modify itemtypes from the suggestions page
    Sponsored by Bibliothèque Universitaire des Langues et Civilisations (BULAC)
  • [23596] Add ability to modify the suggestions ‘reason’ field when receiving the item
    Sponsored by Bibliothèque Universitaire des Langues et Civilisations (BULAC)
  • [24158] Add ability to receive items in multiple currencies
    Sponsored by Athlone Institute of Technology
  • [24161] Add ability to track the claim dates of later orders
    Sponsored by Cork Institute of Technology
  • [24162] Add quantity column to the late orders table
    Sponsored by Cork Institute of Technology
  • [24163] Add ability to define a CSV profile for late orders export
    Sponsored by Institute of Technology Tralee
  • [24276] Add functionality to apply defaults from the ACQ framework for mandatory fields when adding records from external sources
  • [24308] Add ability to sort by dates in the suggestions table
    Separates information about dates and roles into separate columns so they can be sorted nicely.
  • [24819] Add ability for librarians to choose a patron when entering a purchase suggestion

Architecture, internals, and plumbing

  • [18936] Move issuingrules into circulation_rules
    As part of ongoing efforts to simplify and enhance the circulation rules system, the issuingrules table has been removed and replaced by a new circulation_rules table.Any reports that may have used the issueingrules table will need to be updated to utilise the updated database structure.
  • [19735] Move Perl deps definitions into a cpanfile
    This enhancement moves us away from custom-built dependency management and to the widely adopted cpanfile format for perl dependency listing.If you are running koha from git for development purposes you can now install perl dependencies using standard perl tooling and the included cpanfile.This patch also introduces the ability to set maximum versions in our dependancy listing (and excluded versions too), which should help us better track our compatibility.
  • [20116] Improve performance by caching the language list
  • [20443] Move C4::Members::Attributes to Koha namespace
  • [20728] Remove subroutines GetLastOrder*
  • [21294] Add identification of boolean fields in the database
  • [21503] Update AuthorisedValues.pm to fall back to code if description doesn’t exist
  • [21746] Remove NO_LIBRARY_SET
  • [21800] TransformKohaToMarc should respect non-repeatability of item subfields
  • [22529] /svc/members/search relies on quirks of haspermission
  • [22589] Remove sub C4::Overdues::BorType
  • [22823] Koha::Library needs a method for obtaining the inbound email addressThis patch adds a new inbound_email_address method to the Koha::Library class. This allows for a consistent way of getting a libraries branch email address for incoming mail.
  • [23463] Move C4::Items CRUD subroutines to Koha::Item
  • [24052] Koha::XSLT housekeeping for bug 23290 (follow-up)
  • [24066] Koha::Patron->has_permission has no POD
  • [24103] Add option to dump built search query to templates
    This enhancement allows you to view the search query used by Zebra or Elasticsearch, to help with troubleshooting. To use, enable the new system preference DumpSearchQueryTemplate, enable DumpTemplateVarsIntranet and DumpTemplateVarsOpac, and then search the page source in the staff interface or OPAC for ‘search_query’.
    New system preference: DumpSearchQueryTemplate defaults to disabled.
  • [24149] Add new Koha::Statistic[s] classes
    Sponsored by Association KohaLa
  • [24252] Add credits, debits, credit_offsets and debit_offsets relationships to Koha::Account::Line
    Sponsored by Cheshire Libraries Shared Services and PTFS Europe
    This enhancement allows for fetching related credits, debits and offsets directly from an existing Koha::Account::Line object and includes compatibility for prefetching of relations for performance.
  • [24255] Add totals methods Koha::Account::Lines
    Sponsored by Cheshire Libraries Shared Services and PTFS Europe
    This enhancement completes the set of summation methods available from a Koha::Account::Lines resultset object, complimenting the existing total_outstanding method.
    It introduces the following methods:
    • total – Sum of all amount fields in the accountlines set.
    • credits_total – Sum of all amount fields for credits in the accountlines set.
    • debits_total – Sum of all amount fields for debits in the accountlines set.
  • [24356] objects.search prefetch
    This enhancement makes the Koha::Object(s) derived classes expose information about prefetch-able relations. This is then used by a new helper to generate the prefetch information for the DBIC query.
  • [24368] Koha::Libraries->pickup_locations needs refactoring/ratifying
  • [24418] Add Koha::Biblio->suggestions
  • [24419] Add Koha::Suggestion->suggester accessor
  • [24430] Remove C4::Biblio::CountBiblioInOrders
  • [24435] Add Koha::Biblio->items_count
  • [24440] Add ->current_item_level_holds to Koha::Acquisition::Order
  • [24448] Add Koha::Biblio->subscriptions_count
  • [24455] Add ability to apply Koha formatting to dates from Javascript
    This patchset lays the foundations for applying date formatting as described in the Koha system preferences to datetimes returned by the API in RFC3339 format.
  • [24463] Consistent accessor-relationship naming for basket_group in Basket.pm
  • [24467] *_count methods should be avoided
  • [24468] C4::Reserves::getitype is no longer used
  • [24529] Uninitialised value warnings in C4::Reserves
  • [24545] Replace Franklin Street by gnu.org/licenses in copyright
    This enhancement updates the GNU GPL license and copyright statement in all files so they are the same. It also updates the QA check to catch all new files.
  • [24561] Add a datatables API wrapper
    This patch adds a datatables wrapper that allows using datatables against Koha’s API. It implements
  • [24642] Cache::Memcached::Fast::Safe must be marked as mandatory
  • [24715] Cache repeatable subfield in TransformKohaToMarc
  • [24721] emailLibrarianWhenHoldIsPlaced should use Koha::Library->inbound_email_address
  • [24723] EmailPurchaseSuggestions should use Koha::Library->inbound_email_address when set to ‘BranchEmailAddress’
  • [24726] overdue_notices.pl should use Koha::Library->inbound_email_address
  • [24732] Make DumpTemplateVars more readable
  • [24735] Remove QueryParser-related code
  • [24759] OpacRenewalBranch code should be a Koha::Item method
  • [24837] selectbranchprinter needs to be renamed
  • [24994] TableExists should be used instead of IF NOT EXISTS in updatedatabase
  • [25045] Add a way to restrict anonymous access to public routes (OpacPublic behaviour)
    This enhancement allows libraries to distinctly disable the OPAC but allow the public facing API’s to be enabled.
    New system preference: RESTPublicAnonymousRequests defaults to enabled.
  • [25109] Add execution locking to Koha::Script
  • [25172] Koha::Logger init is failing silently
  • [25296] Add a way to force an empty Koha::Objects resultset
  • [25297] Consistent return value in K::A::Order->current_item_level_holds
  • [25303] Koha::Objects->delete should not skip overridden object class ->delete


  • [21190] Add logging of successful/unsuccessful login attempts
    This enhancement adds two new logging preferences AuthFailureLog and AuthSuccessLog in order to keep track of bad login attempts and successful ones. NOTE: In some countries, this may be a requirement as a local application of GDPR legislation.
    New system preferences: AuthFailureLog and AuthSuccessLog both default to disabled.


  • [3426] Add support for multiple tags to the itemcallnumber system preference
    The itemcallnumber system preference now allows to specify multiple fields from which Koha can pull a suggestion for the itemcallnumber to use when adding items.
  • [7882] Add ability to move and reorder fields and subfields in MARC editor
  • [8643] Add ability to mark some MARC tags and subfields as important and alert on saving the record if they are found to be empty
    Sponsored by Centre collégial des services regroupés
  • [23349] Add batch operations to staff interface catalog search results
  • [24173] Add subtitle & published date to the search page in the advanced editor
  • [24452] Add visual cue for whitespace in the advanced editor
    Multiple spaces will now be highlighted by a red dotted underline in the editor.
  • [25231] Remove alert when replacing a bibliographic record via Z39.50


  • [18355] Add ‘permanent location’ alongside ‘shelving location’ when located on cart
  • [21443] Add ability to exclude holidays when calculating rentals fees by time period
    Allows to configure on item type level, if the calendar will be taken into account when calculating hourly or daily rental fees.
  • [23051] Add ability to optionally renew fine accruing items when all fines on item are paid off
    Sponsored by Loughborough University
    With the addition of a new RenewAccruingItemWhenPaid system preference, we gain the ability to automatically renew items with accruing fines at the point of payment of those fines.
    New system preferences: RenewAccruingItemWhenPaid and RenewAccruingItemInOpac both default to disabled.
  • [24287] Add ability to record what triggered a given transfer
    With the addition of the reason field to the branchtransfers table this allows us to track what triggered a transfer which is helpful both for later audit and for later use in code where we may want to cancel or replace existing transfers.
  • [24296] Move stock rotation transfer triggers from comments to reason
  • [24297] Record if a transfer was triggered ‘manually’
  • [24298] Record if a transfer was triggered by ‘return to homebranch’
  • [24299] Record if a transfer was triggered by ‘rotating collections’
  • [24436] Record if a transfer was triggered by a ‘hold’
  • [24585] Add ‘Managed on’ and ‘Suggested on’ columns to suggestions tab in patron account in staff
  • [25188] Make circulation notes more prominent on the patron details tab
    Sponsored by PTFS Europe

Command-line Utilities

  • [15214] Add logging of authority updates to bulkmarcimport
  • [18414] Add ability to pass a file of borrowernumbers for deletion to delete_patrons.pl
  • [19008] Add more options to cleanup database script
    The cleanup_database.pl cronjob now also includes options for deleting:
    • entries from the statistics table
    • deleted bibliographic records and items (deletedbiblio, deletedbiblioitems, deletedbiblio_metadata, deleteditems)
    • deleted patrons (deleted_patrons)
    • returend checkouts (old_issues)
    • filled and cancelled holds (old_reserves)
    • finished transfers between libraries (branchtransfers)
  • [21177] Add ability to run misc/devel/update_dbic_class_files.pl without passing parameters by defaulting to koha-conf.xml
  • [21865] Add Elasticsearch support to, and improve verbose output of, remove_unused_authorities.pl
  • [23571] Add measures to prevent concurrent execution of fines.pl
    Sponsored by Orex Digital
  • [23871] Add check for ‘title exists’ to search_for_data_inconsistencies.pl
  • [24340] Add ability to disable SIP using koha-sip
    This enhancement adds –enable and –disable options to the koha-sip Debian package command.
    • koha-sip –enable instancename => Enables the Koha SIP server
    • koha-sip –disable instancename => Disables and stops the Koha SIP server
  • [24526] Add verbose and test modes to the automatic_renewals.pl cronjob
    This patchset adds new options to the automatic_renewals.pl script to allow test and verbose modes.
    Important: The patches make the –confirm switch required, without it script will be run in test mode. Existing scheduled cronjobs will need to be updated to supply this switch.
    Running without –confirm will default in verbose mode as well.
  • [24651] Add –maxdays option to the fines.pl cronjob to reduce the chance of re-processing very old, already capped, fines.
    Improve the performances of the fines.pl cronjob by reducing the number of accountlines it targets by this new --maxdays option.
  • [24883] Add misc/load_yaml.pl utility script to allow manual loading of yaml data files
    During the 20.05 cycle a number of improvements were made to the installation mechanisms to enhance the translation workflows for this area. As part of that work many existing translated .sql files were moved to a yaml based file.

Course reserves

  • [15377] Add ability to remove ‘checked out’ items from course reserves
  • [22630] Add ability to change the homebranch in course reserves
    Sponsored by Université Jean Moulin Lyon 3
  • [22970] Add ability to change homebranch in batch add course reserves
    Sponsored by Université Jean Moulin Lyon 3
  • [23784] Show subtitle, number and parts in course reserves list of items in OPAC
  • [24343] Show subtitle, number and parts in course reserves list of titles in staff client
  • [25341] When adding a single item to course reserves, ignore whitespace


  • [18177] Remove unused columns in aqbooksellers
  • [22887] authorised_values is missing a unique constraint on category + authorised_value
  • [22987] Add biblioimages.timestamp
  • [25152] subscription.closed is a boolean and must be tinyint(1)

Developer documentation

  • [24774] Specify 2 space indentation for JSON files in .editorconfig
    Sponsored by Hypernova Oy

Fines and fees

  • [6508] Show indication of existing ‘Charges’ on tab of the same name
  • [14898] Add ‘Save and pay’ button to use after adding a manual invoice
  • [17702] Create configuration for account credit types
    This adds a new configuration page for credit types to the administration module.
  • [24081] Add a ‘discount’ process to accounts
    Allows to specify and apply a discount on a patron’s charges. Staff will require the new permission ‘discount’ to use this new functionality.
  • [24082] Add a ‘refund’ option to anonymous payments
  • [24380] Add option to recalculate fines upon a backdated return distinctly from CalculateFinesOnReturn
    New system preference: CalculateFinesOnBackdate defaults to enabled on new installations or the value of CalucalteFinesOnReturn during upgrades.
  • [24478] Make it possible to deactivate point of sale
  • [24479] POS doesn’t follow CurrencyFormat
  • [24492] Add a ‘library cashup’ workflow to the point of sale system
  • [24592] Clarify LOST_RETURN process by using FOUND over RETURNED
  • [24604] Add ‘Pay’ button under Transactions tab in patron accounting
  • [24775] Payment submit button on POS page should have an ID
  • [24812] Add permission for ‘discount’ process
  • [24818] Accountline creation dates should be datetimes
  • [24828] Add cash register support to SIP2
  • [24951] Payout modal confirm button should have an ID
  • [24952] Refund modal confirm button should have an ID

Hold requests

  • [16547] Can’t place item level hold directly from search results screen
    This enhancement lets you place and an item level hold from a search results list.
  • [19718] Create message for patrons with multiple holds on the same item
  • [22284] Add ability to define groups of locations for hold pickup
    Sponsored by Vermont Organization of Koha Automated Libraries
  • [24547] Add more action logs for holds
    Trapping and filling hold will now create entries in the logs, when HoldsLog system preference is activated.
  • [24907] Optionally exclude suspended holds from holds ratio report
  • [24953] Minor corrections to hold ratios report sidebar


  • [13897] Use YAML files for installer data
  • [21156] Internationalization: plural forms, context, and more for JS files
  • [23790] fr-CA translation of ACCOUNT_DEBIT and ACCOUNT_CREDIT notices
  • [24063] Add Sami language characters to Zebra
    This patch adds some additional characters to the default zebra mappings for Sami languages to aid in searching on systems with such data present.
  • [24211] Compress/uncompress translation files
  • [24262] Translate installer data in YAML format
  • [24583] Rewrite mandatory installation files to YAML
  • [24584] Rewrite optional installation files to YAML
  • [24593] Rewrite MARC21 optional data to YAML
  • [24594] Rewrite MARC21 mandatory data to YAML
  • [24648] Contextualization of past tense “Created”
  • [24662] Remove global variables MSG_* from datatables.inc
  • [24664] Add missing *-messages-js.po


  • [23173] ILL should be able to search third party sources prior to request creation
    Sponsored by Public Health England.New system preference: ILLCheckAvailability defaults to disabled.

Installation and upgrade (command-line installer)

  • [24696] We should output completion times in the updatedatabase output.

Installation and upgrade (web-based installer)

  • [22655] Add setup of a hold rule to the onboarding tool
    Sponsored by Catalyst
  • [24131] Improved formatting for output of updatedatabase
  • [24314] Update de-DE MARC21 frameworks for updates 28+29 (May and November 2019)
  • [24707] Remove AMICUS from default fr-CA z39.50 servers
    This removes AMICUS from the fr-CA sample z39.50 servers list as it is no longer valid.
  • [24708] Update Z39.50 server attribute in fr-CA installation file
    This enhancement adds a PQF attribute to the BANQ entry in the fr-CA sample z39.50 servers list, enabling the search to work correctly.

Label/patron card printing

  • [7468] Add label to batch by barcode range
    This enhancement to the label creator tool adds an option to let you generate a range of barcode numbers (for example, from 05000 to 05500) and save these as a PDF, ready for printing.


  • [20754] Db revision to remove double accepted list shares

MARC Authority data support

  • [25235] Don’t alert when replacing an authority record via Z39.50

MARC Bibliographic data support

  • [15727] Add 385$a – Audience to MARC21 detail pages
  • [23783] Add display of languages from MARC21 field 041 to the OPAC
  • [24312] Update MARC21 frameworks to Updates 28+29 (May and November 2019)
  • [25011] Improve display of Production credits (MARC21 508) in OPAC and staff
    This change makes some tiny changes to improve the display and consistency between the OPAC and staff interface:
    • Capitalization: Production Credits –> Production credits.
    • Change div to span to avoid display issues.
    • Make sequence of fields in display match (505, 508, 586).


  • [10269] Add a way to utilise a specific replyto email address for some notices
    This patchset adds the foundations needed to make use of a reply-to address if passed when calling EnqueueLetter.
  • [23673] Separate time sent from time created in message_queue table
    The time a message was created and the time it was sent are now separate columns in the message_queue table and will shown in the patron’s account on the notice tab.
    Sponsored by: Northeast Kansas Library System (NEKLS)
  • [24588] Set Mailer-X and MessageID mail headers to reduce the likelihood of Koha mail being marked as spam


  • [7611] Show the NOT_LOAN authorised values for item status in XSLT OPAC search results
    Sponsored by Centre collégial des services regroupés
  • [13121] Move search results “action” links (“Place hold,” “Add tag,” etc) into include file
  • [13388] Add library pages to the OPAC
    This adds a new link “Libraries” or “Library” to the navigation in the OPAC. The new page it links to gives information about all libraries in the Koha installation, using the data from the library configuration.
  • [13547] Item field ‘Materials specified’ would be useful to see in OPAC
    This enhancement allows you to make a new column visible on the OPAC. The new column shows the materials specified field after the call number column.
  • [14715] Results per page setting for catalog search in staff client and OPAC
    Sponsored by Region Halland
    This is enabled by two new system preferences: OPACnumSearchResultsDropdown for the OPAC, and numSearchResultsDropdown for the staff interface.
    The default number of search results is set using existing system preferences: OPACnumSearchResults for the OPAC, and numSearchResults for the staff interface.
    This enhancement works for both Zebra and Elasticsearch search engines.
    New system preferences: OPACnumSearchResultsDropdown and numSearchResultsDropdown both default to disabled.
  • [15775] Show message on OPAC summary if holds are blocked due to fines
    Sponsored by Catalyst
  • [22880] Convert opacheader system preference to news block
  • [23261] RecordedBooks – notify patron of need to login / register to see availability
  • [23547] Add column configuration to course reserves table in the OPAC
  • [23794] Convert OpacMainUserBlock system preference to news block
  • [23913] Use a single menu to sort lists in the OPAC
    This enhancement modifies the sorting form on the OPAC list contents view so that the two menus (sort field and direction) are combined into one.
  • [23915] Replace OPAC list sort menu with Bootstrap menu button
    This patch adds JavaScript to the list contents page which converts the resort form’s `select` menu into a Bootstrap dropdown menu. This allows for a more compact and consistent display.
  • [24336] Ask for confirmation before deleting a suggestion in the OPAC
  • [24344] Modify OPAC link to suggest existing record for purchase
  • [24530] Show the number of title notes in the tab label on the OPAC detail page
  • [24699] Split items.uri on OPAC detail page
  • [24701] Add column configuration to course reserves items table in the OPAC
  • [24740] Use biblio title if available rather than biblio number in OPAC search result cover images tooltips
  • [24913] Add option to require users to enter email address twice during self-registration.
    Sponsored by Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)
    New system preference: PatronSelfRegistrationConfirmEmail defaults to disabled.
  • [25110] Allow patrons to add star ratings to titles on their summary/checkout page
    This enhancement lets logged-in patrons add star ratings to titles listed on their current checkouts and reading history pages.
  • [25166] Add aria-hidden = “true” to Font Awesome icons in the OPAC
  • [25234] Update OPAC search results pagination with aria labels
  • [25271] Add floating toolbar to OPAC cart
  • [25280] Use modal confirmation when removing share from a list in the OPAC
  • [25281] Use modal confirmation when deleting a list in the OPAC
  • [25294] Don’t show deletion button if user can’t delete suggestions
  • [25350] Load Emoji picker assets more efficiently


  • [3137] Allow to collapse areas of the patron add form by default
    Sponsored by Catalyst
    New system preference: CollapseFieldsPatronAddForm defaults to empty.
  • [14229] Link to accounting tab from fines column in patron search results
  • [20847] Add main address, phone, and mobile fields to the Batch patron modification tool
    Sponsored by PTFS Europe
  • [22534] Add ability to choose which fields are copied from guarantor to guarantee
    Sponsored by Waitaki Distict Council
    New system preference: PrefillGuaranteeField defaults to phone,email,streetnumber,address,city,state,zipcode,country.
  • [23409] Show circulation note and OPAC note with line feeds
  • [23495] Show SMS provider on details tab in patron account in staff
  • [24008] Attempting to delete a patron with outstanding credits will warn, but not block the deletion
  • [24476] Allow patrons to opt-out of auto-renewal
    New system preference: AllowPatronToControlAutorenewal defaults to disabled.

Plugin architecture

  • [24183] Introduce before_send_messages hook
    This patch adds a new plugin hook to allow pre-processing of the message queue prior to sending messages.


  • [18731] Add routes for acquisition orders
    Sponsored by Camden County
    This development adds API routes to perform CRUD operation on acquisition order lines.
  • [22615] Add routes for /ill_backends
  • [23893] Add ->new_from_api and ->set_from_api methods to Koha::Object
    This development introduces generic methods to deal with API-to-DB attribute names translations, and some data transformations (dates and booleans).
    With this design we can overload this methods to handle specific cases without repeating the code as we did on initial implementations of API controllers.
    Testing becomes easier as well.
  • [24228] Add a parameter to recursively embed objects in Koha::Object(s)->to_api
    This patch introduces a parameter to the Koha::Object class (’embed’) that should be a hashref pointing to a data structure following what’s documented in the code. This parameter allows the caller to specify things to embed recursively in the API representation of the object. For example: you could request a biblio object with its items attached, like this:
    $biblio_json = $biblio->to_api({ embed => { items => {} } });
    The names specified for embedding, are used as attribute names on the resulting JSON object, and are expected to be class accessors.
    The main use of this is the API, as introduced by bug 24302.
    Koha::Objects->to_api is adjusted to pass its parameters down to the Koha::Object.
  • [24321] Make objects.search use mappings from Koha::Object(s)
    This development takes advantage of the mappings that have been added to the Koha::Object level, and refactors the objects.search Mojolicious helper so it uses it internally.
    This allows us to remove the ‘to_model’ parameter, and makes the need of any kind of mapping on the controllers irrelevant. All the existing mappings are removed and the controllers simplified in this move.
  • [24461] Add to_api_mapping to Koha::Acquisition::BasketGroup
  • [24464] Add K::A::Basket->creator
  • [24502] Add a query language and param (q=) to the API
  • [24528] Add a syntax for specifying counts on x-koha-embed
    Sponsored by ByWater Solutions
  • [24615] Add support for ordering by related object columns in the REST API
  • [24700] Improve Mojo startup speed for REST APIs
    Sponsored by National Library of Finland
  • [24908] Allow fetching text-formatted MARC data
  • [24909] Add unprivileged route to get a bibliographic record
  • [25032] Generic unhandled exception handling
    The current code in the controllers is a bit heterogeneous regarding how unhandled exceptions are treated.
    This enhancement introduces a generic way to write ‘something happened’ as a fallback after expected exceptions handling. This way the catch blocks are easier to read, and devs can follow this simple pattern when writing their endpoints.
  • [25279] Make the cities list use the API


  • [18433] Allow to select results to export in item search
    This enhancement to the item search in the staff interface (Home > Search > Item search) adds the ability to export selected items.
  • [24847] Select AND by default in items search

Searching – Elasticsearch

  • [22828] Add display of errors encountered during indexing on the command line
  • [22831] Add a maintenance script for checking DB vs index counts
  • [23137] Add a command line tool to reset elasticsearch mappings
  • [23204] Add script for exporting elasticsearch mappings to YAML
  • [24823] Drop Catmandu dependency

Self checkout

  • [25147] AllowSelfCheckReturns is in the wrong system preference section


  • [16962] Remove the use of “onclick” from serial collection template
    This patch removes the use of event attributes like “onclick” from the serial collection template.
  • [17674] Allow UI to delete serials issues in batch
    Sponsored by Centre collégial des services regroupés
    This allows to select multiple issues to be deleted from the ‘serial collection’ page in the serials module.
  • [24877] Add link from vendor to linked subscriptions
    Adds a link on the vendor detail page to a subscription search for the vendor’s name to get a list of all linked subscriptions.

Staff Client

  • [17374] Make use of fields from syspref ‘DefaultPatronSearchFields’ in patron search fields dropdown
    This patch preserves the current dropdown choices for patron search, but adds fields additionally defined in the DefaultPatronSearchFields system preference to the list of available options.
  • [23601] Middle clicking a title from search results creates two tabs or a new tab and a new window in Firefox
    This fixes an issue in Firefox where middle-clicking or CTRL-clicking a title in the results screen of the staff client opens two new tabs.
  • [24522] Nothing happens when trying to add nothing to a list in staff
  • [24617] Add title notes count in staff detail (following 24530)
  • [24697] Split items.uri on staff detail view
  • [24995] Add issuedate to table_account_fines and finest in Accounting tab
  • [25027] Result browser should not overload onclick event
  • [25053] PatronSelfRegistrationExpireTemporaryAccountsDelay system preference is unclear

System Administration

  • [4944] Create separate noItemTypeImages preferences for OPAC and staff client
    New system preference: OpacNoItemTypeImages defaults to disabled.
  • [5614] Add sections/headings to Patron system preferences tab
    This enhancement organizes the patron system preferences into sections.
  • [15668] Add column configuration to the items table in staff detail pages
  • [15686] Rename “item level holds” circ rule column to “OPAC item level holds”
  • [17016] Button to clear all fields in budget planning
    Sponsored by Catalyst
  • [20399] Remove “did you mean” for the staff interface
  • [20415] Remove UseKohaPlugins system preference
    UseKohaPlugins system preferences is removed.
    Koha plugins now only depends on config key enable_plugins.
  • [20484] Always show Elasticsearch configuration page when permission is set
  • [20648] “Display in check-out” renamed to “Display in patron’s brief information” on patron attributes configuration page
  • [21520] More complex OAI sets mappings
    Prior to this patchset, the rules used to create OAI sets are processed with the ‘or’
    boolean operator between each rule.
    This patch allows to use ‘or’ or ‘and’ between the rules.
    The evaluation of the rules is done according to the boolean operators
    precedence: AND has a higher precedence than OR.
  • [24193] Add CodeMirror linting of JavaScript, CSS, HTML, and YAML system preferences
    This enhancement adds CodeMirror plugins for linting system preferences that include JS, CSS, HTML, and YAML. When invalid data is entered in a linted CodeMirror editor an icon is displayed in the editor’s “gutter.” Hovering over the icon displays the error message.
  • [24291] Explanation next to limit item types by library is confusing
    This enhancement updates the explanation on the item type add and edit form for the ‘Library limitation’ field. The text now says “Select ‘All libraries’ if all libraries use this item type. Otherwise, select the specific libraries that use this item type.”
  • [24475] Reword FinesMode system preference
  • [24576] StoreLastBorrower preference is in the wrong tab and is confusing
  • [24844] Focus on the system preferences searchbar when going to admin home
    Sponsored by Catalyst


  • [10469] Display more when editing subfields in frameworks
  • [15352] Use URLLinkText instead of URL for item links
  • [16457] Remove the use of “onclick” from the patron entry form
  • [22468] Standardize on labeling ccode table columns as collection
  • [23268] “Suspend all holds” calendar allows to select past date
  • [23493] jquery.dataTables.rowGrouping.js is no longer maintained, but there is an official DataTables version we could switch to
  • [23533] Reindent patron entry form (memberentrygen.tt)
  • [23534] Use patron-title.inc on patron entry page
  • [23856] Split author and ISBN/ISSN out of citation in staged MARC record management
  • [23884] Merge strings.inc and browser-strings.inc
  • [23889] Improve style of menu header in advanced cataloging editor
    This enhancement updates the styling of dropdown menu headers to make them apply more consistently across the system.
  • [24181] Improve the display of our datepickers
  • [24341] Add support for more complex markup in OPAC confirmation dialogs
  • [25135] Improve clarity and navigation of columns settings administration
  • [25416] Add information about anonymous session for XSLT use
    Sponsored by Universidad ORT Uruguay

Test Suite

  • [22001] Add RaiseError and PrintError flags for all tests


  • [18127] Add ability to add batch modified records to an existing list
    Sponsored by Catalyst
    With this enhancement you can add all the records of a batch record modification to an existing list after successful modification.
  • [19793] Add email to batch patron modification
    Sponsored by PTFS Europe
    With this enhancement the primary email of patrons can be changed using the batch patron modification tool.
  • [21959] Add ability to apply regular expressions to text fields in the batch item modification tool
    Sponsored by City of Nîmes
    This adds a ‘RegEx’ link to the fields on the batch item modification form that allows you to rewrite the content of the fields using regular expressions. For example this could be used to add prefix or suffixes to callnumbers and barcodes or to rewrite item URLs.
  • [23473] Add option to import/overwrite passwords when using the patron import tool
    Sponsored by ByWater Solutions
    This adds a new checkbox to the patron import tool that will allow to overwrite patrons’ passwords with the password from the import file.
  • [24390] Add item total to rotating collections (addItems.tt)

Web services

  • [24384] Add Access-Control-Allow-Origin support to OPAC reports svc
    Using the foundations laid with bug 24369 this enhancement allows the CORS headers to be set on the OPAC Reports SVC routes.
  • [24537] Add support for IP ranges in ILS-DI:AuthorizedIPs using Net::Netmask
    It’s now possible to not only allow a single IP, but multiple IPs, IP ranges and subnets access to the ILS-DI API.

Z39.50 / SRU / OpenSearch Servers

  • [11297] Add support for custom PQF attributes for Z39.50 server searches
  • [21921] Add publication year to the Z39.50 search form for bibliographic records

This page does not include any of the critical bugs fixed in 20.05. A full complete PDF document of the entire release notes can be found here.

New System Preferences

  • AccessControlAllowOrigin
  • AllowItemsOnHoldCheckoutSIP
  • AllowPatronToControlAutorenewal
  • AuthFailureLog
  • AuthSuccessLog
  • CalculateFinesOnBackdate
  • CirculateILL
  • CollapseFieldsPatronAddForm
  • DumpSearchQueryTemplate
  • EnablePointOfSale
  • IllCheckAvailability
  • MaxTotalSuggestions
  • NumberOfSuggestionDays
  • OPACReportProblem
  • OPACnumSearchResultsDropdown
  • OpacBrowseSearch
  • OpacNoItemTypeImages
  • PatronSelfRegistrationConfirmEmail
  • PrefillGuaranteeField
  • RESTPublicAnonymousRequests
  • RenewAccruingItemInOpac
  • RenewAccruingItemWhenPaid
  • SCOAllowCheckin
  • TrapHoldsOnOrder
  • UseCirculationDesks
  • numSearchResultsDropdown

Thank You to our Library Partners for the Sponsorship of New Features!

Click here to find out more!

Read more by Kelly McElligott

Tags 20.05