Breaking Changes

Version 12

Breaking changes may require action on your part before upgrading.

Version 12.0.0

Jump to:

License Enforcement

Directus 12 introduces active license enforcement. Self-hosted instances run on the core tier by default. Higher limits and additional features are unlocked by configuring a license. See Licensing for a full explanation.

Post-upgrade Grace Period

The grace period exists to ensure uninterrupted service for existing customers who upgrade before obtaining a license. If your instance is above core tier limits when you upgrade to Directus 12, you enter a 30-day grace period during which everything continues to operate normally. Admins see a reminder on every login.

Existing customers should contact licensing@directus.io to obtain your license. This is the right action for any existing customer who has not yet received a license, or upgrades and sees the grace period reminder.

If you are not an existing customer and do not intend to add a license, reduce usage to within core limits before the grace period ends. Note that free commercial use may be available through the Open Innovation Grant.

If the grace period ends with usage still above core limits, the resolution flow is triggered on next admin login and certain APIs are locked down until resolved.

Locked-Down Behavior

When an instance is over its entitlement limits and the grace period has elapsed:

  • The REST /items, /files, and /flows endpoints are disabled.
  • The GraphQL, WebSockets, and MCP APIs are disabled.
  • /login is blocked for non-admin users.
  • SSO continues to work for admins so the license can be resolved.

No data is deleted as a result of enforcement — access is restricted via deactivation or blocking only.

status Field Added to Collection and User Responses

GET /collections responses now include a status of active or inactive in each item's meta object. Inactive collections are those deactivated by license enforcement.

GET /users responses can now return a new inactive-license status in addition to the existing user statuses (draft, invited, unverified, active, suspended, archived). Users with this status have been deactivated because the instance is over its seat entitlement.

Draft Publishing Workflow

Published items in versioned collections are now locked from direct editing

In collections with content versioning enabled, published items can no longer be edited directly. To make changes, switch to the draft version using the new header action button. The Studio also handles this transition automatically:

  • Creating a new item in a versioned collection opens a virtual draft. The URL takes the form collection/+?version=draft.
  • Editing a published item in a versioned collection automatically switches the editor context to draft mode.

?version=main renamed to ?version=published

The query parameter used to retrieve the published version of an item is now ?version=published. The previous ?version=main value continues to work, so existing integrations are not broken — but new code should use ?version=published.

Collection status replaced with an archived boolean

The collection-level status string has been replaced with an archived boolean for newly created collections. Existing collections that use the string-based status field continue to work as before, so no migration is required.

Publishing a version no longer requires a second confirmation

Publishing a version previously required two confirmations — one in the comparison modal, and a second confirmation dialog after it. The second dialog has been removed: confirming the changes in the comparison modal now publishes the item directly.

Extension Compatibility

The Studio has had a design refresh in Directus 12. Most extensions are unaffected, but theme and interface extensions may need updates. The following notices are grouped by area.

Removed and replaced theme properties

The following theme properties have been removed. Theme extensions that reference them will continue to load but the affected styling will no longer have any effect.

RemovedReplacement
navigation.background, navigation.backgroundAccent, navigation.borderWidth, navigation.borderColorshell.background, shell.backgroundAccent, shell.borderWidth, shell.borderColor
header.background, header.borderWidth, header.borderColorSame shell.* tokens as above
header.headline.foreground, header.headline.fontFamilyRemoved without replacement
headerShadow, sidebarShadow (LayoutConfig, defineLayout())Removed without replacement
boxShadow (header theme rules schema)Removed without replacement
section.toggle.borderWidth, section.toggle.borderColorSection-level border tokens
navigation.project.borderColor, navigation.project.borderWidth, navigation.project.backgroundRemoved without replacement
borderColorFocus, boxShadowHover, boxShadowFocusMigrate to focus ring tokens (see below)

CSS variable migrations:

  • --theme--navigation--* and --theme--header--*--theme--shell--*
  • --theme--form--field--input--border-color-focus and --theme--form--field--input--box-shadow-focus--theme--form--field--input--focus-ring-color

The focus ring is now implemented via the CSS outline property rather than border/box-shadow.

Component deprecations

The following components and props have been deprecated. Existing usage continues to function — extensions will see Volar hints — but should be migrated.

  • <v-resizeable> — migrate to @directus/vue-split-panel or an alternative.
  • <v-breadcrumb> — deprecated globally.
  • <v-drawer>: the subtitle prop, subtitle slot, header:append slot, and actions:append slot. Use the new actions:primary slot for primary call-to-action components.
  • v-button rounded prop — removed. Existing usage continues to function but buttons render as rounded rectangles instead of circles.

Slot deprecations on the header bar

The private view header bar has changed:

  • The #headline slot has been deprecated.
  • The actions:append slot has been deprecated. Existing usage still renders in the secondary-actions zone, but should be migrated to the new actions:primary slot.

Get once-a-month release notes & real‑world code tips...no fluff. 🐰