v12.3.1

stackblitz-labs/bolt.diyv12.3.1Aug 25, 2026by github-actions[bot]

AI Summary

This release focuses on bug fixes and optimizations across the API, app, and storage drivers, addressing WebSocket listener leaks, GraphQL fragment issues, and subscription management in the SDK.

Key Highlights

  • Fixed WebSocket heartbeat leaking a listener on each ping when a client failed to respond
  • Fixed GraphQL query fragments returning null fields
  • Fixed public registration verification using the provided email instead of the stored one
  • Added event listener counting methods to the emitter
  • Fixed SDK `unsubscribe()` not removing subscriptions

New Features

  • Added `countFilterListeners`, `countActionListeners`, and `countInitListeners` methods to the emitter

Full Release Notes

### ✨ New Features & Improvements

- **@directus/api**
  - Added `countFilterListeners`, `countActionListeners`, and `countInitListeners` methods to the `emitter`, exposing the number of registered handlers for each event ([#28117](https://github.com/directus/directus/pull/28117) by @ComfortablyCoding)

### 🐛 Bug Fixes & Optimizations

- **@directus/app**
  - Fixed MCP OAuth clients settings pages concatenating breadcrumbs into the page title ([#28115](https://github.com/directus/directus/pull/28115) by @MHJahanbakhsh)
- **@directus/api**
  - Fixed the WebSocket heartbeat leaking a `websocket.message` listener on each ping when a client failed to respond in time ([#28117](https://github.com/directus/directus/pull/28117) by @ComfortablyCoding)
  - Fixed GraphQL query fragments returning null fields ([#28128](https://github.com/directus/directus/pull/28128) by @ComfortablyCoding)
  - Fixed public registration verification using the provided email instead of the stored one ([#28144](https://github.com/directus/directus/pull/28144) by @br41nslug)
  - Removed `user_created` and `date_created` for `update` from recommended permissions for `directus_shares` ([#28145](https://github.com/directus/directus/pull/28145) by @br41nslug)
  - Updated storage driver dependencies ([#28119](https://github.com/directus/directus/pull/28119) by @ComfortablyCoding)
- **@directus/cli**
  - Stripped `project_id` when pulling settings, so a sync no longer copies one instance's identity onto another ([#28132](https://github.com/directus/directus/pull/28132) by @lazerg)
- **@directus/sdk**
  - Fixed `unsubscribe()` not removing subscriptions, causing them to persist across reconnects and accumulate for the lifetime of the client ([#28117](https://github.com/directus/directus/pull/28117) by @ComfortablyCoding)
- **@directus/system-data**
  - Removed `user_created` and `date_created` for `update` from recommended permissions for `directus_shares` ([#28145](https://github.com/directus/directus/pull/28145) by @br41nslug)
- **@directus/storage-driver-s3**
  - Updated storage driver dependencies ([#28119](https://github.com/directus/directus/pull/28119) by @ComfortablyCoding)
- **@directus/storage-driver-gcs**
  - Updated storage driver dependencies ([#28119](https://github.com/directus/directus/pull/28119) by @ComfortablyCoding)
- **@directus/storage-driver-azure**
  - Updated storage driver dependencies ([#28119](https://github.com/directus/directus/pull/28119) by @ComfortablyCoding)
- **@directus/storage-driver-supabase**
  - Updated storage driver dependencies ([#28119](https://github.com/directus/directus/pull/28119) by @ComfortablyCoding)

### 📦 Published Versions

- `@directus/app@17.1.1`
- `@directus/api@39.1.0`
- `@directus/cli@12.2.1`
- `@directus/composables@11.6.2`
- `create-directus-extension@12.1.4`
- `@directus/env@6.2.2`
- `@directus/extensions@4.0.4`
- `@directus/extensions-sdk@18.0.4`
- `@directus/memory@4.0.4`
- `@directus/pressure@4.0.4`
- `@directus/storage-driver-azure@13.0.4`
- `@directus/storage-driver-cloudinary@14.0.1`
- `@directus/storage-driver-gcs@13.0.4`
- `@directus/storage-driver-s3@14.0.1`
- `@directus/storage-driver-supabase@5.0.1`
- `@directus/system-data@4.6.1`
- `@directus/themes@2.0.4`
- `@directus/utils@13.5.4`
- `@directus/validation@3.0.4`
- `@directus/sdk@25.0.1`