Fixed metric list labels to no longer be cut off by bar value labels (#26527 by @Prasad7007)
@directus/api
Fixed asset transformation error when using withoutEnlargement with focal point and dimensions larger than the original image. Target dimensions are now clamped to the original image dimensions. (#26608 by @wotan-allfather)
Preserved SQL parameterization in relational count subquery and used content-disposition library for folder zip download header (#26592 by @dstockton)
@directus/extensions-sdk
Fixed linking scoped extensions created nested folders (#25957 by @Nitwel)
Attached prompts, content items, and visual editor elements to AI Assistant Context (#26512 by @bryantgillespie)
To use this feature, update @directus/visual-editing to v1.2.0+ on your website.
Disabled interfaces are not interactive anymore, which includes opening disabled read-only fields in a drawer (#26470 by @formfcw)
β¨ New Features & Improvements
@directus/app
Added deployment module for triggering deployments from Directus with Vercel as first supported provider (#26473 by @gaetansenn)
Attached prompts, content items, and visual editor elements to AI Assistant Context (#26512 by @bryantgillespie)
Added multi-provider AI support with Google and OpenAI-compatible providers. Extracted shared AI types into new @directus/ai package. (#26481 by @bryantgillespie)
Added toggle to allow comparing revision to previous revision (#26480 by @robluton)
Added relational field support on x-axis of bar chart (#26489 by @JamesW1)
Added visual editing support to the live preview split pane, including display options menu, full-width mode with drag-to-expand, and quick access to the Visual Editor module. (#26463 by @bryantgillespie)
Changed permission-blocked fields from disabled to non-editable appearance (#26572 by @HZooly)
@directus/api
Added deployment module for triggering deployments from Directus with Vercel as first supported provider (#26473 by @gaetansenn)
Attached prompts, content items, and visual editor elements to AI Assistant Context (#26512 by @bryantgillespie)
Added multi-provider AI support with Google and OpenAI-compatible providers. Extracted shared AI types into new @directus/ai package. (#26481 by @bryantgillespie)
@directus/sdk
Fixed race condition and allow accessing the connected state (#26511 by @Nitwel)
Added deployment module for triggering deployments from Directus with Vercel as first supported provider (#26473 by @gaetansenn)
@directus/system-data
Added deployment module for triggering deployments from Directus with Vercel as first supported provider (#26473 by @gaetansenn)
@directus/types
Added deployment module for triggering deployments from Directus with Vercel as first supported provider (#26473 by @gaetansenn)
Added multi-provider AI support with Google and OpenAI-compatible providers. Extracted shared AI types into new @directus/ai package. (#26481 by @bryantgillespie)
@directus/errors
Added deployment module for triggering deployments from Directus with Vercel as first supported provider (#26473 by @gaetansenn)
@directus/env
Added deployment module for triggering deployments from Directus with Vercel as first supported provider (#26473 by @gaetansenn)
Attached prompts, content items, and visual editor elements to AI Assistant Context (#26512 by @bryantgillespie)
Added multi-provider AI support with Google and OpenAI-compatible providers. Extracted shared AI types into new @directus/ai package. (#26481 by @bryantgillespie)
Added multi-provider AI support with Google and OpenAI-compatible providers. Extracted shared AI types into new @directus/ai package. (#26481 by @bryantgillespie)
Changed users.last_access display mode to absolute (#26548 by @JamesW1)
Added multi-domain support for OAuth/OpenID (#26312)
SSO callback URL generation and redirect validation now includes port matching to ensure redirects target the correct server.
Fixed getAsset returning all file fields instead of only those allowed by the users permissions (#25905) getAsset / GET /assets/:id now respects directus_files permissions when returning file based fields.
@directus/app
Removed the deprecated /webhooks functionality across the stack. This includes the API route and its related tests, (#26311 by @mobml)
controller, and mocks, as well as the corresponding SDK commands and schema types, types and services, system fields and
collections, OpenAPI specifications, and App UI routes and components. This endpoint has been unused for over a year and
has now been fully removed.
Removed the deprecated /webhooks functionality across the stack. This includes the API route and its related tests, (#26311 by @mobml)
controller, and mocks, as well as the corresponding SDK commands and schema types, types and services, system fields and
collections, OpenAPI specifications, and App UI routes and components. This endpoint has been unused for over a year and
has now been fully removed.
Fixed getAsset returning all file fields instead of only those allowed by the users permissions (#25905 by @gaetansenn)
Added a new AI_ENABLED environment variable to allow opting out of our AI chat feature (#26458 by @bryantgillespie)
@directus/system-data
Removed the deprecated /webhooks functionality across the stack. This includes the API route and its related tests, (#26311 by @mobml)
controller, and mocks, as well as the corresponding SDK commands and schema types, types and services, system fields and
collections, OpenAPI specifications, and App UI routes and components. This endpoint has been unused for over a year and
has now been fully removed.
@directus/specs
Removed the deprecated /webhooks functionality across the stack. This includes the API route and its related tests, (#26311 by @mobml)
controller, and mocks, as well as the corresponding SDK commands and schema types, types and services, system fields and
collections, OpenAPI specifications, and App UI routes and components. This endpoint has been unused for over a year and
has now been fully removed.
@directus/types
Removed the deprecated /webhooks functionality across the stack. This includes the API route and its related tests, (#26311 by @mobml)
controller, and mocks, as well as the corresponding SDK commands and schema types, types and services, system fields and
collections, OpenAPI specifications, and App UI routes and components. This endpoint has been unused for over a year and
has now been fully removed.
@directus/sdk
Removed the deprecated /webhooks functionality across the stack. This includes the API route and its related tests, (#26311 by @mobml)
controller, and mocks, as well as the corresponding SDK commands and schema types, types and services, system fields and
collections, OpenAPI specifications, and App UI routes and components. This endpoint has been unused for over a year and
has now been fully removed.
β¨ New Features & Improvements
@directus/app
Added a new AI_ENABLED environment variable to allow opting out of our AI chat feature (#26458 by @bryantgillespie)
Added concurrency control for file uploads via a new FILES_MAX_UPLOAD_CONCURRENCY env variable (#26424 by @thomas-svrts)
Added nested validation rules to validation error notice (#26389 by @robluton)
Added Comparison modal wysiwyg diff highlighting (#26301 by @robluton)
Fixed an issue that would cause some drawer header icons from being displayed too large (#26442 by @kekekuli)
@directus/api
Added concurrency control for file uploads via a new FILES_MAX_UPLOAD_CONCURRENCY env variable (#26424 by @thomas-svrts)
Added support for downloading multiple files and entire folder trees (#26006 by @Nitwel)
Moved fetchRolesTree,fetchGlobalAccess, fetchGlobalAccessForUser and fetchGlobalAccessForRoles to the public utility package (#26248 by @ComfortablyCoding)
@directus/sdk
Added support for downloading multiple files and entire folder trees (#26006 by @Nitwel)
Moved fetchRolesTree,fetchGlobalAccess, fetchGlobalAccessForUser and fetchGlobalAccessForRoles to the public utility package (#26248 by @ComfortablyCoding)
Updated synchronization of remotely stored extensions (#26192 by @br41nslug)
Fixed missing accountability for files.upload when TUS is enabled (#26247 by @br41nslug)
@directus/types
Moved fetchRolesTree,fetchGlobalAccess, fetchGlobalAccessForUser and fetchGlobalAccessForRoles to the public utility package (#26248 by @ComfortablyCoding)
Updated synchronization of remotely stored extensions (#26192 by @br41nslug)
@directus/storage-driver-cloudinary
Updated synchronization of remotely stored extensions (#26192 by @br41nslug)
@directus/storage-driver-supabase
Updated synchronization of remotely stored extensions (#26192 by @br41nslug)
@directus/extensions-sdk
Updated esbuild dependency from 0.25.12 to 0.26.0 (#26215 by @dependabot)
@directus/system-data
Updated esbuild dependency from 0.25.12 to 0.26.0 (#26215 by @dependabot)
@directus/sdk
Updated esbuild dependency from 0.25.12 to 0.26.0 (#26215 by @dependabot)
Removed non-relational types from RELATIONAL_TYPES constant (#25964)
Extensions or external code using RELATIONAL_TYPES should note the excluded presentation and group.
Fixed <scope>.delete filter hook running after permission check. Fixed keys returned by the hook not being used in place of the original keys. (#26034)
Keys returned by the hook are now used in place of the original keys.
The hook will trigger regardless of user permissions. Ensure any necessary permission checks are performed prior to any data processing.
@directus/api
Fixed <scope>.delete filter hook running after permission check. Fixed keys returned by the hook not being used in place of the original keys. (#26034 by @ComfortablyCoding)
Restricted system collection fields to only allow indexing (#24820 by @br41nslug)
@directus/constants
Removed non-relational types from RELATIONAL_TYPES constant (#25964 by @formfcw)
@directus/extensions-sdk
Use node exportConditions when building api extensions. See #25591 (#25591 by @julbd)
β¨ New Features & Improvements
@directus/app
Introduced the Content Comparison Modal for side-by-side review of version and revision changes. (#25782 by @robluton)
Added interface config option to control indicator appearance (#26086 by @formfcw)
Added schema snapshot download button to the admin view of the studio (#25903 by @Nitwel)
Added setup flow and license agreement banner (#25983 by @Nitwel)
Added comparison indicators for group interfaces (#26086 by @formfcw)
Fixed USER_CREATED, USER_UPDATED, DATE_CREATED, and DATE_UPDATED values in content versioning. These fields now correctly reflect the actual user and timestamp of creation or last update, rather than the user and date of promotion. (#25744)
Requesting a non-existent version will now return a Forbidden error.
The USER_CREATED, USER_UPDATED, DATE_CREATED, and DATE_UPDATED fields will now represent the last actual changes, not the promotion metadata.
@directus/app
Fixed USER_CREATED, USER_UPDATED, DATE_CREATED, and DATE_UPDATED values in content versioning. These fields now correctly reflect the actual user and timestamp of creation or last update, rather than the user and date of promotion. (#25744 by @Nitwel)
@directus/api
Fixed USER_CREATED, USER_UPDATED, DATE_CREATED, and DATE_UPDATED values in content versioning. These fields now correctly reflect the actual user and timestamp of creation or last update, rather than the user and date of promotion. (#25744 by @Nitwel)
Fixed USER_CREATED, USER_UPDATED, DATE_CREATED, and DATE_UPDATED values in content versioning. These fields now correctly reflect the actual user and timestamp of creation or last update, rather than the user and date of promotion. (#25744 by @Nitwel)
Added cache-busting to image asset URLs in the studio to ensure updated images are always loaded (#25833 by @formfcw)
Fixed Content Versioning to correctly merge relational data and support all query parameter functionality (#25437)
The following changes should be kept in mind when updating:
Relational versioned data now requires explicit field expansion to be included in the response.
Invalid data (e.g. Fails validation rules) will error on query
Filter conditions now apply to the versioned data instead of the main record
For more information, please read the breaking change docs for a full list of changes.
Additionally there will be further breaking changes to USER_CREATED, USER_UPDATED, DATE_CREATED, DATE_UPDATED default values in a followup PR to improve this behavior further.
Check in with #25744 to see more info about the breaking changes.
β¨ New Features & Improvements
@directus/api
Fixed Content Versioning to correctly merge relational data and support all query parameter functionality (#25437 by @Nitwel)
@directus/app
Fixed links in WYSIWYG missing underline and pointer cursor styling (#25739 by @Abdallah-Awwad)
Added a new field to conditions for clearing hidden fields on save (#25646 by @robluton)
π Bug Fixes & Optimizations
@directus/app
Fixed timestamp fields being incorrectly marked as changed due to timezone mismatch (#25718 by @khanahmad4527)
Fixed code button state not updating when exiting code mode in WYSIWYG (#25741 by @Abdallah-Awwad)
Added currentItem id check to prevent in-flight api call from returning stale data (#25660 by @robluton)
Added TypeScript support for services within the extension context (#25368)
The services exposed to API extensions using TypeScript are now fully typed instead of any, which may cause new type errors when building extensions.
Arguments of service methods are now strictly typed, which can result in type errors for broader types that would not error before:
The ItemsService constructor now expects the collection name to be a string and will error on string | undefined (or other unions).
Similarly, functions like service.readOne()/service.readMany() now expect string | number for their primary keys and will error for nullable types
As a workaround, casting the services back to any will result in the original behavior. However, it is recommended to resolve the type errors instead.
@directus/extensions-sdk
Added TypeScript support for services within the extension context (#25368 by @that1matt)
Exclude database-only tables from snapshots (#25271)
Snapshots now exclude tables not tracked in directus_collections (database-only tables).
Source Version
Target Version
Behavior
Impact
< 11.10.0
β₯ 11.10.0
Database-only tables from source will be created on target
β οΈ Tables added
β₯ 11.10.0
< 11.10.0
Database-only tables will be dropped from target
π¨ Data loss risk
β₯ 11.10.0
β₯ 11.10.0
Database-only tables are ignored in snapshots
β No changes
< 11.10.0
< 11.10.0
Database-only tables may be created or dropped
β οΈ Depends on the diff between source/target
Please review your snapshot workflows to ensure these changes will not result in unexpected behaviour.
@directus/api
Fixed replacing process.env.NODE_ENV on backend extensions (#25180 by @Nitwel)
Exclude database-only tables from snapshots (#25271 by @Nitwel)
@directus/extensions-sdk
Upgraded all dependencies of @directus/extensions-sdk to the latest major versions of Rollup and Vite, and resolved several false-positive security reports. (#25486 by @rijkvanzanten) β οΈ This change also raises the minimum supported Node.js version to 20.19.0.
Fixed replacing process.env.NODE_ENV on backend extensions (#25180 by @Nitwel)
Added support for LDAP login and enhanced parameter consistency for refresh/logout commands. Allowed overriding the mode in refresh and logout commands to be inline with login (#25132)
The login method now accepts a payload object instead of separate email and password parameters.
This enables support for both standard and LDAP authentication, but requires updates to code that previously called sdk.login(email, password).
The new usage is sdk.login({ email, password }) or sdk.login({ identifier, password }) for LDAP.
The refresh and logout command method parameters have been updated to be consistent across usage. The functions now accept an options object instead of their previous regular parameters.
For example the new usage for refresh is sdk.request(refresh({ mode: "json", refresh_token })) instead of sdk.request(refresh('json', refresh_token)).
@directus/api
Fixed manual flows to only trigger with appropriate permissions (#25354 by @br41nslug)
@directus/sdk
Added support for LDAP login and enhanced parameter consistency for refresh/logout commands. Allowed overriding the mode in refresh and logout commands to be inline with login (#25132 by @ComfortablyCoding)
inside an extension's detail page in the marketplace, the back state is not valid if it's a nullish value and it should (#24703 by @CiaccoDavide)
redirect to the extensions list
@directus/api
Fixed invalid item_duplication_fields paths existing after a field in the path is deleted (#24654 by @ComfortablyCoding)
Fixed filter_count returning incorrect values for relational filters (#24718 by @ComfortablyCoding)
@directus/system-data
Fixed invalid item_duplication_fields paths existing after a field in the path is deleted (#24654 by @ComfortablyCoding)
π Documentation
Updated incorrect UsersService example in the docs (#24726 by @br41nslug)
Ensured that the Kanban layout only resets the group title when the group field changes within the same collection (#24567 by @formfcw)
Ensured that the βShow Ungroupedβ option is disabled and that the βNo Groupβ column doesnβt appear in Kanban layouts if (#24563 by @formfcw)
the group field is not nullable
Ensured that Kanban layout groups can be reordered without admin rights when selecting a non-relational group_by field (#24537 by @formfcw)
by saving updates in the layout presets.
Improved custom translation experience by prefilling existing values (#24535 by @hanneskuettner)
Ensured that the Kanban layout refreshes after deleting a group column (#24565 by @formfcw)
Fixed trimmed fields not saving null for empty strings (#24544 by @connorwinston)
Fixed Opening of Translation Split Pane Overriding 2nd lang when not needed (#24628 by @connorwinston)
Fixed being able to input non-integer values into an integer input. (#24569 by @connorwinston)
Ensured that bulk selection and editing in the table layout of the O2M and M2M interfaces works as expected (#24540 by @formfcw)
Added customizable handling for missing data in time series charts, allowing continuous lines, gaps, or a set value. (#24529 by @connorwinston)
Added confirmation prompt to delete buttons and ensured that they behave consistently (#24462 by @formfcw)
Exposed useTranslationsStore to extensions via useStores (#24475 by @paescuj)
Added support for rendering M2A items in related values display (#24503 by @formfcw)
π Bug Fixes & Optimizations
@directus/app
Fixed a bug where text did not appear in the markdown interface when switching from preview to editor mode (#24482 by @formfcw)
Fixed a bug where thumbnails did not appear in the render template (#24480 by @formfcw)
Fixed label display not handling json field types in templates (#24437 by @connorwinston)
Fixed conditional interface options incorrectly replacing choices (#23685 by @Trup3s)
Fixed missing space between v-notice and list items in M2A interface (#24466 by @formfcw)
Ensured that permissions are applied to kanban layout actions (#24409 by @formfcw)
Ensured that custom translations used in system-input-translated-string interfaces are displayed correctly (#24495 by @formfcw)
Fixed a bug where the item limit warning would appear even if the item count was already below the limit after filtering (#24485 by @formfcw)
Fixed a bug where the header would not collapse under certain circumstances and would unexpectedly move up when (#24454 by @formfcw)
scrolling elements in the view
Fixed inconsistencies in list interfaces (#24385 by @formfcw)
Added checkboxes/radiobuttons for calendar items when in select mode (#24444 by @formfcw)
Fixed Field/Collection/Relation Stores not handling error's correctly (#24436 by @connorwinston)
Fixed alignment of SSO social icons in Safari (#24474 by @paescuj)
Added support for cc, bcc, and replyTo fields to the email operation (#24488 by @highvibesonly)
Enhanced Date Formatting Options for DateTime Interface/Display (#24504 by @connorwinston)
@directus/api
Added support for cc, bcc, and replyTo fields to the email operation (#24488 by @highvibesonly)
Reverted version bump of CSV parser dependency due to a regression (#24441 by @hanneskuettner)
Removed read permissions check during files deletion (#24511 by @licitdev)
Run cleanup in mutex error case when getting schema (#24506 by @licitdev)
Improved flow notification messages to differentiate between async and sync flow execution (#24419 by @obafemitayor)
Added the ability to toggle translation interface items to make them deleteable and ensure that defaults, conditions and (#24291 by @formfcw)
validations work as expected
@directus/extensions-sdk
Introduced new validate command in the directus-extension CLI which checks if an extension meets the requirements (#24269 by @ukmadlz)
π Bug Fixes & Optimizations
@directus/app
Cleared login error message on successful credentials when TFA is enabled (#24274 by @bwp91)
Fixed a bug in the kanban layout where setting a related values display broke the layout (#24335 by @formfcw)
Changed useRelationMultiple to only update fetched items when dependents change, not just update (#24389 by @connorwinston)
Added internationalization to rich text editor toolbar (#23308 by @SP12893678)
Fixed incorrectly rendering related-values for related items in template rendering. Fixed display-formatted-values and display-labels not handling arrays correctly. Added handling of nested fields to template rendering. (#24232 by @connorwinston)
Ensured translation fields are validated (#24220 by @formfcw)