Release v6.27.0 (2025-12-03)
Published 2025-12-03 12:26:12Z
Server
Important
This update includes performance improvements which require a few new data base indexes to be built and re-built. For bigger installations this update can take up to one hour to update the database.
This release forces a blocking re-index. Make sure to plan enough time for this update as your users will not be able to access the database while the re-index is running. [62ab4e497]
Overloading on-disk plugins with an
URLorZIPinstallation of the plugin is now possible (see below).
New
Standard rendering: Improved nested support. The new
format_innerfor nested fields can be used to define a concatenation rule for multiple nesteds. Also, nested fields now support theirformatsetting, just like other fields. With this, it is possible to render standard like this:Title: keyword1, keyword2, keyword3 [copyright]. Current standard configurations may need adjustments as the rendering changed leading to different default standard renderings with this patch. [f25d163bc]/api/system/location: Added
pathstylefor S3 locations. The default, if unset, is true. If set to false (recommended), the S3 is connected using virtual host style. In this mode, the bucket name is the first part of the domain used to connect. Path style is deprecated by Amazon S3. fylr previously always used path style. The connection library auto-detects if a server supports virtual host style and if path style is disabled the connection still uses it. Existing configurations will continue to use path style. If your server supports it, you can use the location manager to switch on virtual host style. [eb09956a1] [02af45e53]/api/collection: Add
_has_remote_objects. This flag was missing from easydb 5 implementations and is used to filter remote objects in collections. If you are using a lot of remote objects stored in collections (via easydb connector), a re-index is recommended. [9ba0d62f1]/api/objects: Support manually setting
Content-Typeheaders for XSLT style sheets. Added new field to the baseconfig to allow overwriting the default Content-Type header (text/xml) to match the file produced by the xslt. Also in this patch, use https://github.com/gabriel-vasile/mimetype" to auto-detect content-type over http response writer (replaces the stdlib which does this too, but not as good). [f730277ec]Base Config: Make logo splash screen configurable. [4d3c4cd1a]
/api/export/stop: Added support for this endpoint. Before, this was only a dummy, doing nothing. Also, set exports in status
processingat startup to statusfailed. [f5f6ab0d8] [d5bd8ae5b] [df93476a0]/api/export: Support to export non preferred files. The new flag
include_non_preferredallows to include non preferred files in the export. The XML exports no longer contain the non preferred files, unless the new flag is set. The XML now contain original filenames of the files exported. [285edee37]/api/search: Allow to search file field with more than one file. The index stores only the preferred file, but this change will add a counter to the file fields. With that, a search can be performed to find objects where multiple files exists in a given file field. Use
<file field>:countas search field. Requires a re-index. [62ab4e497]
Improvement
/api/objects: Support reference match in
/uuid/UUID/file/ID. If the url contains a file/ID part, we now match the ID not only as file.id but also in file.reference if part of a migration reference from easydb 5. The easydb 5 eas ID is part of the reference (prefixed by "eas:"). This makes easydb 5 deep links still work in migrated fylr instances. [64bccdf2b]Go Garbage Collector: Switch to
greenteagarbage collector. We haven't notice a difference to the other implementation of the GC, but since this will become the default in Go 1.26 we already switch. [150884d03]/api/db: New indexes speed up object saving for installations with many schema versions. [66dd8f068]
Startup: Output the number of CPUs which Go sees and uses. Notice that the number can change in containered environment, as Go is constantly checking the available CPUs. If the number is changed there is no further log entry. [63c06a633]
/api/db: New
skip_eventscan be used to not write events. This is helpful for migrations where the restore produced lots of unnecessary events. This also renamesskipConstraintsandskipBidirectionalUpdatetoskip_constraintsandskip_bidirectional_update, resp. fylr restore still supports versions < 6.27.0. [104de31b1] [1fc5cc2ab]License management: Support additional email Cc for the expires soon warning email. [27b6a8f93]
Base Config: New frontend language Tuvaluan
tvl-TV. This is currenlty a placeholder only. [3bcf94de3]Indexer refactor: The new indexer code is a lot faster than the old one and uses less memory, especially on maschines with many CPUs. The number of workers now spawns only one Go routine to send data to the indexer instead of Number of CPUs x Go routines (each with a memory consumption of 5MB). Removes
fylr.ymlconfig:fylr.debug.indexerSingleModeandfylr.elastic.maxHeapAlloc. Standard loading chunk size for objects is now 100 (currently hard-coded). Removes the global exclusive lock on "object_cache" which hinderedAUTO VACUUMfrom running. Also, we fixed a number of issues revealed by the Go race detector. [40cb9d8f3] [9053cc068]/inspect/exports: Added search field, offset & limit. [97c4aea28]
Reindex events: Make some pollable. Frontends can use the events to show the current state of the index status. Reliable events are
REINDEX_STARTandREINDEX_INDEX_PURGED(30 seconds after re-index is done, the old index is deleted). These two are pollable now (received through the/api/event/streamWebsocket and/api/event/poll). Not 100% reliable are eventsREINDEX_DONEandREINDEX_ERRORas these are only written if the server was not stopped and restarted during a reindex. Reliable but not pollable isREINDEX_QUEUEDwhich indicates the end of filling the index queue. [1033f11b9]POST /api/db: Faster injects. This adds some improved loading decisions for new object injections. E.g. if all objects are sent using the
_all_fieldsmask, we do not need to load the data of existing objects to merge with the delivered data as all data must exist in the payload when_all_fieldsis used. Another case for fylr restore was fixed where deeply nested standard rendering could slow down imports to a stall. This involved the rendering of a unique constraint error which tried to load standard for a better human readable error, but is unnecessary in the context ofskip_constraintsinjections, where the constraints are checked in form of setting a system tag but with no error message. Also the loading of existing objects was improved in a way that reverse objects are not loaded ifskip_reversewas used to inject the data. Also, speed up historic version loading with a new index. Fixobj_depview to use latest datamodel to mark relation type. Theobj_depview was not using the latest data model to determine if a relation to a linked object is using re quiring standard rendering or not. [f5e7e2b85] [f5e7e2b85] [24e2ed21f]Postgres driver: Use newer driver https://github.com/jackc/pgx/v5. The promise here is speed and the old driver github.co m/lib/pq is no longer actively developed (also sqlpro update for this). [f5e7e2b85]
Sqlite driver: Update sqlite driver from
v1.14.23tov1.14.32. [f5e7e2b85]/inspect/migration: Fixed & improved output of backup / restore status. he previous code was not taking into account that a command might have a re-used PID which then appeared more than once in "command_track" which led to wrong status outputs. This also improves the overview table of the migrations. [18023248f]
Hotfolder, /api/eas?collection=ID: Collection upload (hotfolder or eas) will use tags set in the create collection setting and set hidden tags or , if no tags are defined in create collection, set all default tags. Also, linked objects which are created will always use all default tags regardless of the setting for the main object. [f047a342c]
/api/db: Set default tags. If no tags are sent in
_tags(_tags:nullor not sent), the default tags are set. If tags are sent, only default tags with displaytype "hidden" are set. [f047a342c] [0454a7213]Page rendering: This patch loads additional localization as configured in the base config from the Google sheets. Make sure to use this only during development as it is quite an expensive request. This is used for all pages generated by the server, like Login. [5fe4454c2]
/api/export: When exporting a ZIP, rather than writing a faulty ZIP, include an error file in the ZIP in case of an error during an export. [45ffd6d6a9]
/api/db: Faster loading of children by caching some regexp for filename replacements, also an index was added. [40bf4b12a] [eaaa0e7bf]
/api/plugin/manage: Support to delete auto-added on-disk plugins. This was blocked before, making it impossible to update on-disk plugins using
URLorZIPinstallations. With this, an on-disk plugin can be manually deleted. Once it is deleted, it can be replaced by an url or zip version of the plugin. At startup, on-disk plugins are not installed if they exists with the same name asURLorZIPtype. [a0bc5e690]/inspect/files: An extended filter allows to filter by status message. Also, output a link to remote URLs. [67054ee1f] [7d5a0e2d6]
DatabaseLockError: This new api error (Postgres only) is thrown if the database wasn't able to acquire a lock. Also, we set the timeout for this to a global 1 minute per transaction. This affects
/api/db?collection=ID,/api/eas?collection=IDand pretty much all/api/collection/*calls. Also, use a weaker lock to enable hotfolder plugins to create sub collections while run in a parent collection. [3e597b225] [116d34cc6]File delivery: If writing of metadata fails, we now deliver the file as is, with its original metadata. In some cases the underlying Exiftool fails to write metadata into a file (some MP4 get an error Can't yet handle movie fragments when writing). If that happens now, fylr writes a
FILE_DOWNLOAD_ERRORevent and send the file with its original metadata. [995694000]/inspect/objects: On the detail page, add a link to show the object in the frontend. Frontend now opens always in the same browser window. [9e4ead57b]
Fixed
fylr convert: When using
vips, we now use a parameterunlimitedto avoid an error failed to allocate memory which was seen on some instances. [c97084109]/api/search/parse: Fixed alias for linked objects when value null is matched. [9a721beaa]
Hotfolder & /api/eas: Use series base name & owner fixes. The patch uses the series base name (if
recognize_seriesis enabled) to match the update field content against. Before we only used the filename with and without extension to find existing objects. If a metadata mapping needs to create linked objects, this would fail if the mask wasn't allowed to edit owner. Now, the behaviour is the same as it is in regular editor sessions,rootis becoming the owner if the mask has a hidden owner field (off). The same rules are now applied for creation of the top level object. Also, do not set fields if they are uneditable per mask used for the mapping. [c8790ae4e]/api/export: Fixed mixed CSV & XLSX export of
_pathof hierarchic objects. [4338fbf54]/api/db: Fixed bidirectional linking with multiple backlinks. Posting multiple objects with a link to a common object with bidirectional linking turned on would result in only the last object being linked to the other object instead of all posted objects. In some cases, sending such payloads could also result in a stack overflow and fylr crash. Fixed by improving the "equals" method for objects. This also includes a new linked object marshalling where we notice a recursion. Such linked objects will show up as
{"_recursion_to_object": "<object in string notation>"}. [49e14fcee]/api/messages: Fixed server generation of messages. This patch adds the previously missing checks for from and to validation for server messages. Before, fylr would output the messages regardless also outside the valid timeframe. [b607f588c]
/api/export: Fixed localized column names in
XSLXexports. [6f3870a6e]
Frontend
New
Duplicate Dialog References: A new feature has been added to the Duplicate Dialog that shows exactly which objects contain the duplicated asset.
Years-Only Mode for Date Columns: A new mode has been added for date columns so they only accept and display years. This option is enabled in the schema editor. Important note: This functionality is frontend only; there are no backend changes. Therefore, if full dates are imported from other systems, the data will be stored with the full date, although the frontend will display only the year.
Variants Download: A new feature has been added to exports and the download manager that allows variants to be included in the download.
Delete On-Disk Plugins: It is now possible to delete fylr “on disk” plugins — that is, plugins added by default to the system. This allows users to install new versions of these plugins via URL or ZIP.
Has Variants Search Modifier: A new search filter has been introduced in expert search for EAS columns: “Has Variants”. This filter allows users to search for fields with more than one file — i.e., fields that contain variants. The new filter appears alongside the existing “Has Value” and “With Value” filters.
Query Language Support: Experimental support for query language has been added. This feature allows users to use fylr’s query language to perform searches. To use it, the token
ql:must be added to the search input; text after the token will be interpreted as query language. Users must currently use internal names of objecttypes and fields. Examples:my_objecttype.name == "foo"my_objecttype.number_field > 100my_objecttype.my_field != nullQuery-language elements in the input search can be combined with expert-search query elements.
Nested Tables Standard: New options have been added to customize the standard of nested tables. Users can now choose how standards inside a nested field are grouped. The new “standard” button in nested tables only activates when an internal field has a standard, making it easy to identify fields with active standards in the mask editor.
Improved
Hide / Customize Splash Screen: Users can now hide the splash screen or use the instance’s custom logo.
Quick View: The quick-view popover now includes a button in the header to open the object in a new tab.
Editor: When a new editor opens, focus is automatically placed on the first editable field.
Store Collection Search: Saved searches now support collection query elements.
Filter Panel: Improved logic to determine which fields should appear in the filter panel. Previously, fields with visibility configured using a Tag in the objecttype never appeared. They now display correctly.
Table with Pool Filter: Improved table view construction when filtering with Pools. Previously, if no root element of the hierarchy belonged to the pool, nothing was displayed. Now, the table view shows the hierarchy and loads the necessary elements to build it. Elements outside the search are shown in grey.
Metadata Module in Background Tasks: The metadata module now allows selecting any valid objecttype as a source, not only the search objecttypes.
Location Manager: New options have been added for S3 Locations, along with a new table column showing which locations are configured as default.
Unknown Custom Mask Splitter: Improved handling of unknown mask splitters (e.g., when the plugin implementing them is not installed). Instead of showing an error and failing to load the detail/editor, the splitter is replaced with an “unknown” type showing an error message. If it is a group splitter, internal fields are shown inside an “unknown” panel with an error message, but remain visible.
Export Sorting: Exports created from the main search now retain the configured sorting. This means CSV or XML exports will follow the same order as the search results.
Caption Configuration: An EAS field can now only be added once to the EAS-fields table in the caption configuration.
Fixed
Geo-JSON Search: Search filters for geo-json columns have been corrected; different area filters can now be combined.
Export Manager: Fixed persistence of the “Customize Masks” setting, which was not saved correctly in some cases.
CSV Importer: Fixed field-cleaning functionality when updating objects with CSV files containing empty cells. This now works properly for Date columns.
Shared Collection: Fixed an issue when identifying collections as shared or private.
Default Tags: Fixed the assignment of default tags in linked objects created via metadata mapping.
TagFormManager: Fixed an issue that caused tags without labels to appear when a translation was missing.
Video Player: Fixed a bug preventing the video player from working in the Variant Editor, which also caused the video to play outside the DOM and forced users to refresh the page.
Child Numbering: The child-numbering selector is now disabled when the object does not have reverse-edit enabled.
Background Tasks: Fixed the “Create background task” button when no object is selected in the search; previously, it created a task with 0 objects.
Mask Splitter: Corrected the position of the “Customize” button for mask splitters in the mask editor panel.
Export Stop Button: Restored and fixed the functionality to stop an export.
Captions: Fixed support for nested EAS fields in the caption configuration.
Table View: Fixed a rare error that could appear when multiple users were working on the same instance.
Shared Collection Pagination: Fixed pagination issues in shared collections. Also fixed incomplete hierarchy rendering in instances with many shared collections.
Object Path: Fixed path rendering when creating direct subordinate entries.
AssetDetail Plugins: Fixed the check for the
startAutomaticallymethod in assetDetail plugins, which fylr was ignoring, causing plugins not to start automatically in the asset browser.Collections: Fixed a bug when moving objects between collections while using the filter input in the quick-access menu.
Last updated