What directus/directus shipped
Written by FoxPlug from public releases; not affiliated with Directus. An automatic summary of the public release, pull request and commit data of github.com/directus/directus. Directus did not write it and does not use or endorse FoxPlug. Every line links to the public change it describes.
Get a weekly update like this for your product, free
Week of September 21, 2026
What shipped
- Version 12.4.0 released with MapLibre GL JS updated from 1.15.3 to 6.9.0, now requiring WebGL2 support. Release
- Flows moved to its own top-level module with folder organization support and a new type column to distinguish flow folders from file folders. Pull request #28206
- Added
preview_base_urlsetting to allow configuring a base URL for collection previews via a new $preview_base_urlvariable. Pull request #28227 - Images in the WYSIWYG editor can now carry links with href, target, and rel attributes stored on the image node. Pull request #28289
- Richtext extension type ported to integration branch with authors importing Tiptap directly instead of through SDK re-exports. Pull request #28261
- License boot no longer holds store locks during startup, with a new generic runExclusive utility to manage exclusive function execution. Pull request #28215
- Fixed Oracle year() function to return calendar year using YYYY format mask instead of ISO week-numbering year. Pull request #28257
- Fixed Oracle JSON comparison to return unquoted strings by prioritizing JSON_VALUE over JSON_QUERY. Pull request #28264
- Fixed folders endpoint crash when non-admin users attempted to read, which was writing to a frozen object. Pull request #28286
- Updated vitest to v4.1.11 and related packages, addressing security advisory GHSA-82fw-gwwq-j7x9. Pull request #28249
Why it matters
Version 12.4.0 introduces significant structural improvements with Flows as a top-level module and enhanced preview capabilities, while also addressing database compatibility issues with Oracle and improving startup performance. Multiple quality-of-life features for content editors and extension developers ship this week.
Changelog entry
- ⚠️ BREAKING: MapLibre GL JS upgraded to 6.9.0, now requires WebGL2 (Safari 14 and older Android devices not supported) Release
- Flows module moved to top-level navigation with folder organization and type classification for flow vs file folders Pull request #28206
- Added
preview_base_urlsetting and $preview_base_urlvariable for preview URL configuration Pull request #28227 - Images in WYSIWYG editor now support links with href, target, and rel attributes Pull request #28289
- Richtext extension type added with direct Tiptap import pattern for extension authors Pull request #28261
- License boot no longer holds store locks during startup with new runExclusive utility Pull request #28215
- Fixed Oracle year() function to return calendar year instead of ISO week-numbering year Pull request #28257
- Fixed Oracle JSON comparison to return unquoted scalar strings Pull request #28264
- Fixed folders endpoint crash for non-admin users Pull request #28286
- Updated vitest to v4.1.11, addressing security advisory GHSA-82fw-gwwq-j7x9 Pull request #28249
Directus 12.4.0 is out. Flows get their own module, images in WYSIWYG can now link, preview URLs are configurable, and startup is faster. MapLibre GL JS upgraded to v6.9.0 (WebGL2 required).
Directus 12.4.0 is available. This release reorganizes Flows into a dedicated top-level module with folder support, adds configurable preview base URLs, enables linking in WYSIWYG image blocks, and improves startup performance by eliminating lock contention during boot. We also upgraded MapLibre GL JS to v6.9.0, which requires WebGL2 support. Oracle users benefit from fixes to year() and JSON comparison functions.
Week of September 14, 2026
What shipped
- Flows moved out of Settings into a dedicated module with its own navigation bar and folder browsing support. Pull request #28221
- Blackbox tests fully migrated to E2E test suite with new utils for sandbox ports, collaborative editing, and websockets testing. Pull request #28226
- Disabled collections now stay in schema while blocking CRUD operations, with new CollectionInactiveError for proper error handling. Pull request #27792
- MinIO replaced with RustFS in e2e sandbox and blackbox stacks to resolve Docker Hub registry issues. Pull request #28234
- maplibre-gl updated from 1.15.3 to 6.9.0 with type renames and mechanical updates across five major versions. Pull request #28216
- Relational fields now export in the requested order instead of always appearing last. Pull request #28197
- Block editor no longer flickers while editing a version by removing unwanted _user and _date markers from delta objects. Pull request #28105
- Duplicate update entries no longer lose translation edits when useRelationMultiple.update() is called twice for the same row. Pull request #28247
- Concurrent local KV increments and maximum updates fixed by reading synchronously before writes. Pull request #28194
- stream-json bumped from 1.9.1 to 3.6.0 to resolve GHSA-528h-pc64-c93x security advisory. Pull request #28251
Why it matters
This week focused on infrastructure improvements and bug fixes. The test suite migration to E2E provides better testing coverage, while the Flows module reorganization improves user navigation. Several critical fixes address data integrity issues in relational fields, block editors, and concurrent operations.
Changelog entry
- Flows moved from Settings to dedicated module at /flows with folder navigation and module bar entry Pull request #28221
- Blackbox tests fully migrated to E2E suite with utils for sandbox ports, collaborative editing, and websockets Pull request #28226
- Disabled collections retained in schema with new CollectionInactiveError (403) for CRUD blocking Pull request #27792
- MinIO replaced with RustFS (1.0.0-rc.6) in e2e sandbox and blackbox stacks Pull request #28234
- maplibre-gl updated from 1.15.3 to 6.9.0 Pull request #28216
- Relational fields now export in requested order instead of always appearing last Pull request #28197
- Block editor no longer flickers when saving versions Pull request #28105
- useRelationMultiple.update() now replaces existing entries instead of duplicating for same primary key Pull request #28247
- Concurrent local KV increments and setMax() fixed with synchronous read-before-write Pull request #28194
- Row context menus no longer stay open when another row's menu is opened Pull request #28191
- /schema/apply no longer drops collections when first diff entry is nested meta delete Pull request #27880
- Foreign key constraints no longer dropped when updating relations with partial payloads Pull request #28137
- Flows list columns improved with better sizing and Folder column repositioned before Status Pull request #28225
- @unhead/vue updated to 3.4.1 resolving GHSA-g5xx-pwrp-g3fv and GHSA-95h2-gj7x-gx9w Pull request #28248
- stream-json bumped to 3.6.0 resolving GHSA-528h-pc64-c93x Pull request #28251
- joi updated to 18.2.9 and express updated resolving multiple low-severity advisories Pull request #28242
This week: Flows gets its own module, blackbox tests migrate to E2E, disabled collections handled properly, relational export ordering fixed, and maplibre-gl updated to v6.
This week's updates bring significant improvements to Directus. Flows is now a dedicated module with full folder support. The test infrastructure fully migrated to E2E, providing better coverage. Critical fixes ensure relational fields export in correct order, block editors render smoothly, and concurrent KV operations work reliably. Infrastructure updates replace MinIO with RustFS and modernize maplibre-gl to v6.