Omeka S 4.2.0
18 December 2025
Omeka S version 4.2.0 is now available (major release).
Upgrading to Omeka S 4.2.0
Omeka S 4.2.0 can be upgraded to (or installed) using any of Installatron's products. Use Installatron's optional Automatic Update feature to automatically apply Omeka S updates as new versions are released, or use Installatron's Clone feature to duplicate an existing Omeka S install to test the 4.2.0 upgrade prior to applying it live. Get started managing your Omeka S installations with Installatron
What's New in Omeka S 4.2.0
Compatibility
- The new minimum required version of PHP is 8.1
- PHP 8.4 is now officially supported
Bugs Fixed
- New version notifications were not being shown correctly for the core
- The confirmation message warning users that they made changes which would be lost if not saved could trigger improperly on the site navigation admin page when no changes were actually made
- An error that could arise when viewing the system information page with no subfolders yet under the "files" folder (#2196, fix contributed by Andreas Warnaar)
- Custom thumbnails for primary media were not used when getting the thumbnail for a parent resource
- The media show page could show an Edit button even if the current user did not have permission to edit the media
- An error happened preventing the proper response when performing a REST DELETE operation when @reverse was enabled in the API
- Event listening did not work properly for some forms
- Public "front page" cross-site advanced searches were broken
- Users with the editor role couldn't select media for a resource value
- An empty <link> element was improperly rendered when a custom favicon was not selected
- Files were not deleted properly when assets were deleted
- Users with a multibyte character at the beginning of their name resulted in a garbled section in the user selection sidebar (#2359, fix contributed by @rish314)
Improvements
- Many accessibility improvements and changes to labeling, color contrast, click target sizes, and more (includes contributions from @rish314 and @Trott)
- Item stubs: create simple new items when editing another item without leaving the page
- Improved the efficiency and speed of many pages and operations by avoiding unnecessary extra queries
- New batch edit feature for converting values between different data types
- Dropdowns and sidebar selectors now sort their values according to the translated labels when a non-default locale is active
- oEmbed blocks now allow updating the oEmbed URL
- oEmbed endpoints now also register the actual oEmbed URL for each site, allowing oEmbed to work even when the passed page doesn't include the oEmbed discovery link
- Updated the list of pre-configured oEmbed endpoints
- The single "default to private" setting for resources is now divided into separate settings for default visibility of items, sets, sites, and pages
- New IIIF image and IIIF presentation page blocks for including IIIF media without adding it to an item
- Site-level configuration options have been added for the bundled Mirador IIIF viewer
- PDF thumbnails will use the "CropBox" by default, fixing some files that would include large blank areas in their generated thumbnails (this is controlled by the new pdfUseCropBox thumbnailer option)
- Garbage collection of sessions is turned on by default even for servers that otherwise disable it (setting ['session']['allow_no_gc'] to true in local config can keep GC disabled if desired)
- Filtering in sidebar selectors no longer closes the selector subsections
- New batch chunk size setting for controlling how many resources will be operated on in a single chunk during a batch update or delete
- New page layout setting for setting a body class for the page (#2250, contributed by @Daniel-KM)
- New "has/does not have data type" advanced search options for values
- Filtering for "used" vocabulary members like properties and classes is correctly calculated for usage in item sets when viewing the item set search page
- Added IDs for styling/targeting advanced search fields
- Added additional details and linking in "details" sidebars of admin resources (#2346, contributed by @Daniel-KM)
- Logger config now allows setting the log path to streams or files that don't yet exist
- Job logging now catches PHP throwable errors instead of just exceptions, improving error reporting and detection
Changes
- The admin site browse now only shows sites that the current user has some role in by default
- The default admin sort is now by ID instead of date; for most sites and usages these are the same, but ID is more efficient
- An empty <dl> element is no longer rendered when a resource has no values
- Rendered values on a page now include a class to indicate their data type
- Images Omeka can make thumbnails of but that browsers can't natively display (e.g. TIFF, JPEG2000) are now supported in the lightbox gallery by displaying their "large" thumbnail
- The "linked resources" display for resources now loads and updates its contents asynchronously instead of reloading the whole page when paginating or filtering the linked resources
- REST API usage in the admin interface now uses the api-local endpoint, delivering correct and complete results according to the current user's permissions (#2276, contributed by @Daniel-KM)
For Developers
- Modules can now provide page templates and block templates (#2200, contributed by @Daniel-KM)
- Themes can now provide resource page block layouts
- The attachments form helper for page blocks now accepts a maxAttachments parameter to limit the number of allowed attachments
- The "debug" locale sometimes used to check that strings are translatable previously could cause an issue with PHP's intl and formatting dates; this is now fixed
- displayValues() for resource representations now accepts new options properties and excludeProperties to limit which properties to show values for
- Themes can now override the js/lg-itemfiles-config.js static asset to change lightGallery configuration
- API requests can pass the option 'countQuery' => false to skip running a second query to count the total results, and the count will also be skipped if the query gets all results with no pagination or limitation; the returned total count for these will just be the count of the results array
- New PSR-3-style Omeka\Stdlib\PsrMessage class, like Omeka\Stdlib\Message but using PSR-3 interpolation on the message instead of sprintf
- PSR-3 logger: Omeka\PsrLogger service, psrLogger() controller plugin, interpolation support in log messages
- New Omeka\Db\QueryBuilder extending Doctrine's DQL query builder for better handling of the counter used when minting unique names for named parameters and table aliases. createNamedParameter and createAlias methods that were previously on the API adapter classes are directly on this builder class. The old-style adapter ones can still be used, but the new builder is preferred
- Doctrine's query and metadata caches are now kept as separate structures
- getIdentityMap and detachAllNewEntities are now public, available methods on API adapter classes, useful for detaching entities from Doctrine's EntityManager during batch processes
- Trying to get the URL for a resource that doesn't define its controller now returns null instead of throwing an error
- New events setting.update, setting.insert, setting.delete
- The user.logout event now is passed the User entity that logged out
- The rep.resource.display_values event now has access to the options passed to displayValues