Twenty sdk/v2.54.0stable · sdk Released Oct 30, 2026
⚠️ Breaking Change Impact Score: 7/10

Twenty sdk/v2.54.0 — Release Notes & Engineering Impact

Source available — automated, not human-reviewed

Component: sdk · Channel: stable. Automated analysis, not a compatibility certification. How this works.

Analysis updated: 2026-10-31.

Breaking-change evidence from the source

  • Three breaking changes require code updates. `SystemPermissionFlag.CONNECTED_ACCOUNTS` and `APPLICATIONS` are renamed to `USER_APPS` and `WORKSPACE_APPS`. `MarketplaceApp.isVetted` is replaced by `isListed`. `FeatureFlagKey.IS_MESSAGE_CAMPAIGN_ENABLED` is removed; campaigns are now on for all workspaces.
  • ⚠️ Breaking changes - `FeatureFlagKey.IS_MESSAGE_CAMPAIGN_ENABLED` is removed; campaigns are enabled for every workspace by default, so remove any code-path guards on this key. ([#28929](https://github.com/twentyhq/twenty/pull/28929)) by @neo773
Read the original context ↗
Source flags breaking changes — review applicability
📄 .MD
⚡ Executive Summary (TL;DR)

Twenty sdk/v2.54.0. Source highlight: Apps can now declare MCP servers in their manifest using `defineMcpServer` from `twenty-sdk`. Two new helpers — `attachRecordToInboxThread` and `detachRecordFromInboxThread` — let apps and workspace members link records to inbox threads.

Who Does This Impact? (Role-Based Analysis)

💻 Software Engineers & Devs

Check the source notes against the package and APIs you use before upgrading.

📊 Product & Engineering Leads

Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.

⚙️ DevOps & Security

Verify the target version, runtime requirements and rollback procedure in the official documentation.

⚠️ Breaking Changes & Deprecations (2)

  • Three breaking changes require code updates. `SystemPermissionFlag.CONNECTED_ACCOUNTS` and `APPLICATIONS` are renamed to `USER_APPS` and `WORKSPACE_APPS`. `MarketplaceApp.isVetted` is replaced by `isListed`. `FeatureFlagKey.IS_MESSAGE_CAMPAIGN_ENABLED` is removed; campaigns are now on for all workspaces.
  • ⚠️ Breaking changes - `FeatureFlagKey.IS_MESSAGE_CAMPAIGN_ENABLED` is removed; campaigns are enabled for every workspace by default, so remove any code-path guards on this key. ([#28929](https://github.com/twentyhq/twenty/pull/28929)) by @neo773

✨ New Features & Capabilities (6)

  • `attachRecordToInboxThread(threadId, recordId)` and `detachRecordFromInboxThread(threadId, recordId)` are now exported from `twenty-sdk`, letting apps link records to inbox threads with caller-scoped permissions. (#29090)
  • `defineMcpServer({ universalIdentifier, name, label, url, connectionProvider? })` is now exported from `twenty-sdk` — add it to your app manifest to ship an MCP server alongside your connection provider. (#29158)
  • `agentChatChannelThreadIds` now accepts a `filter` argument; channel and open-thread summaries return new `mentionsCount` and `needsInputCount` fields. (#29192)
  • Apps can now receive server webhooks at `/webhooks/server/:appRegistrationId/:functionUniversalIdentifier`, a stable URL apps can construct without a runtime lookup. (#29204)
  • The metadata API exposes `relatedRecordPaths` and `createRelatedRecordPath` when `IS_RELATED_RECORD_PATHS_ENABLED` is enabled. (#29243)
  • Add a Merge with command to record pages (#29155)

🔧 Bug Fixes & Patches (4)

  • `UpdateViewInput` now accepts `translations: [MetadataTranslationOverrideInput!]` on both the GraphQL `updateView` mutation and `PATCH /rest/metadata/views/:id`. (#29095)
  • Menu item description text in `twenty-ui` now renders in the `Light` color token instead of `Secondary`, matching the Figma spec. (#29239)
  • `UpdateViewInput.translations` in the generated `twenty-client-sdk` types now correctly references `MetadataTranslationOverrideInput` instead of the output-only `MetadataTranslation`. (#29264)
  • The join word in keyboard shortcut sequences (e.g. "G then D") in `twenty-ui` now renders in `Light` instead of `Secondary`. (#29275)
📄 View Raw Release Notes (Original Developer Log)
<!-- generated-release-notes v1 --> Apps can now declare MCP servers in their manifest using `defineMcpServer` from `twenty-sdk`. Two new helpers — `attachRecordToInboxThread` and `detachRecordFromInboxThread` — let apps and workspace members link records to inbox threads. Three breaking changes require code updates. `SystemPermissionFlag.CONNECTED_ACCOUNTS` and `APPLICATIONS` are renamed to `USER_APPS` and `WORKSPACE_APPS`. `MarketplaceApp.isVetted` is replaced by `isListed`. `FeatureFlagKey.IS_MESSAGE_CAMPAIGN_ENABLED` is removed; campaigns are now on for all workspaces. `twenty app pull` now restores `package.json` and `yarn.lock` alongside metadata, and can scaffold a new local project when run outside an existing directory. The `--universal-identifier` flag is removed. A type error in the generated client SDK where `UpdateViewInput.translations` referenced an output type is also fixed. ## ⚠️ Breaking changes - `FeatureFlagKey.IS_MESSAGE_CAMPAIGN_ENABLED` is removed; campaigns are enabled for every workspace by default, so remove any code-path guards on this key. ([#28929](https://github.com/twentyhq/twenty/pull/28929)) by @neo773 - Workflow builder workflows now export correctly via `twenty app pull`; the manifest format was extended to preserve builder state that prior versions silently dropped. ([#29053](https://github.com/twentyhq/twenty/pull/29053)) by @FelixMalfait - `MarketplaceApp.isVetted` is removed and replaced with `isListed`; `ApplicationRegistration` and `MarketplaceAppDetail` also drop `isVetted`, so update any code that reads or sets the vetted flag. ([#29187](https://github.com/twentyhq/twenty/pull/29187)) by @martmull - `SystemPermissionFlag.CONNECTED_ACCOUNTS` is renamed to `USER_APPS` and `SystemPermissionFlag.APPLICATIONS` to `WORKSPACE_APPS`; stored universal identifiers are unchanged, so only the names you type in manifests need updating. ([#29194](https://github.com/twentyhq/twenty/pull/29194)) by @ehconitin - `twenty app pull` now scaffolds a new local project from your workspace's custom app when run outside an existing directory. The `--universal-identifier` flag is removed. ([#29207](https://github.com/twentyhq/twenty/pull/29207)) by @Weiko ## 🌟 Highlights - `SystemPermissionFlag.CONNECTED_ACCOUNTS` and `APPLICATIONS` are renamed to `USER_APPS` and `WORKSPACE_APPS` — update every permission declaration in your manifest. ([#29194](https://github.com/twentyhq/twenty/pull/29194)) - `MarketplaceApp.isVetted` is removed; replace it with `isListed` wherever you read or render the marketplace catalog. ([#29187](https://github.com/twentyhq/twenty/pull/29187)) - `FeatureFlagKey.IS_MESSAGE_CAMPAIGN_ENABLED` is gone; campaigns are enabled for all workspaces, so remove any guards on this key. ([#28929](https://github.com/twentyhq/twenty/pull/28929)) - `defineMcpServer` is now exported from `twenty-sdk` — apps can declare an MCP server in their manifest for the first time. ([#29158](https://github.com/twentyhq/twenty/pull/29158)) - `attachRecordToInboxThread` and `detachRecordFromInboxThread` are new exports in `twenty-sdk`, letting apps link any record to an inbox thread. ([#29090](https://github.com/twentyhq/twenty/pull/29090)) - `twenty app pull` now initializes a new local project when run outside an existing directory; the `--universal-identifier` flag is removed. ([#29207](https://github.com/twentyhq/twenty/pull/29207)) ## ✨ New features - `attachRecordToInboxThread(threadId, recordId)` and `detachRecordFromInboxThread(threadId, recordId)` are now exported from `twenty-sdk`, letting apps link records to inbox threads with caller-scoped permissions. ([#29090](https://github.com/twentyhq/twenty/pull/29090)) by @bosiraphael - `UpdateViewInput` now accepts `translations: [MetadataTranslationOverrideInput!]` on both the GraphQL `updateView` mutation and `PATCH /rest/metadata/views/:id`. ([#29095](https://github.com/twentyhq/twenty/pull/29095)) by @ijreilly - `defineMcpServer({ universalIdentifier, name, label, url, connectionProvider? })` is now exported from `twenty-sdk` — add it to your app manifest to ship an MCP server alongside your connection provider. ([#29158](https://github.com/twentyhq/twenty/pull/29158)) by @martmull - `agentChatChannelThreadIds` now accepts a `filter` argument; channel and open-thread summaries return new `mentionsCount` and `needsInputCount` fields. ([#29192](https://github.com/twentyhq/twenty/pull/29192)) by @bosiraphael - Apps can now receive server webhooks at `/webhooks/server/:appRegistrationId/:functionUniversalIdentifier`, a stable URL apps can construct without a runtime lookup. ([#29204](https://github.com/twentyhq/twenty/pull/29204)) by @charlesBochet - The metadata API exposes `relatedRecordPaths` and `createRelatedRecordPath` when `IS_RELATED_RECORD_PATHS_ENABLED` is enabled. ([#29243](https://github.com/twentyhq/twenty/pull/29243)) by @charlesBochet ## 🐛 Bug fixes - Menu item description text in `twenty-ui` now renders in the `Light` color token instead of `Secondary`, matching the Figma spec. ([#29239](https://github.com/twentyhq/twenty/pull/29239)) by @Bonapara - `UpdateViewInput.translations` in the generated `twenty-client-sdk` types now correctly references `MetadataTranslationOverrideInput` instead of the output-only `MetadataTranslation`. ([#29264](https://github.com/twentyhq/twenty/pull/29264)) by @ehconitin - The join word in keyboard shortcut sequences (e.g. "G then D") in `twenty-ui` now renders in `Light` instead of `Secondary`. ([#29275](https://github.com/twentyhq/twenty/pull/29275)) by @Bonapara ## 🔧 Developer & API - The CLI now discovers and bundles React and Twenty UI once from your installed app lockfile rather than re-installing per component preview revision. ([#29018](https://github.com/twentyhq/twenty/pull/29018)) by @Weiko - `twenty app pull` now fetches and writes `dependencies/package.json` and `dependencies/yarn.lock`, restoring the full dependency snapshot alongside metadata. ([#29197](https://github.com/twentyhq/twenty/pull/29197)) by @Weiko <details> <summary>🏗️ Internal changes (5)</summary> - Track unresolved mentions per member ([#28719](https://github.com/twentyhq/twenty/pull/28719)) by @bosiraphael - Pin the current workspace in admin and unify avatars ([#29117](https://github.com/twentyhq/twenty/pull/29117)) by @Bonapara - Add a Merge with command to record pages ([#29155](https://github.com/twentyhq/twenty/pull/29155)) by @FelixMalfait - Store Cloudflare country, region and city on user sessions ([#29196](https://github.com/twentyhq/twenty/pull/29196)) by @FelixMalfait - Add the related record path metadata entity ([#29229](https://github.com/twentyhq/twenty/pull/29229)) by @charlesBochet </details> ## 🎉 New contributors - @apoorv-xs made their first contribution in https://github.com/twentyhq/twenty/pull/29173 - @Tanguy-Magnaudet made their first contribution in https://github.com/twentyhq/twenty/pull/29269 <details> <summary>Full changelog (22 PRs)</summary> - Track unresolved mentions per member ([#28719](https://github.com/twentyhq/twenty/pull/28719)) by @bosiraphael - Remove the IS_MESSAGE_CAMPAIGN_ENABLED feature flag ([#28929](https://github.com/twentyhq/twenty/pull/28929)) by @neo773 - Build frontend shared dependencies from app lockfiles ([#29018](https://github.com/twentyhq/twenty/pull/29018)) by @Weiko - Round-trip workflows built in the workflow builder through the manifest ([#29053](https://github.com/twentyhq/twenty/pull/29053)) by @FelixMalfait - Let apps attach records to inbox conversations ([#29090](https://github.com/twentyhq/twenty/pull/29090)) by @bosiraphael - feat(view): let workspaces declare per-locale view name translations ([#29095](https://github.com/twentyhq/twenty/pull/29095)) by @ijreilly - Pin the current workspace in admin and unify avatars ([#29117](https://github.com/twentyhq/twenty/pull/29117)) by @Bonapara - Add a Merge with command to record pages ([#29155](https://github.com/twentyhq/twenty/pull/29155)) by @FelixMalfait - Let applications declare MCP servers in their manifest ([#29158](https://github.com/twentyhq/twenty/pull/29158)) by @martmull - chore: bump version to 2.54.0 ([#29186](https://github.com/twentyhq/twenty/pull/29186)) by @twenty-pr - [BREAKING_CHANGE] Replace vetted apps with marketplace listing ([#29187](https://github.com/twentyhq/twenty/pull/29187)) by @martmull - Move inbox filters into the list header ([#29192](https://github.com/twentyhq/twenty/pull/29192)) by @bosiraphael - Name the User Apps and Workspace Apps permission flags USER_APPS and WORKSPACE_APPS in the SDK ([#29194](https://github.com/twentyhq/twenty/pull/29194)) by @ehconitin - Store Cloudflare country, region and city on user sessions ([#29196](https://github.com/twentyhq/twenty/pull/29196)) by @FelixMalfait - feat(cli): pull application dependency files ([#29197](https://github.com/twentyhq/twenty/pull/29197)) by @Weiko - Route server webhooks by application registration and function universalIdentifier ([#29204](https://github.com/twentyhq/twenty/pull/29204)) by @charlesBochet - feat(cli): pull existing apps or initialize the workspace custom app ([#29207](https://github.com/twentyhq/twenty/pull/29207)) by @Weiko - Add the related record path metadata entity ([#29229](https://github.com/twentyhq/twenty/pull/29229)) by @charlesBochet - Restore light description color on menu items ([#29239](https://github.com/twentyhq/twenty/pull/29239)) by @Bonapara - Add the related record path metadata API ([#29243](https://github.com/twentyhq/twenty/pull/29243)) by @charlesBochet - Regenerate the SDK metadata client ([#29264](https://github.com/twentyhq/twenty/pull/29264)) by @ehconitin - Restore light join word in keyboard shortcuts ([#29275](https://github.com/twentyhq/twenty/pull/29275)) by @Bonapara </details> **Full Changelog**: https://github.com/twentyhq/twenty/compare/sdk/v2.53.1...sdk/v2.54.0
← Older Version Twenty twenty/v2.54.0