v12.3.1

Notifuse/notifusev12.3.1Aug 25, 2026by github-actions[bot]

AI Summary

Adds methods to count event listeners and fixes WebSocket heartbeat leaks, GraphQL fragments, and public registration.

Key Highlights

  • New methods to count event listeners
  • Fixed WebSocket heartbeat leak
  • Fixed GraphQL query fragments returning null

New Features

  • countFilterListeners, countActionListeners, and countInitListeners methods
  • Search-first AI tool discovery
  • Caption field for WYSIWYG image drawer
  • Collection name appended to display template

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`