⚠️ 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
⚡ 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
Newer Version →
Latest Tracked Version ✓