github twentyhq/twenty twenty/v2.53.1

latest releases: twenty/v2.54.0, sdk/v2.54.0, sdk/v2.53.1...
3 hours ago

Notes look like they did before the TipTap migration. Extra padding is gone, and block styles match what BlockNote rendered. The inbox gets two visible upgrades: the sidebar expands each channel into Open, Assigned, Snoozed, and Done views with counts, and an unread badge appears on the inbox navigation item.

Record merging now works on any object, not just Company and Person. The AI chat can merge duplicates directly. Workspace member records have a proper page layout for the first time. A failed spreadsheet import no longer discards your progress β€” confirmed rows are kept, and invalid ones stay editable.

One upgrade step is required. The @azure/msal-node package moves to 7.x; if your workspace uses Microsoft authentication, verify token refresh after upgrading. The isCustom column is removed from agents, skills, views, and indexes β€” a migration runs automatically.

⚠️ Breaking changes

  • @azure/msal-node was upgraded to 7.x. If your workspace uses Microsoft authentication, verify that token refresh works after upgrading. (#28969) by @BOHEUS
  • The isCustom field has been removed from agents, skills, views, indexes, and agent chat channels. A database migration runs automatically on upgrade. (#29052) by @FelixMalfait

🌟 Highlights

  • Note editor padding is back to the tighter BlockNote look; the extra whitespace added in the TipTap migration is gone. (#29109)
  • The inbox sidebar now shows Open, Assigned, Snoozed, and Done views per channel, each with its own count. (#28868)
  • Unread conversation count now appears as a badge on the inbox navigation item. (#29133)
  • Any object's records can now be merged, not just Company and Person. (#29042)
  • A spreadsheet import that hits errors no longer discards your progress; confirmed rows are kept and you can fix the rest. (#28709)
  • Workspace member record pages now show a proper layout instead of a blank page. (#28975)

✨ New features

  • SELECT and MULTI_SELECT form fields in application workflows now resolve correctly across workspaces. (#28658) by @arnavsingh0418
  • The inbox sidebar now expands each channel into Open, Assigned, Snoozed, and Done views, each with its own unread count. (#28868) by @bosiraphael
  • twenty app pull now exports workflows; the CLI writes them as defineWorkflow source files. (#28936) by @FelixMalfait
  • twenty app pull now exports agents and skills; the CLI writes them as defineAgent and defineSkill source files. (#28971) by @FelixMalfait
  • Workspace creation now requires passing a CAPTCHA challenge. (#28977) by @etiennejouan
  • Applications can now mark specific object actions (read, update, delete, destroy) as permanently disabled for all roles. (#28985) by @charlesBochet
  • The Apps preferences page now has separate Apps and Accounts tabs. (#28987) by @ehconitin
  • Creating a custom role now requires the Custom Roles plan entitlement; the paywall applies at creation, not only at assignment. (#29014) by @etiennejouan
  • When a command menu search has no matches, Ask AI is now the first and default fallback option. (#29023) by @Bonapara
  • Records on any object can now be merged, not just Company and Person. (#29042) by @FelixMalfait
  • Email and calendar workflow steps can now be pulled and applied across workspaces using a portable account handle instead of a workspace-specific ID. (#29048) by @FelixMalfait
  • Workflows built in the visual workflow builder can now be pulled and re-applied with twenty app pull / twenty app apply. (#29050) by @FelixMalfait
  • Workspace edits to an app's agents or skills are now kept as overrides and survive the app's next sync. (#29051) by @FelixMalfait
  • AI agents can now preview campaign audience counts, send test emails, and schedule or trigger campaigns directly. (#29072) by @neo773
  • Applications can now mark specific field actions (read, update) as permanently disabled for all roles. (#29084) by @charlesBochet
  • The AI chat can now merge duplicate records, using the same logic as the Merge action in the app. (#29115) by @etiennejouan
  • The inbox navigation badge now shows the count of unread open conversations, displayed as 99+ for large numbers. (#29133) by @bosiraphael
  • Specific email domains can now be exempted from the per-user trial workspace limit. (#29147) by @etiennejouan

πŸ’… Improvements & UX

  • Logic functions running locally now start with the same environment as Lambda, so local test runs behave like deployed ones. (#28599) by @FelixMalfait
  • Per-queue job priorities are replaced by a single shared default, simplifying queue management. (#28924) by @martmull
  • FormFieldRow now accepts a custom content padding value; the existing 8px default is unchanged. (#28934) by @bosiraphael
  • Workspace member record pages now show a full layout with details, tasks, companies, and opportunities instead of a blank page. (#28975) by @Weiko
  • Account rows in App preferences now show the import progress percentage while a first sync is running. (#28997) by @ehconitin
  • The per-member AI allowance in billing settings is now labeled 'Personal AI usage' everywhere. (#29009) by @etiennejouan
  • Object-level disabled permission actions are now enforced when permissions are resolved, not just when grants are written. (#29011) by @charlesBochet
  • Disconnecting or deleting an account now removes all linked app connections in the same account group. (#29015) by @ehconitin
  • The log console Object filter no longer lists objects that never produce audit events. (#29016) by @martmull
  • The CLI OAuth callback page is restored to its original styled card and now waits for the token exchange before reporting success. (#29022) by @Weiko
  • Account sync status badges now appear next to the row menu, matching the legacy list layout. (#29026) by @ehconitin
  • Emails and Calendar tabs on a built-in app page are hidden until the member has at least one account for that provider. (#29027) by @ehconitin
  • Merging records no longer carries over the conflict priority from a previous merge, and hidden field values are no longer lost. (#29029) by @FelixMalfait
  • Legacy plan columns on the billing page now show an 'Early' badge in purple with a tooltip explaining the grandfathered price. (#29030) by @etiennejouan
  • Vetted applications now have auto-upgrade enabled by default on new installs. (#29031) by @martmull
  • The admin user page now has consistent section spacing and a cleaner data export table. (#29041) by @Bonapara
  • Agent model configuration (web search, X search) and the isSystem flag now round-trip correctly through twenty app pull and apply. (#29045) by @FelixMalfait
  • Account and connection list sections now use the standard skeleton loader while loading. (#29057) by @ehconitin
  • The Apps tab no longer shows a red status badge for apps the member has simply not connected. (#29060) by @ehconitin
  • The Apps tab now shows a skeleton loader while installed apps are loading for the first time. (#29064) by @ehconitin
  • xAI web and X search calls are now charged against AI credits, the same as other built-in search tools. (#29082) by @charlesBochet
  • The Accounts tab shows a connect card for each available app when no accounts have been added yet. (#29086) by @ehconitin
  • Removing a blocklisted address now re-imports messages and restarts calendar sync on idle channels. (#29104) by @neo773
  • Note and rich text editor padding is back to what BlockNote had before the TipTap migration. (#29109) by @neo773
  • The per-app preferences page now uses the same header, tab bar, and overview card layout as the workspace apps page. (#29111) by @ehconitin
  • The Apps tab under Apps preferences now uses the same table, search, and ordering as the workspace Installed apps page. (#29112) by @ehconitin
  • Note and rich text editor block styles now match what BlockNote showed before the TipTap migration. (#29113) by @neo773

πŸ› Bug fixes

  • Sync no longer updates the timestamp on live companies when restoring soft-deleted ones during contact auto-creation. (#28579) by @Adithya9605
  • Activity link options are disabled while existing links are loading, preventing duplicate links from being created. (#28592) by @saltcoffee
  • Safari no longer shows an error toast when a network request is aborted by rapid keystrokes in composer fields. (#28664) by @siddiqueirshad
  • Spreadsheet imports now survive partial failures: confirmed rows are kept and invalid ones remain editable for correction. (#28709) by @grootbro
  • HTTP workflow requests now read the Content-Type header case-insensitively, and bodies with a value of false or 0 are no longer dropped. (#28738) by @grootbro
  • Records inserted or updated in the optimistic cache now respect all declared sort fields, not just the first one. (#28741) by @grootbro
  • Workflow version sync no longer stops when a workspace's version map is stale and missing a version that already exists. (#28743) by @grootbro
  • Phone numbers with letters or impossible country lengths are now rejected instead of being silently truncated. (#28770) by @Prashaxt
  • Pressing Enter on the focused Continue button during onboarding now advances to the next step. (#28795) by @ahmed-aneem
  • Each app in the log console App filter now shows its own logo instead of a generic icon. (#29005) by @martmull
  • Organization plan fallback prices on the billing page now correctly show $49/month and $39/month instead of $25/$19. (#29024) by @etiennejouan
  • Installing an app that grants a recently added permission flag no longer fails on older workspaces that predate that flag. (#29046) by @FelixMalfait
  • AI campaign drafts now use correct variable names such as {{name.firstName}} that the server actually accepts. (#29070) by @neo773
  • Long campaign email bodies can now be scrolled; they were previously clipped and lower blocks were unreachable. (#29074) by @neo773
  • The CLI now prints per-entity validation error details when twenty app apply fails, instead of a generic message. (#29078) by @etiennejouan
  • Changing your profile email address now applies the same one-minute cooldown as the verification email resend flow. (#29093) by @charlesBochet
  • Members holding an application's default role no longer get full permissions on objects where certain actions are disabled. (#29103) by @charlesBochet
  • OAuth authorization state values up to 4096 characters are now accepted; long MCP client state strings were previously rejected. (#29108) by @ehconitin
  • Unknown currency codes and lowercase codes (e.g. 'XYZ', 'usd') are now rejected on write instead of being stored silently. (#29126) by @etiennejouan

πŸ”§ Developer & API

  • Workspaces can now register external MCP servers as metadata (name, URL, connection provider, isActive) for use by AI tools. (#28597) by @abdulrahmancodes
  • App message channels can now declare folders (e.g. Front inboxes, Slack channels) that members choose to import in Settings. (#28986) by @FelixMalfait
  • A new billingPlans GraphQL query is available. listPlans is deprecated; use billingPlans instead. (#29003) by @FelixMalfait
  • twenty app apply no longer deletes workspace Custom application entities (UI-built agents, workflows) unless --prune is passed explicitly. (#29047) by @FelixMalfait
  • IS_DEFERRED_WORKSPACE_MIGRATION_ACTIONS_ENABLED has been removed; deferred workspace migration actions are now always on. (#29081) by @charlesBochet
  • Share the inbox SDK helpers with front components (#29088) by @bosiraphael
  • A new feature-flag:update workspace command lets admins set a feature flag value on one, many, or all workspaces. (#29098) by @martmull
  • Worker job logs now include workspace ID, application ID, and queue wait time per job, enabling per-tenant queue monitoring. (#29131) by @martmull
πŸ—οΈ Internal changes (73)
  • Refresh pricing plans, comparison table and compare pages (#28629) by @etiennejouan
  • Give integration waits a generous budget and retry cold installs (#28729) by @martmull
  • Share Lambda connection options (#28854) by @Weiko
  • Share frontend vendor and shim build helpers (#28855) by @Weiko
  • Add conversation assistant participation field (#28933) by @bosiraphael
  • Attribute evaluation usage to its caller (#28935) by @bosiraphael
  • Batch chat recipient permission checks (#28937) by @bosiraphael
  • chore(security): bump vite 8 to 8.3.5 (#28956) by @BOHEUS
  • chore(security): bump ip-address to 10.7.4 (#28957) by @BOHEUS
  • chore(security): bump zod 4 to 4.6.7 (#28959) by @BOHEUS
  • chore(security): refresh Scalar to drop @ai-sdk/provider-utils 4.0.5 (#28965) by @BOHEUS
  • chore(security): bump sanitize-html to 2.18.0 (#28966) by @BOHEUS
  • chore(security): bump @graphql-tools/utils to 12.1.0 (#28970) by @BOHEUS
  • Rename seed dependencies to standard application dependencies (#28981) by @Weiko
  • Bump NestJS to 12 (#28988) by @charlesBochet
  • fix(server): drop twenty-server import from version bump script (#28989) by @etiennejouan
  • Fix two integration test flakes: msw passthrough EINVAL and orphaned messages (#28993) by @martmull
  • Name the local dependency folder after a hash of the yarn.lock checksum (#28995) by @prastoin
  • Ship the yarn.lock in published app packages and store it at install (#28998) by @prastoin
  • fix(server): pin workspace app twenty-ui to the release already on npm (#29000) by @etiennejouan
  • Validate application dependency checksums against the stored files (#29001) by @prastoin
  • Bump Teams app to 1.0.0 (#29004) by @ehconitin
  • Fix twenty-ui version expectation in default application package spec (#29010) by @prastoin
  • fix(sdk): regenerate metadata client for billingPlans (#29013) by @etiennejouan
  • Compile one frontend component with bounded resources (#29017) by @Weiko
  • Run mintlify through npx and drop its resolutions (#29020) by @charlesBochet
  • Open i18n pull requests with the Twenty PR app (#29028) by @prastoin
  • Stop integration tests from depending on seed companies other suites delete (#29033) by @charlesBochet
  • Stop using writability, sharing reach and non-private readability in favor of disabled object permission actions (#29034) by @charlesBochet
  • Read the Twenty PR app key from repo secrets (#29036) by @prastoin
  • i18n - website translations (#29037) by @twenty-pr
  • i18n - translations (#29038) by @twenty-pr
  • i18n - website translations (#29039) by @twenty-pr
  • i18n - translations (#29040) by @twenty-pr
  • i18n - docs translations (#29043) by @twenty-pr
  • Resolve src imports in example app tests on vite 8.1 (#29044) by @FelixMalfait
  • i18n - translations (#29049) by @twenty-pr
  • Bump nx to 23.3.1 and drop its resolutions (#29054) by @charlesBochet
  • i18n - translations (#29055) by @twenty-pr
  • i18n - docs translations (#29058) by @twenty-pr
  • Remove the as any casts in file-upload.controller.ts (#29061) by @twenty-pr-author
  • Rename twenty-mcp-helper.const.ts to twenty-mcp-helper.constant.ts (#29062) by @twenty-pr-author
  • i18n - translations (#29063) by @twenty-pr
  • Let callers run deferred workspace migration actions in process (#29066) by @charlesBochet
  • i18n - docs translations (#29068) by @twenty-pr
  • i18n - translations (#29069) by @twenty-pr
  • i18n - translations (#29071) by @twenty-pr
  • Bump sanitize-html to 2.18.1 and @graphql-tools/schema to 10.1.5 (#29073) by @charlesBochet
  • Clear zod and react-router advisories in twenty-apps lockfiles (#29075) by @charlesBochet
  • i18n - translations (#29076) by @twenty-pr
  • Bump googleapis to 188 and drop the googleapis-common resolution (#29077) by @charlesBochet
  • i18n - translations (#29079) by @twenty-pr
  • Bump @nestjs/cli and @nestjs/schematics to 12 and drop the @angular-devkit/core resolution (#29080) by @charlesBochet
  • i18n - translations (#29087) by @twenty-pr
  • i18n - docs translations (#29092) by @twenty-pr
  • i18n - translations (#29094) by @twenty-pr
  • Bump graphql-codegen to 7 and drop @graphql-tools/utils 11 (#29096) by @charlesBochet
  • Move call-recorder to twenty-ui 2.x (#29100) by @charlesBochet
  • Export agent modelConfiguration and isSystem for twenty app pull (#29102) by @charlesBochet
  • Move fireflies to twenty-ui 2.x (#29105) by @charlesBochet
  • Move companion to twenty-ui 2.x (#29106) by @charlesBochet
  • Drop the @types/qs resolution (#29107) by @charlesBochet
  • Move granola to twenty-ui 2.x (#29110) by @charlesBochet
  • Add website release notes for 2.41 to 2.52 (#29120) by @Bonapara
  • i18n - website translations (#29122) by @twenty-pr
  • chore(security): refresh http-cache-semantics to 4.3.0 and qs to 6.16.1 in lockfiles (#29123) by @charlesBochet
  • Fix the Dropdown gallery story Shift+Tab race (#29125) by @bosiraphael
  • i18n - docs translations (#29130) by @twenty-pr
  • Move the validation error formatter next to its exception (#29135) by @FelixMalfait
  • i18n - translations (#29136) by @twenty-pr
  • i18n - translations (#29146) by @twenty-pr
  • i18n - translations (#29153) by @twenty-pr
  • i18n - docs translations (#29154) by @twenty-pr

πŸŽ‰ New contributors

Full changelog (148 PRs)

Full Changelog: twenty/v2.52.0...twenty/v2.53.1

Don't miss a new twenty release

NewReleases is sending notifications on new releases.