# Directus changelog > An instant REST and GraphQL API for any SQL database. - Vendor: Directus - Category: Developer Tools - Official site: https://directus.io - Tracked by: What's New (https://whatsnew.fyi/product/directus) - Harvested from: GitHub (directus/directus) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. ## Releases ### v12.2.0 - Date: 2026-07-29 - Version: v12.2.0 - Original notes: https://github.com/directus/directus/releases/tag/v12.2.0 - Permalink: https://whatsnew.fyi/product/directus/releases/v12.2.0 - **changed** — Restricted the settings fields readable with minimal app access to only those actually needed by non-admin users, no longer exposing admin-only and sensitive AI configuration fields - **changed** — Replaced the TinyMCE editor powering the WYSIWYG with Tiptap - **removed** — tinymceOverrides no longer has any effect in the WYSIWYG editor - **removed** — TinyMCE is no longer bundled with the app - **changed** — The DeploymentProjectsService.readByExternalId method now takes the deployment ID as its first argument - **fixed** — Fixed deployment webhooks resolving a project from the wrong provider when external IDs collide - **added** — Added support for multi-collection flat data imports - **added** — Import file size is now capped by default with IMPORT_MAX_FILE_SIZE environment variable set to 50mb - **changed** — The background query flag now treats a valueless indicator as true - **changed** — The SDK schemaDiff command now takes its options as an object - **added** — Added a mode parameter and partial snapshot support to the schema diff endpoint - **added** — Added support for restricting image transformation output size via ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION - **added** — Image transformations that project an output larger than ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION default 3000 px on either axis are now rejected - **added** — Added JSON path filtering to Studio filters - **added** — Added search to the collection selection in relationship configuration - **added** — Added global setting for default save action - **added** — Added LICENSE_KEY_MANAGEMENT_ENABLED to control license key management - **fixed** — Fixed incomplete json filter paths errors - **added** — Added support for partial schema snapshot via new includeCollections and excludeCollections parameters ###### ⚠️ Potential Breaking Changes **Restricted the settings fields readable with minimal app access to those actually needed by non-admin users, no longer exposing admin-only and sensitive AI configuration fields ([#27996](https://github.com/directus/directus/pull/27996))** The minimal app permissions now grant read access to only a subset of `directus_settings` fields. This applies to new policies, existing policies are untouched. **Replaced the TinyMCE editor powering the WYSIWYG with Tiptap... ([#27754](https://github.com/directus/directus/pull/27754))** **The WYSIWYG interface now runs on Tiptap instead of TinyMCE** - `tinymceOverrides` no longer has any effect. Stored values are kept and a console warning is logged, but the editor ignores them. Use the `fontsize`/`fontfamily` toolbar menus and `customFormats` instead. - TinyMCE is no longer bundled with the app, so anything depending on it (custom plugins, skins, content CSS, the global `tinymce` object) no longer applies. - Existing content that contains markup the editor would normalize now locks the field read-only until the warning dialog is confirmed. Editing and autosave are blocked while locked, including raw-value editing. **Fixed deployment webhooks resolving a project from the wrong provider when external IDs collide ([#27816](https://github.com/directus/directus/pull/27816))** The `DeploymentProjectsService.readByExternalId` method now takes the deployment ID as its first argument (i.e. `readByExternalId(deploymentId, externalId)`) **Added support for multi-collection flat data imports ([#27984](https://github.com/directus/directus/pull/27984))** **Import file size is now capped by default** A new `IMPORT_MAX_FILE_SIZE` environment variable (default: `50mb`) limits the size of uploaded import files and schema snapshots. Previously, imports were effectively unrestricted, allowing files larger than `50mb` to be processed. With this change, imports exceeding the configured limit will be rejected. Increase `IMPORT_MAX_FILE_SIZE` to restore the previous behavior. **Updated `background` query flag handling for `POST /utils/import/:collection`** The `background` query flag now treats a valueless indicator (i.e. `?background`) as true. If you previously relied on a valueless background flag being interpreted as false, pass an explicit value instead (i.e. `?background=false`). **Added a `mode` parameter and partial snapshot support to the schema diff endpoint ([#27984](https://github.com/directus/directus/pull/27984))** The SDK `schemaDiff` command now takes its options as an object (`schemaDiff(snapshot, { force, mode })`) **Added support for restricting image transformation output size via `ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION` ([#27995](https://github.com/directus/directus/pull/27995))** **Image transformation output is now restricted** Image transformations that project an output larger than `ASSETS_TRANSFORM_IMAGE_MAX_OUTPUT_DIMENSION` (default `3000` px) on either axis are now rejected with an `IllegalAssetTransformationError`. - **@directus/app** - Replaced the TinyMCE editor powering the WYSIWYG with Tiptap ([#27754](https://github.com/directus/directus/pull/27754) by @alvarosabu) To avoid data loss, the editor preserves attributes (`class`, `id`, `title`, `role`, `lang`, `dir`, `data-*`, `aria-*`) and non-schema semantic tags. If stored HTML still contains markup the editor would normalize, the field is locked read-only with a warning dialog, so no edit or autosave can rewrite it before you confirm; raw-value editing is disabled while locked so the warning can't be bypassed. - **@directus/api** - Restricted the settings fields readable with minimal app access to those actually needed by non-admin users, no longer exposing admin-only and sensitive AI configuration fields ([#27996](https://github.com/directus/directus/pull/27996) by @br41nslug) - Fixed deployment webhooks resolving a project fro _[Truncated at 4000 characters — full notes: https://github.com/directus/directus/releases/tag/v12.2.0]_ ### v12.1.1 - Date: 2026-07-01 - Version: v12.1.1 - Original notes: https://github.com/directus/directus/releases/tag/v12.1.1 - Permalink: https://whatsnew.fyi/product/directus/releases/v12.1.1 - **changed** — Updated vite dependency to 8.1.2 in @directus/app - **changed** — Updated vite dependency to 8.1.2 in @directus/api > [!NOTE] > Directus is free for individuals and organizations under $5M annual revenue and 50 employees.\ > Get your free license key at [directus.com/oig](http://directus.com/oig) ###### 🐛 Bug Fixes & Optimizations - **@directus/app** - Updated vite dependency to 8.1.2 ([#27826](https://github.com/directus/directus/pull/27826) by @ComfortablyCoding) - **@directus/api** - Updated vite dependency to 8.1.2 ([#27826](https://github.com/directus/directus/pull/27826) by @ComfortablyCoding) ###### 📦 Published Versions - `@directus/app@16.2.1` - `@directus/api@37.0.1` ### v12.1.0 - Date: 2026-07-01 - Version: v12.1.0 - Original notes: https://github.com/directus/directus/releases/tag/v12.1.0 - Permalink: https://whatsnew.fyi/product/directus/releases/v12.1.0 - **removed** — Remove /utils/hash/generate and /utils/hash/verify endpoints - **security** — Harden upload path validation to prevent writes to extension and temporary storage directories - **security** — Add CORS_ORIGIN checks for websocket connections - **changed** — Limit sensitive system mutations defined by GRAPHQL_SINGLE_USE_MUTATIONS to single use - **changed** — Update GraphQL WebSocket restrictions to match the HTTP endpoint and hide validation hints when introspection is disabled - **changed** — Harden the published Docker image and drop npm/npx from the runtime - **added** — Publish a distroless Docker Hardened Image (DHI) variant under a -dhi tag suffix - **added** — Add PROJECT_OWNER_ENABLED env var to allow disabling owner info collection and sync - **added** — Add v-kbd component and support { text, kbd } syntax in tooltip - **added** — Replace tooltip with Reka UI one - **changed** — Update bundled esbuild to 0.28.1 - **fixed** — Restore pre-v12 back button behavior to return to previously visited item/page when navigating via a relation - **fixed** — Fix public page foreground image rendering to overlay shader background instead of rendering side-by-side - **fixed** — Fix array indexing in display and preview URL templates so templates like {{ categories[0].name }} resolve to the indexed value - **security** — Fix stored XSS vulnerability where the project color could break out of the generated favicon's SVG markup - **fixed** — Fix internal server error when validating out-of-range integer values - **security** — Fix Local File Inclusion vulnerability in MailService.renderTemplate - **fixed** — Fix Postgres value too long errors being misattributed to an unrelated field - **added** — Add validation to restrict geometry types to known types - **fixed** — Fix accountability overrides in the graphql websocket > [!NOTE] > Directus is free for individuals and organizations under $5M annual revenue and 50 employees.\ > Get your free license key at [directus.com/oig](http://directus.com/oig) ###### ⚠️ Potential Breaking Changes - **@directus/api** - Limited sensitive system mutations defined by GRAPHQL_SINGLE_USE_MUTATIONS to single use ([#27801](https://github.com/directus/directus/pull/27801) by @br41nslug) - Removed `/utils/hash/generate` and `/utils/hash/verify` endpoints ([#27774](https://github.com/directus/directus/pull/27774) by @br41nslug) - Fixed failed TUS file replacements leaving orphaned file records. Hardened upload path validation to prevent writes to extension and temporary storage directories ([#27803](https://github.com/directus/directus/pull/27803) by @br41nslug) - Updated GraphQL WebSocket restrictions to match the HTTP endpoint and hid validation hints when introspection is disabled ([#27801](https://github.com/directus/directus/pull/27801) by @br41nslug) - Added CORS_ORIGIN checks for websocket connections ([#27812](https://github.com/directus/directus/pull/27812) by @br41nslug) - **@directus/specs** - Removed `/utils/hash/generate` and `/utils/hash/verify` endpoints ([#27774](https://github.com/directus/directus/pull/27774) by @br41nslug) - **@directus/sdk** - Removed `/utils/hash/generate` and `/utils/hash/verify` endpoints ([#27774](https://github.com/directus/directus/pull/27774) by @br41nslug) - Hardened the published Docker image and added a distroless Docker Hardened Image (DHI) variant alongside it. The standard image now applies outstanding OS-level patches at build time and drops `npm`/`npx` from the runtime; the new DHI variant is published under a `-dhi` tag suffix ([#27670](https://github.com/directus/directus/pull/27670) by @br41nslug) ###### ✨ New Features & Improvements - **@directus/app** - Added `PROJECT_OWNER_ENABLED` env var to allow disabling owner info collection and sync ([#27802](https://github.com/directus/directus/pull/27802) by @ComfortablyCoding) - Replaced tooltip with Reka UI one ([#27029](https://github.com/directus/directus/pull/27029) by @HZooly) - Added `v-kbd` component and support `{ text, kbd }` syntax in tooltip ([#27029](https://github.com/directus/directus/pull/27029) by @HZooly) - Updated bundled `esbuild` to `0.28.1` (resolves GHSA-gv7w-rqvm-qjhr) ([#27738](https://github.com/directus/directus/pull/27738) by @br41nslug) - **@directus/api** - Added `PROJECT_OWNER_ENABLED` env var to allow disabling owner info collection and sync ([#27802](https://github.com/directus/directus/pull/27802) by @ComfortablyCoding) - **@directus/env** - Added `PROJECT_OWNER_ENABLED` env var to allow disabling owner info collection and sync ([#27802](https://github.com/directus/directus/pull/27802) by @ComfortablyCoding) ###### 🐛 Bug Fixes & Optimizations - **@directus/app** - Restored pre-v12 back button behavior: returns to the previously visited item/page when navigating via a relation, and to the collection listing when landing on an item directly ([#27799](https://github.com/directus/directus/pull/27799) by @robluton) - Fixed the public page foreground image rendering side-by-side with the shader background instead of overlaying it ([#27782](https://github.com/directus/directus/pull/27782) by @alvarosabu) - Added clearable indicator to input hash field ([#27729](https://github.com/directus/directus/pull/27729) by @robluton) - Added lazy loading of social icons on v-button ([#27724](https://github.com/directus/directus/pull/27724) by @alvarosabu) - Bumped version of @directus/license package ([#27785](https://github.com/directus/directus/pull/27785) by @AlexGaillard) - Fixed array indexing (e.g. `field[0]` or `field.0`) in display and preview URL templates, so a template like `{{ categories[0].name }}` now resolves to the indexed value instead of rendering empty ([#27773](https://github.com/directus/directus/pu _[Truncated at 4000 characters — full notes: https://github.com/directus/directus/releases/tag/v12.1.0]_ ### v12.0.2 - Date: 2026-06-12 - Version: v12.0.2 - Original notes: https://github.com/directus/directus/releases/tag/v12.0.2 - Permalink: https://whatsnew.fyi/product/directus/releases/v12.0.2 - **added** — Added support for non-interactive mode in create-directus-extension - **fixed** — Fixed user count for users with conflicting direct policy and role > [!NOTE] > Directus is free for individuals and organizations under $5M annual revenue and 50 employees.\ > Get your free license key at [directus.com/oig](http://directus.com/oig) ###### ✨ New Features & Improvements - **create-directus-extension** - Added support for non-interactive mode ([#27577](https://github.com/directus/directus/pull/27577) by @pklenovic) ###### 🐛 Bug Fixes & Optimizations - **@directus/api** - Fixed user count for users with conflicting direct policy and role ([#27720](https://github.com/directus/directus/pull/27720) by @ComfortablyCoding) ###### 📦 Published Versions - `@directus/app@16.1.1` - `@directus/api@36.0.2` - `create-directus-extension@12.1.0` ### v12.0.1 - Date: 2026-06-11 - Version: v12.0.1 - Original notes: https://github.com/directus/directus/releases/tag/v12.0.1 - Permalink: https://whatsnew.fyi/product/directus/releases/v12.0.1 - **added** — Added keyboard-editable date entry directly in the datetime field with formatted value display at rest and editable date segments on focus - **added** — Added inline editing support to the JSON repeater interface - **fixed** — Fixed license badge spacing issue - **fixed** — Fixed license modals being impossible to dismiss when shown above a route drawer by keeping dialog focus traps stacked in visual order and scoping license dismissal cookies to the whole app - **fixed** — Fixed revision snapshots being assigned to the wrong items during batch updates when read order differs > [!NOTE] > Directus is free for individuals and organizations under $5M annual revenue and 50 employees.\ > Get your free license key at [directus.com/oig](http://directus.com/oig) ###### ✨ New Features & Improvements - **@directus/app** - Added keyboard-editable date entry directly in the datetime field. The field shows its formatted value at rest and swaps to editable date segments on focus, while a calendar button still opens the picker popup. ([#27693](https://github.com/directus/directus/pull/27693) by @robluton) - Added inline editing support to the JSON repeater interface. ([#26863](https://github.com/directus/directus/pull/26863) by @bryantgillespie) ###### 🐛 Bug Fixes & Optimizations - **@directus/app** - Fixed license badge spacing issue ([#27713](https://github.com/directus/directus/pull/27713) by @robluton) - Fixed license modals being impossible to dismiss when shown above a route drawer (e.g. field detail pages) by keeping dialog focus traps stacked in visual order, and scoped license dismissal cookies to the whole app so dismissals persist across navigation ([#27714](https://github.com/directus/directus/pull/27714) by @dstockton) - **@directus/api** - Fixed revision snapshots being assigned to the wrong items during batch updates when read order differs ([#27407](https://github.com/directus/directus/pull/27407) by @luciemdx) ###### 📦 Published Versions - `@directus/app@16.1.0` - `@directus/api@36.0.1` ### v12.0.0 - Date: 2026-06-10 - Version: v12.0.0 - Original notes: https://github.com/directus/directus/releases/tag/v12.0.0 - Permalink: https://whatsnew.fyi/product/directus/releases/v12.0.0 - **added** — Introduce active license enforcement for Directus 12, with Core tier as default for self-hosted instances - **added** — Add VERSION_KEY_* constants and support ?version=published query parameter for resolving versions of main items - **added** — Add header action button to edit draft versions in versioned collections - **added** — Share health check results across multi-instance deployments with caching - **changed** — Relicense from BUSL-1.1 to MSCL-1.0-GPL - **changed** — Change IP_TRUST_PROXY default from true to false to harden against IP spoofing - **changed** — Replace status field with archived boolean in collection settings for newly created collections - **changed** — Replace cache, rateLimiter, and rateLimiterGlobal health checks with generic redis check using redis: prefix - **changed** — Lock published items in versioned collections from editing - **changed** — Remove rounded prop from v-button component - **changed** — Remove headerShadow and sidebarShadow from LayoutConfig interface for theme extensions - **changed** — Remove boxShadow from header theme rules schema for theme extensions - **changed** — Remove sidebarShadow from layout wrapper state exposure for theme extensions - **changed** — Remove navigation.project.borderColor, navigation.project.borderWidth, and navigation.project.background from theming - **changed** — Merge header and navigation bar theme properties into new shell scope with shell.background, shell.backgroundAccent, shell.borderWidth, and shell.borderColor - **removed** — Disable SSO login without a valid license - **removed** — Disable custom permission rules without a valid license - **removed** — Disable custom or self-hosted LLM connections without a valid license - **removed** — Restrict /server/health endpoint to authenticated users; use /server/ping for liveness checks instead - **deprecated** — Deprecate VResizeable component for extension authors in favor of @directus/vue-split-panel **License Enforcement** > [!NOTE] > Directus is free for individuals and organizations under $5M annual revenue and 50 employees.\ > Get your free license key at [directus.com/oig](http://directus.com/oig) Directus 12 introduces active license enforcement. Self-hosted instances run on the **Core tier** by default. Higher limits and additional features require a valid license. See [Licensing](https://directus.com/docs/licensing/overview) for a complete overview. This change affects instances previously using features that now require a license, including: - **SSO** — SSO login will no longer work. Users who authenticate through SSO will be unable to log in and must be converted to email and password users to regain access. - **Custom permission rules** — custom rules on access policies will be ignored. - **Custom or self-hosted LLMs** — connections to custom LLMs will no longer work. - **AI Translations** — AI-powered translations are not available. Enforcement is immediate on new instances. Instances upgrading to Directus 12 get a 30-day [grace period](https://directus.com/docs/releases/breaking-changes/version-12#post-upgrade-grace-period) from the time of upgrade, after which these are enforced unless a license that enables them is configured. If your instance uses any of these features, add a license that includes them to continue to do so. If your instance uses only Core tier features, no action is required. **Changed license to MSCL-1.0-GPL ([#27417](https://github.com/directus/directus/pull/27417))** - Breaking Change: Relicensed from BUSL-1.1 to MSCL-1.0-GPL (Monospace Sustainable Core License, Version 1.0). **Changed the default of `IP_TRUST_PROXY` from `true` to `false` to harden the default deployment against IP spoofing. ([#27607](https://github.com/directus/directus/pull/27607))** - The `IP_TRUST_PROXY` default was changed from `true` to `false`. If you run Directus behind a reverse proxy and rely on `X-Forwarded-For` (or similar) headers for client IP resolution, you must now explicitly set `IP_TRUST_PROXY` to `true` or a more specific trust configuration. **Fixed health check results not being shared in multi-instance settings. Restricted `/server/health` to authenticated users ([#27160](https://github.com/directus/directus/pull/27160))** - Health checks are cached by default and shared across multi-instance deployments - `/server/health` will return 404 for unauthenticated requests, use `/server/ping` for liveness checks - `cache`, `rateLimiter` and `rateLimiterGlobal` health checks have been replaced by a generic `redis` check using the `redis:` prefix **Introduced VERSION_KEY_* constants and renamed main to published @alvarosabu ([#27397](https://github.com/directus/directus/pull/27397))** - Backward Compatibility: You can now use `?version=published` to resolve versions of the main item(s) via the version query parameter. For backward compatibility, `?version=main` will continue to work. **Replaced status field with archived boolean in collection settings @alvarosabu ([#27397](https://github.com/directus/directus/pull/27397))** - Backward Compatibility: Existing collections with string-based status fields continue to work unchanged; newly created collections now default to a boolean "Archived" field instead of the string "Status" field **Deprecated the `VResizeable` component @formfcw ([#27437](https://github.com/directus/directus/pull/27437))** - Deprecation for extensions: The globally registered `VResizeable` component has been deprecated. Extension authors using `` should migrate to `@directus/vue-split-panel` or their own implementation. **Updated type system, borders, and theme variables @formfcw ([#27437](https://github.com/directus/directus/pull/27437))** - Potential breaking change for theme extensions: headerShadow and sidebarShadow removed from LayoutConfig interface - Potential breaking change for theme extensions: boxShadow _[Truncated at 4000 characters — full notes: https://github.com/directus/directus/releases/tag/v12.0.0]_ ### v12.0.0-rc.2 - Date: 2026-06-05 - Version: v12.0.0-rc.2 - Original notes: https://github.com/directus/directus/releases/tag/v12.0.0-rc.2 - Permalink: https://whatsnew.fyi/product/directus/releases/v12.0.0-rc.2 - Labels: Pre-release - **changed** — Health checks are now cached by default and shared across multi-instance deployments - **changed** — Restrict /server/health endpoint to authenticated users; use /server/ping for liveness checks instead - **changed** — Replace cache, rateLimiter and rateLimiterGlobal health checks with a generic redis check using the redis: prefix - **added** — Allow disabling the health check endpoint via HEALTHCHECK_ENABLED or selectively disable checked services via HEALTHCHECK_SERVICES - **added** — Add TTL support for local KV and cache stores - **changed** — Update directus_oauth_* system collection visibility to match other system collections - **fixed** — Fix project setup silently ignoring invalid license keys - **fixed** — Fix tick rendering when count exceeds display limit in v-slider - **fixed** — Cap datepicker year to prevent invalid date - **fixed** — Fix EXTENSIONS_PATH and EXTENSIONS_LOCATION environment variables not being respected by the Vite dev server - **fixed** — Fix bug on tooltip value when decimals is 0 in pie chart panel - **fixed** — Fix search input not trimming whitespace, causing queries with leading or trailing spaces to return no results - **added** — Add support for translatable flow names via the $t: prefix and translation strings, matching the field/collection label pattern - **removed** — Remove unsupported json filter function from the studio - **fixed** — Fix nested deep query parameters being dropped when filters use dynamic variables - **fixed** — Fix bulk creation of itemless drafts always failing - **fixed** — Prevent setting a custom user provider when not entitled to SSO - **fixed** — Fix aliased relational fields in GraphQL queries, fragments and REST queries - **fixed** — Fix singletons allowing multiple itemless versions - **fixed** — Fix issue causing duplicate admin roles on first admin creation ###### ⚠️ Potential Breaking Changes **Fixed health check results not being shared in multi-instance settings. Restricted `/server/health` to authenticated users ([#27160](https://github.com/directus/directus/pull/27160))** - Health checks are cached by default and shared across multi-instance deployments - `/server/health` will return 404 for unauthenticated requests, use `/server/ping` for liveness checks - `cache`, `rateLimiter` and `rateLimiterGlobal` health checks have been replaced by a generic `redis` check using the `redis:` prefix - **@directus/api** - Fixed health check results not being shared in multi-instance settings. Restricted `/server/health` to authenticated users ([#27160](https://github.com/directus/directus/pull/27160) by @ComfortablyCoding) ###### ✨ New Features & Improvements - **@directus/api** - Allow disabling the health check endpoint via HEALTHCHECK_ENABLED or selectively disabled checked services via HEALTHCHECK_SERVICES ([#27160](https://github.com/directus/directus/pull/27160) by @ComfortablyCoding) - **@directus/types** - Fixed health check results not being shared in multi-instance settings. Restricted `/server/health` to authenticated users ([#27160](https://github.com/directus/directus/pull/27160) by @ComfortablyCoding) - **@directus/env** - Allow disabling the health check endpoint via HEALTHCHECK_ENABLED or selectively disabled checked services via HEALTHCHECK_SERVICES ([#27160](https://github.com/directus/directus/pull/27160) by @ComfortablyCoding) - **@directus/memory** - Added TTL support for local KV and cache stores ([#27160](https://github.com/directus/directus/pull/27160) by @ComfortablyCoding) - **@directus/system-data** - Updated `directus_oauth_*` system collection visibility to match other system collections ([#27682](https://github.com/directus/directus/pull/27682) by @hanneskuettner) ###### 🐛 Bug Fixes & Optimizations - **@directus/app** - Fixed project setup silently ignoring invalid license keys ([#27671](https://github.com/directus/directus/pull/27671) by @ComfortablyCoding) - Fixed tick rendering when count exceeds display limit in v-slider ([#27644](https://github.com/directus/directus/pull/27644) by @HZooly) - Consolidated URLs and emails into shared constants ([#27641](https://github.com/directus/directus/pull/27641) by @HZooly) - Capped datepicker year to prevent invalid date ([#27659](https://github.com/directus/directus/pull/27659) by @HZooly) - Fixed `EXTENSIONS_PATH` and `EXTENSIONS_LOCATION` env vars not being respected by the Vite dev server ([#27642](https://github.com/directus/directus/pull/27642) by @HZooly) - Added notice on license page with oig link ([#27661](https://github.com/directus/directus/pull/27661) by @robluton) - Fixed bug on tooltip value when decimals is 0 in pie chart panel ([#27356](https://github.com/directus/directus/pull/27356) by @Prateet-Github) - Added missing collection note translations for the `directus_oauth_*` system collections ([#27682](https://github.com/directus/directus/pull/27682) by @hanneskuettner) - Fixed search input not trimming whitespace, causing queries with leading or trailing spaces to return no results ([#27359](https://github.com/directus/directus/pull/27359) by @khanahmad4527) - Added minor copy change to license onboarding and license key interface ([#27651](https://github.com/directus/directus/pull/27651) by @robluton) - Updated license request links. ([#27652](https://github.com/directus/directus/pull/27652) by @HZooly) - Added support for translatable flow names via the existing `$t:` prefix and translation strings, matching the field/collection label pattern. The flow name input in the flow editor now exposes the translation picker. ([#27472](https://github.com/directus/directus/pull/27472) by @khanahmad4527) - Removed unsupported json filter function from the studio ([#27669](https://github.com/directus/directus/pull/27669) by _[Truncated at 4000 characters — full notes: https://github.com/directus/directus/releases/tag/v12.0.0-rc.2]_ ### v12.0.0-rc.1 — Directus v12.0.0-rc.1 - Date: 2026-05-29 - Version: v12.0.0-rc.1 - Original notes: https://github.com/directus/directus/releases/tag/v12.0.0-rc.1 - Permalink: https://whatsnew.fyi/product/directus/releases/v12.0.0-rc.1 - Labels: Pre-release - **changed** — Introduced VERSION_KEY_* constants and renamed main to published, with backward compatibility for ?version=main - **changed** — Replaced status field with archived boolean in collection settings, with existing collections continuing to work unchanged - **deprecated** — The VResizeable component has been deprecated; extension authors should migrate to @directus/vue-split-panel or their own implementation - **removed** — Removed headerShadow and sidebarShadow from LayoutConfig interface - **removed** — Removed boxShadow from header theme rules schema - **removed** — Removed navigation.project.borderColor, navigation.project.borderWidth, and navigation.project.background from theming - **changed** — Published items in versioned collections are now locked; edits must be made through the draft version - **removed** — Removed rounded prop from v-button - **changed** — Changed license from BUSL-1.1 to MSCL-1.0-GPL - **removed** — Removed theme properties navigation.background, navigation.backgroundAccent, navigation.borderWidth, navigation.borderColor, header.background, header.borderWidth, and header.borderColor in favor of new shell scope - **changed** — Publishing a version no longer shows an additional confirmation dialog after confirming changes in the comparison modal - **removed** — Removed section.toggle.borderWidth and section.toggle.borderColor in favor of section-level border tokens - **removed** — Removed sidebarShadow and headerShadow from defineLayout() - **removed** — Removed borderColorFocus, boxShadowHover, and boxShadowFocus from the theme schema - **deprecated** — The headline slot on the private view header bar has been deprecated - **changed** — Changed the default of IP_TRUST_PROXY from true to false to harden the default deployment against IP spoofing ###### ⚠️ Potential Breaking Changes **Introduced VERSION_KEY_* constants and renamed main to published @alvarosabu ([#27397](https://github.com/directus/directus/pull/27397))** Backward Compatibility: You can now use `?version=published` to resolve versions of the main item(s) via the version query parameter. For backward compatibility, `?version=main` will continue to work. **Replaced status field with archived boolean in collection settings @alvarosabu ([#27397](https://github.com/directus/directus/pull/27397))** Backward Compatibility: Existing collections with string-based status fields continue to work unchanged; newly created collections now default to a boolean "Archived" field instead of the string "Status" field **Deprecated the `VResizeable` component @formfcw ([#27437](https://github.com/directus/directus/pull/27437))** - Deprecation for extensions: The globally registered `VResizeable` component has been deprecated. Extension authors using `` should migrate to `@directus/vue-split-panel` or their own implementation. **Updated type system, borders, and theme variables @formfcw ([#27437](https://github.com/directus/directus/pull/27437))** - Potential breaking change for theme extensions: headerShadow and sidebarShadow removed from LayoutConfig interface - Potential breaking change for theme extensions: boxShadow removed from header theme rules schema - Potential breaking change for theme extensions: sidebarShadow no longer exposed in layout wrapper state **Updated module navigation bar spacing and styling @HZooly ([#27437](https://github.com/directus/directus/pull/27437))** - Potential breaking change in theme extensions: Removed `navigation.project.borderColor` / `navigation.project.borderWidth` / `navigation.project.background` from theming. No action is required — these props will simply no longer have any effect. **Locked published items in versioned collections from editing and added a header action button to edit in the draft version @alvarosabu ([#27397](https://github.com/directus/directus/pull/27397))** - **Breaking change — new behavior for versioned collections** Published items in versioned collections are now locked. Edits must be made through the draft version. **Removed rounded buttons and adopted shared header action button across all views @formfcw ([#27437](https://github.com/directus/directus/pull/27437))** - Potential breaking change for extensions: The `rounded` prop has been removed from `v-button`. Extensions using `rounded` will still render correctly but buttons will appear as rounded rectangles instead of circles. No functional impact. **Changed license to MSCL-1.0-GPL ([#27417](https://github.com/directus/directus/pull/27417))** - Breaking Change: Relicensed from BUSL-1.1 to MSCL-1.0-GPL (Monospace Sustainable Core License, Version 1.0). **Updated header and navigation bar base design and merged their theme properties into a new shell scope @formfcw ([#27437](https://github.com/directus/directus/pull/27437))** - Potential breaking change for theme extensions: The theme properties `navigation.background`, `navigation.backgroundAccent`, `navigation.borderWidth`, `navigation.borderColor`, `header.background`, `header.borderWidth`, and `header.borderColor` have been removed and replaced by `shell.background`, `shell.backgroundAccent`, `shell.borderWidth`, and `shell.borderColor`. - Potential breaking change for theme extensions: Custom themes overriding any of these removed properties must migrate to the new `shell` scope. The corresponding CSS variables change from `--theme--navigation--background`, `--theme--navigation--background-accent`, `--theme--navigation--border-*`, `--theme--header--background`, and `--theme--header--border-*` to `--theme--shell--background`, `--theme--shell--background-accent`, and `--theme--shell--border-*`. **Removed the extra confirmation step from the publish flow @alvarosabu ([#27487](https://github.com/dir _[Truncated at 4000 characters — full notes: https://github.com/directus/directus/releases/tag/v12.0.0-rc.1]_ ### v11.17.4 - Date: 2026-04-30 - Version: v11.17.4 - Original notes: https://github.com/directus/directus/releases/tag/v11.17.4 - Permalink: https://whatsnew.fyi/product/directus/releases/v11.17.4 - **added** — Token field on the user detail page now requires confirmation before regenerating or removing a token, with changes saved immediately - **added** — Added opt-in must-revalidate and ETag headers for assets via ASSETS_CACHE_REVALIDATE environment variable - **added** — Added force option to schema apply to bypass hash check - **fixed** — Fixed UI freeze when navigating items with WYSIWYG translations for non-admin users - **fixed** — Fixed selection not being cleared after running a manual flow from the collection list view sidebar - **fixed** — Fixed Save as copy in the file library throwing a 403 Forbidden error - **fixed** — Fixed user token not being displayed after generation when collaboration is enabled - **fixed** — Prevented filter popup being closed when reordering filters - **fixed** — Fixed icon flash in navigation sidebar for bookmarks without an icon - **changed** — Migrated @directus/visual-editing into the monorepo - **fixed** — Removed duplicate @directus/schema-builder dependency - **fixed** — Fixed flows not awaiting reload - **fixed** — Fixed VERSION_SAVE activity and revisions not respecting collection tracking settings - **fixed** — Denied creating collections with / in name - **fixed** — Fixed the edit handler firing twice when clicking an overlay button directly - **fixed** — Fixed SDK types linking to directus_access junction collection - **fixed** — Fixed useShortcut attempting to access document before available ###### ✨ New Features & Improvements - **@directus/app** - Updated the token field on the user detail page to require confirmation before regenerating or removing a token, and saved those changes immediately without requiring a page-level save. ([#27108](https://github.com/directus/directus/pull/27108) by @LZylstra) - **@directus/api** - Added opt-in must-revalidate and ETag headers for assets via ASSETS_CACHE_REVALIDATE env var ([#27027](https://github.com/directus/directus/pull/27027) by @gaetansenn) - Added a force option to schema apply to bypass hash check ([#27136](https://github.com/directus/directus/pull/27136) by @Nitwel) - **@directus/env** - Added opt-in must-revalidate and ETag headers for assets via ASSETS_CACHE_REVALIDATE env var ([#27027](https://github.com/directus/directus/pull/27027) by @gaetansenn) - **@directus/sdk** - Added a force option to schema apply to bypass hash check ([#27136](https://github.com/directus/directus/pull/27136) by @Nitwel) ###### 🐛 Bug Fixes & Optimizations - **@directus/app** - Fixed UI freeze when navigating items with WYSIWYG translations for non-admin users ([#27154](https://github.com/directus/directus/pull/27154) by @gaetansenn) - Fixed selection not being cleared after running a manual flow from the collection list view sidebar ([#27330](https://github.com/directus/directus/pull/27330) by @kropsi) - Fixed "Save as copy" in the file library throwing a 403 Forbidden error ([#27181](https://github.com/directus/directus/pull/27181) by @sanskar-soni-9) - Fixed user token not being displayed after generation when collaboration is enabled ([#27319](https://github.com/directus/directus/pull/27319) by @LZylstra) - Prevented filter popup being closed when reordering filters ([#27324](https://github.com/directus/directus/pull/27324) by @HZooly) - Fixed icon flash in navigation sidebar for bookmarks without an icon ([#27329](https://github.com/directus/directus/pull/27329) by @HZooly) - Migrated @directus/visual-editing into the monorepo ([#27157](https://github.com/directus/directus/pull/27157) by @formfcw) - **@directus/api** - Removed duplicate `@directus/schema-builder` dependency ([#27166](https://github.com/directus/directus/pull/27166) by @ComfortablyCoding) - Bumped basic-ftp, liquidjs, xmldom, protobufjs, vite dependencies ([#27335](https://github.com/directus/directus/pull/27335) by @br41nslug) - Fixed flows not awaiting reload ([#27137](https://github.com/directus/directus/pull/27137) by @Nitwel) - Fixed `VERSION_SAVE` activity/revisions not respecting collection tracking settings ([#27096](https://github.com/directus/directus/pull/27096) by @yogeshwaran-c) - Denied creating collections with `/` in name ([#27114](https://github.com/directus/directus/pull/27114) by @costajohnt) - **@directus/types** - Added a force option to schema apply to bypass hash check ([#27136](https://github.com/directus/directus/pull/27136) by @Nitwel) - **@directus/visual-editing** - Migrated @directus/visual-editing into the monorepo ([#27157](https://github.com/directus/directus/pull/27157) by @formfcw) - Fixed the edit handler firing twice when clicking an overlay button directly ([#27157](https://github.com/directus/directus/pull/27157) by @formfcw) - **@directus/utils** - Migrated @directus/visual-editing into the monorepo ([#27157](https://github.com/directus/directus/pull/27157) by @formfcw) - **@directus/sdk** - Fixed SDK types linking to `directus_access` junction collection ([#27152](https://github.com/directus/directus/pull/27152) by @yogeshwaran-c) - **@directus/composables** - Fixed `useShortcut` attempting to access document before available ([#27155](https://github.com/directus/directus/pull/27155) by @ComfortablyCoding) ###### 📦 Published Versions - `@directus/app@15.10.0` - `@directus/api@35.2.0` - `@directus/composables@11.4.1` - `create-directus-extension@11.0.36` - `@directus/env@5.8.0` _[Truncated at 4000 characters — full notes: https://github.com/directus/directus/releases/tag/v11.17.4]_ ### v11.17.3 - Date: 2026-04-15 - Version: v11.17.3 - Original notes: https://github.com/directus/directus/releases/tag/v11.17.3 - Permalink: https://whatsnew.fyi/product/directus/releases/v11.17.3 - **added** — Replace 'All Users' tab with Active, Suspended, and Invited status tabs - **added** — Add 'Save as New File' option to image editor - **added** — Add new /ai/object endpoint to generate structured objects for autocomplete and other inline experiences - **changed** — Eliminate redundant count requests in the useItems composable - **fixed** — Fix export failing on collections with virtual fields like $thumbnail by excluding them from export defaults and the field picker - **fixed** — Add customizing of cache keys for flow endpoints - **fixed** — Fix use of named routes instead of hardcoded path strings - **fixed** — Fix VBadge intercepting pointer events on slotted elements - **fixed** — Fix comparison modal footer responsive breakpoint - **fixed** — Fix schema introspection for MSSQL text fields with max length of -1 to be normalized to null - **fixed** — Trim leading and trailing spaces from search queries - **fixed** — Fix promotion of deleted relation returning invalid date time value error - **fixed** — Fix api building with a node_modules folder - **fixed** — Fix MARKETPLACE_REGISTRY env not being passed to registry list call when generating extension settings - **changed** — Replace INTERNAL_SERVER_ERROR with SERVICE_UNAVAILABLE for marketplace registry errors and improve error messages ###### ✨ New Features & Improvements - **@directus/app** - Replaced "All Users" tab with Active, Suspended, and Invited status tabs ([#27036](https://github.com/directus/directus/pull/27036) by @robluton) - Added `Save as New File` option to image editor ([#27084](https://github.com/directus/directus/pull/27084) by @JamesW1) - **@directus/api** - Added a new /ai/object endpoint to generate structured objects for autocomplete and other inline experiences ([#26862](https://github.com/directus/directus/pull/26862) by @bryantgillespie) - **@directus/composables** - Eliminated redundant count requests in the `useItems` composable ([#26906](https://github.com/directus/directus/pull/26906) by @okxint) ###### 🐛 Bug Fixes & Optimizations - **@directus/app** - Fixed export failing on collections with virtual fields like $thumbnail by excluding them from export defaults and the field picker ([#27073](https://github.com/directus/directus/pull/27073) by @om-singh-D) - Added customizing of cache keys for flow endpoints. ([#26935](https://github.com/directus/directus/pull/26935) by @costajohnt) - Fix "Use named routes instead of hardcoded path strings #26733" ([#26809](https://github.com/directus/directus/pull/26809) by @powerseed) - Fixed `VBadge` intercepting pointer events on slotted elements ([#27087](https://github.com/directus/directus/pull/27087) by @HZooly) - Fixed comparison modal footer responsive breakpoint ([#27061](https://github.com/directus/directus/pull/27061) by @robluton) - Updated `liquidjs`, `axios`, `vite`, `nodemailer`, `brace-expansion`, `basic-ftp`, `hono`, `fast-xml-parser`, `tar`, ([#27081](https://github.com/directus/directus/pull/27081) by @br41nslug) `qs` and `defu` dependencies - **@directus/api** - Added customizing of cache keys for flow endpoints. ([#26935](https://github.com/directus/directus/pull/26935) by @costajohnt) - Updated `liquidjs`, `axios`, `vite`, `nodemailer`, `brace-expansion`, `basic-ftp`, `hono`, `fast-xml-parser`, `tar`, ([#27081](https://github.com/directus/directus/pull/27081) by @br41nslug) `qs` and `defu` dependencies - Fixed schema introspection for MSSQL text fields with max length of -1 to be normalized to null ([#26934](https://github.com/directus/directus/pull/26934) by @begsaquib) - Trimmed leading and trailing spaces from search queries ([#27089](https://github.com/directus/directus/pull/27089) by @robluton) - Fixed promotion of deleted relation returning invalid date time value error ([#27040](https://github.com/directus/directus/pull/27040) by @gaetansenn) - Fixed api building with a `node_modules` folder ([#27067](https://github.com/directus/directus/pull/27067) by @Nitwel) - Fixed MARKETPLACE_REGISTRY env not being passed to registry list call when generating extension settings ([#27076](https://github.com/directus/directus/pull/27076) by @gaetansenn) - Replaced INTERNAL_SERVER_ERROR with SERVICE_UNAVAILABLE for marketplace registry errors and improved error messages. ([#26937](https://github.com/directus/directus/pull/26937) by @eric-pennecot) - **@directus/schema** - Fixed schema introspection for MSSQL text fields with max length of -1 to be normalized to null ([#26934](https://github.com/directus/directus/pull/26934) by @begsaquib) - **@directus/themes** - Fixed api building with a `node_modules` folder ([#27067](https://github.com/directus/directus/pull/27067) by @Nitwel) - **@directus/types** - Fixed api building with a `node_modules` folder ([#27067](https://github.com/directus/directus/pull/27067) by @Nitwel) ###### 📦 Published Versions - `@directus/app@15.9.0` - `@directus/api@35.1.0` - `@directus/composables@11.4.0` - `create-directus-extension@11.0.35` - `@directus/extensions@3.0.24` - `@directus/extensions-registry@3.0.25` - `@directus/extensions-sdk@17.1.3` - `@directus/schema@13.0.8` - `@directus/schema-builder@0.0.19` - `@directus/themes@1.3.2` - `@directus/t _[Truncated at 4000 characters — full notes: https://github.com/directus/directus/releases/tag/v11.17.3]_