โ ๏ธ Breaking Change
Impact Score: 7/10
Twenty twenty/v2.52.0 โ Release Notes & Engineering Impact
Source available โ automated, not human-reviewed
Component: twenty ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.
Analysis updated: 2026-10-31.
Breaking-change evidence from the source
โ ๏ธ Breaking changes - Let apps connect accounts through their own authorization flow ([#28672](https://github.com/twentyhq/twenty/pull/28672)) by @FelixMalfait
โก Executive Summary (TL;DR)
Twenty twenty/v2.52.0. Source highlight: Let apps connect accounts through their own authorization flow (#28672)
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 (1)
- โ ๏ธ Breaking changes - Let apps connect accounts through their own authorization flow ([#28672](https://github.com/twentyhq/twenty/pull/28672)) by @FelixMalfait
โจ New Features & Capabilities (6)
- feat(billing): lead the Plans page comparison with plan essentials (#28843)
- Add global chat commands (#28567)
- Add batch approval review components (#28684)
- Remove IS_APPLICATION_MONITORING_ENABLED feature flag (#28688)
- Add email approval review (#28691)
- Remove async CSV export feature flag (#28717)
โก Performance & Enhancements (6)
- Let members manage personal app connections from App preferences (#28418)
- Keep code step outputs when the code is saved and remove the link output schema (#28432)
- Pass fieldMetadataId in if/else workflow node (#28443)
- Report a superseded session as superseded when its revocation races the request (#28462)
- Link a sent email to the record it was sent from (#28554)
- Show only workspace-shared connections in app settings (#28556)
๐ง Bug Fixes & Patches (6)
- Fix app sync recreating search rows that already exist (#28494)
- Fix workspace data export S3 upload and show exports on the admin user page (#28706)
- Fix bulk update of emptied list fields, full name pasting and address separators (#28752)
- Fix follow-redirects in the Workspace upgrade snapshot (#28852)
- Fix orphaned case study card on partner profiles (#28913)
- Fix integration specs that break on suites run before them in the same shard (#28921)
๐ View Raw Release Notes (Original Developer Log)
<!-- generated-release-notes v1 -->
## โ ๏ธ Breaking changes
- Let apps connect accounts through their own authorization flow ([#28672](https://github.com/twentyhq/twenty/pull/28672)) by @FelixMalfait
- chore(security): bump vite to 8.3.5 in the app lockfiles ([#28798](https://github.com/twentyhq/twenty/pull/28798)) by @mabdullahabaid
- chore(security): bump twenty-companion vite to 7.3.7 ([#28801](https://github.com/twentyhq/twenty/pull/28801)) by @mabdullahabaid
- chore(security): bump undici in the app lockfiles ([#28802](https://github.com/twentyhq/twenty/pull/28802)) by @mabdullahabaid
- chore(security): bump undici in the root lockfile ([#28805](https://github.com/twentyhq/twenty/pull/28805)) by @mabdullahabaid
- chore(security): bump zod to 4.6.7 in the fathom, fireflies and granola apps ([#28807](https://github.com/twentyhq/twenty/pull/28807)) by @mabdullahabaid
## ๐
Improvements & UX
- feat(billing): lead the Plans page comparison with plan essentials ([#28843](https://github.com/twentyhq/twenty/pull/28843)) by @etiennejouan
- Let members manage personal app connections from App preferences ([#28418](https://github.com/twentyhq/twenty/pull/28418)) by @ehconitin
- Keep code step outputs when the code is saved and remove the link output schema ([#28432](https://github.com/twentyhq/twenty/pull/28432)) by @ghazy2001
- Pass fieldMetadataId in if/else workflow node ([#28443](https://github.com/twentyhq/twenty/pull/28443)) by @BOHEUS
- Report a superseded session as superseded when its revocation races the request ([#28462](https://github.com/twentyhq/twenty/pull/28462)) by @DamienFoulon
- Fix app sync recreating search rows that already exist ([#28494](https://github.com/twentyhq/twenty/pull/28494)) by @jackeddisciple
- Link a sent email to the record it was sent from ([#28554](https://github.com/twentyhq/twenty/pull/28554)) by @FelixMalfait
- Show only workspace-shared connections in app settings ([#28556](https://github.com/twentyhq/twenty/pull/28556)) by @ehconitin
- Build inbox thread details and sharing ([#28565](https://github.com/twentyhq/twenty/pull/28565)) by @bosiraphael
- Add global chat commands ([#28567](https://github.com/twentyhq/twenty/pull/28567)) by @bosiraphael
- Move the Slack app to twenty-ui 2.x and use its Skeleton ([#28604](https://github.com/twentyhq/twenty/pull/28604)) by @abdulrahmancodes
- Migrate the metadata tools to @DefineTool ([#28631](https://github.com/twentyhq/twenty/pull/28631)) by @prastoin
- Clarify DPA, AI and access answers in the Legal FAQ and pricing page ([#28640](https://github.com/twentyhq/twenty/pull/28640)) by @ijreilly
- Migrate multiple record pickers ([#28643](https://github.com/twentyhq/twenty/pull/28643)) by @bosiraphael
- Use twenty-ui date picker in the frontend ([#28649](https://github.com/twentyhq/twenty/pull/28649)) by @bosiraphael
- Allow npm publishing from protected release branches ([#28677](https://github.com/twentyhq/twenty/pull/28677)) by @FelixMalfait
- Mask restricted calendar events and messages in nested relations and groupBy ([#28679](https://github.com/twentyhq/twenty/pull/28679)) by @charlesBochet
- Add batch approval review components ([#28684](https://github.com/twentyhq/twenty/pull/28684)) by @bosiraphael
- Bring back toggles, nested blocks, deeper headings and table controls in rich text notes ([#28687](https://github.com/twentyhq/twenty/pull/28687)) by @neo773
- Remove IS_APPLICATION_MONITORING_ENABLED feature flag ([#28688](https://github.com/twentyhq/twenty/pull/28688)) by @martmull
- Remove the main sources of server integration shard flakiness ([#28689](https://github.com/twentyhq/twenty/pull/28689)) by @martmull
- Add email approval review ([#28691](https://github.com/twentyhq/twenty/pull/28691)) by @bosiraphael
- Give the rebuilt user auth context its full workspace ([#28692](https://github.com/twentyhq/twenty/pull/28692)) by @prastoin
- Stabilize frontend Storybook interactions ([#28693](https://github.com/twentyhq/twenty/pull/28693)) by @bosiraphael
- Keep non-email participant links when a person's emails change ([#28694](https://github.com/twentyhq/twenty/pull/28694)) by @FelixMalfait
- Match app channel participants on a declared person field ([#28696](https://github.com/twentyhq/twenty/pull/28696)) by @FelixMalfait
- Backfill frontend dependencies for existing Workspace apps ([#28698](https://github.com/twentyhq/twenty/pull/28698)) by @Weiko
- Show weekly AI user credits in AI chat ([#28700](https://github.com/twentyhq/twenty/pull/28700)) by @etiennejouan
- Balance server integration shards by recorded duration ([#28702](https://github.com/twentyhq/twenty/pull/28702)) by @neo773
- Let usage limit defaults override the plan while trialing ([#28703](https://github.com/twentyhq/twenty/pull/28703)) by @etiennejouan
- Bring back row and column controls in rich text tables ([#28704](https://github.com/twentyhq/twenty/pull/28704)) by @neo773
- Keep app uninstall hook failures out of Sentry ([#28705](https://github.com/twentyhq/twenty/pull/28705)) by @charlesBochet
- Fix workspace data export S3 upload and show exports on the admin user page ([#28706](https://github.com/twentyhq/twenty/pull/28706)) by @charlesBochet
- Keep sensitive-path maintainer approvals valid after pushes ([#28707](https://github.com/twentyhq/twenty/pull/28707)) by @FelixMalfait
- Replace the generic multi-item field inputs with composable bricks ([#28708](https://github.com/twentyhq/twenty/pull/28708)) by @charlesBochet
- Keep the front metadata store consistent across out-of-order updates ([#28711](https://github.com/twentyhq/twenty/pull/28711)) by @charlesBochet
- Refresh Resources menu previews and the homepage logo row ([#28713](https://github.com/twentyhq/twenty/pull/28713)) by @Bonapara
- Close the inbox conversation pane ([#28716](https://github.com/twentyhq/twenty/pull/28716)) by @bosiraphael
- Remove async CSV export feature flag ([#28717](https://github.com/twentyhq/twenty/pull/28717)) by @Weiko
- Hide app settings tab bar when General is the only tab ([#28720](https://github.com/twentyhq/twenty/pull/28720)) by @martmull
- Redesign the docs to match the website ([#28733](https://github.com/twentyhq/twenty/pull/28733)) by @Bonapara
- Edit list values and link labels in place in multi-item cell editors ([#28734](https://github.com/twentyhq/twenty/pull/28734)) by @charlesBochet
- Show the app error fallback for errors React Router catches ([#28747](https://github.com/twentyhq/twenty/pull/28747)) by @charlesBochet
- Restore JSX attributes Crowdin translated in docs pages ([#28749](https://github.com/twentyhq/twenty/pull/28749)) by @Bonapara
- Apply workflow step edits to the draft's own logic function or agent ([#28750](https://github.com/twentyhq/twenty/pull/28750)) by @charlesBochet
- Split the multi-item draft hook into focused bricks ([#28751](https://github.com/twentyhq/twenty/pull/28751)) by @charlesBochet
- Fix bulk update of emptied list fields, full name pasting and address separators ([#28752](https://github.com/twentyhq/twenty/pull/28752)) by @charlesBochet
- Edit emails and array values as lists in the record form ([#28753](https://github.com/twentyhq/twenty/pull/28753)) by @charlesBochet
- Show partial domain setup on the email channel list ([#28754](https://github.com/twentyhq/twenty/pull/28754)) by @neo773
- Add an Email Channels docs page ([#28755](https://github.com/twentyhq/twenty/pull/28755)) by @neo773
- Edit phones, links, files and full name in the record form ([#28757](https://github.com/twentyhq/twenty/pull/28757)) by @charlesBochet
- Show address details on demand in the record form ([#28765](https://github.com/twentyhq/twenty/pull/28765)) by @charlesBochet
- Infer the code step input schema in the debounced save so keystrokes can't be saved out of order ([#28766](https://github.com/twentyhq/twenty/pull/28766)) by @charlesBochet
- Edit wrapping text in a text area and show the domain favicon in link inputs ([#28767](https://github.com/twentyhq/twenty/pull/28767)) by @charlesBochet
- Show a blue border on keyboard focus in form inputs, pickers and selects ([#28769](https://github.com/twentyhq/twenty/pull/28769)) by @charlesBochet
- Edit the full name in one input and show address details on demand in cell editors ([#28773](https://github.com/twentyhq/twenty/pull/28773)) by @charlesBochet
- Route any casing of host-sanitized props to their canonical key in front component host elements ([#28774](https://github.com/twentyhq/twenty/pull/28774)) by @charlesBochet
- Suggest addresses as you type in the record form address ([#28775](https://github.com/twentyhq/twenty/pull/28775)) by @charlesBochet
- Upload files by dropping them on the files field input ([#28777](https://github.com/twentyhq/twenty/pull/28777)) by @charlesBochet
- Require a first-person session for admin panel actions ([#28779](https://github.com/twentyhq/twenty/pull/28779)) by @charlesBochet
- Backfill record form widgets for files fields ([#28780](https://github.com/twentyhq/twenty/pull/28780)) by @charlesBochet
- Apply field read permissions to timeline activity properties ([#28782](https://github.com/twentyhq/twenty/pull/28782)) by @charlesBochet
- Block bulk update while a field input is in error ([#28783](https://github.com/twentyhq/twenty/pull/28783)) by @charlesBochet
- Resend requests rejected because a sign-in superseded their session ([#28784](https://github.com/twentyhq/twenty/pull/28784)) by @charlesBochet
- Make the True/False control full width in record forms ([#28787](https://github.com/twentyhq/twenty/pull/28787)) by @charlesBochet
- Ignore isSecret changes on existing application and server variables ([#28800](https://github.com/twentyhq/twenty/pull/28800)) by @prastoin
- Reject changes to non-comparable flat entity properties ([#28803](https://github.com/twentyhq/twenty/pull/28803)) by @prastoin
- Initialize application variable value at creation instead of in the manifest ([#28808](https://github.com/twentyhq/twenty/pull/28808)) by @prastoin
- Add configurable tags when creating Lambda functions ([#28810](https://github.com/twentyhq/twenty/pull/28810)) by @FelixMalfait
- Document that app development is only supported on Unix systems ([#28817](https://github.com/twentyhq/twenty/pull/28817)) by @prastoin
- Let the Teams assistant work with CRM records ([#28832](https://github.com/twentyhq/twenty/pull/28832)) by @abdulrahmancodes
- Give the Teams assistant the earlier turns of the conversation ([#28833](https://github.com/twentyhq/twenty/pull/28833)) by @abdulrahmancodes
- Remove the `as any` casts in 2 files of modules/ui/input/components/internal/date/components ([#28838](https://github.com/twentyhq/twenty/pull/28838)) by @twenty-pr-author
- Application monitoring: legend totals and credits by operation type ([#28847](https://github.com/twentyhq/twenty/pull/28847)) by @martmull
- Fix follow-redirects in the Workspace upgrade snapshot ([#28852](https://github.com/twentyhq/twenty/pull/28852)) by @Weiko
- Seed Workspace applications with frontend dependencies ([#28853](https://github.com/twentyhq/twenty/pull/28853)) by @Weiko
- Remove the free trial for users already in 2 trial workspaces ([#28859](https://github.com/twentyhq/twenty/pull/28859)) by @etiennejouan
- Prebundle rich text editor extensions for Storybook ([#28862](https://github.com/twentyhq/twenty/pull/28862)) by @bosiraphael
- Add merge proposal review ([#28863](https://github.com/twentyhq/twenty/pull/28863)) by @bosiraphael
- Add scheduling and time-picker UI ([#28865](https://github.com/twentyhq/twenty/pull/28865)) by @bosiraphael
- Fix orphaned case study card on partner profiles ([#28913](https://github.com/twentyhq/twenty/pull/28913)) by @ijreilly
- Stop deleting provider domains Twenty did not create ([#28914](https://github.com/twentyhq/twenty/pull/28914)) by @neo773
- Serve campaign unsubscribe and tracked links on links.domain ([#28915](https://github.com/twentyhq/twenty/pull/28915)) by @neo773
- Add glass and metal materials to the halftone studio ([#28918](https://github.com/twentyhq/twenty/pull/28918)) by @Bonapara
- Let application workflows send email and create calendar events ([#28920](https://github.com/twentyhq/twenty/pull/28920)) by @FelixMalfait
- Fix integration specs that break on suites run before them in the same shard ([#28921](https://github.com/twentyhq/twenty/pull/28921)) by @etiennejouan
- Skip morph relation targets the role cannot read ([#28922](https://github.com/twentyhq/twenty/pull/28922)) by @neo773
- Skip application lifecycle scripts when building dependency layers ([#28926](https://github.com/twentyhq/twenty/pull/28926)) by @prastoin
- Let the workspace custom application's workflows call other apps' actions ([#28927](https://github.com/twentyhq/twenty/pull/28927)) by @FelixMalfait
- Fill the single full name input in the create record e2e test ([#28928](https://github.com/twentyhq/twenty/pull/28928)) by @charlesBochet
- Show the Admin role in the roles list again ([#28946](https://github.com/twentyhq/twenty/pull/28946)) by @prastoin
- Only offer junction targets the role can update in relation pickers ([#28947](https://github.com/twentyhq/twenty/pull/28947)) by @charlesBochet
- Fit the AI chat user credits banner on one line ([#28949](https://github.com/twentyhq/twenty/pull/28949)) by @etiennejouan
- Keep Avatar fallback icons within small avatars ([#28973](https://github.com/twentyhq/twenty/pull/28973)) by @bosiraphael
- Add admin status indicator to workspace users in admin panel ([#28974](https://github.com/twentyhq/twenty/pull/28974)) by @martmull
- Reject object names that are not stable under camelCase ([#28978](https://github.com/twentyhq/twenty/pull/28978)) by @FelixMalfait
- Restore native blur in front component menus ([#28980](https://github.com/twentyhq/twenty/pull/28980)) by @bosiraphael
- Add Teams app to Microsoft publisher domain association ([#28983](https://github.com/twentyhq/twenty/pull/28983)) by @neo773
- Match AI chat user bubbles to the design ([#28984](https://github.com/twentyhq/twenty/pull/28984)) by @bosiraphael
## ๐ Bug fixes
- fix(front): pin record table columns with logical insets so they work in RTL ([#28379](https://github.com/twentyhq/twenty/pull/28379)) by @almoghazaz-cell
- fix(metadata-store): adopt new collection hash on replaceDraft when data is unchanged ([#28412](https://github.com/twentyhq/twenty/pull/28412)) by @ghazy2001
- fix(record-form): block submission when field input has validation error ([#28425](https://github.com/twentyhq/twenty/pull/28425)) by @ghazy2001
- fix(front): keep cached relation picker results clickable while Search refreshes ([#28458](https://github.com/twentyhq/twenty/pull/28458)) by @lineico
- fix(slack): show one content-shaped skeleton while the settings tab loads ([#28493](https://github.com/twentyhq/twenty/pull/28493)) by @abdulrahmancodes
- fix(twenty-shared): promote formatBytes to the next unit when rounding reaches 1024 ([#28502](https://github.com/twentyhq/twenty/pull/28502)) by @RaphaelFakhri
- fix(onboarding): add aria-labels to invite team email inputs ([#28748](https://github.com/twentyhq/twenty/pull/28748)) by @zacyungblut
## ๐ง Developer & API
- Move app tooling consumers to the standalone CLI ([#28182](https://github.com/twentyhq/twenty/pull/28182)) by @Weiko
- Remove the legacy SDK CLI and retire create-twenty-app ([#28183](https://github.com/twentyhq/twenty/pull/28183)) by @Weiko
- Let Granola uninstall when no API key was saved ([#28680](https://github.com/twentyhq/twenty/pull/28680)) by @charlesBochet
- Clean up remaining legacy SDK CLI references ([#28721](https://github.com/twentyhq/twenty/pull/28721)) by @Weiko
- Fix docs translations for Crowdin CLI 5 ([#28725](https://github.com/twentyhq/twenty/pull/28725)) by @Weiko
- Delete logic function Lambdas and SDK layers on workspace deletion ([#28813](https://github.com/twentyhq/twenty/pull/28813)) by @prastoin
- Ignore the CLI patch version in the scaffolded engines.twenty range ([#28814](https://github.com/twentyhq/twenty/pull/28814)) by @prastoin
- Rename 9 server files to the singular suffix in src/engine/core-modules/open-api/utils ([#28839](https://github.com/twentyhq/twenty/pull/28839)) by @twenty-pr-author
- Bump graphql to 16.14.2 and graphql-yoga to 5 ([#28976](https://github.com/twentyhq/twenty/pull/28976)) by @charlesBochet
<details>
<summary>๐๏ธ Internal changes (14)</summary>
- docs: Introduce third-party marketplace vetting criteria ([#28457](https://github.com/twentyhq/twenty/pull/28457)) by @martmull
- chore(security): bump dompurify to 3.4.17 ([#28772](https://github.com/twentyhq/twenty/pull/28772)) by @mabdullahabaid
- chore(security): bump next to 16.4.1 ([#28778](https://github.com/twentyhq/twenty/pull/28778)) by @mabdullahabaid
- chore(security): bump storybook to 10.6.3 ([#28790](https://github.com/twentyhq/twenty/pull/28790)) by @mabdullahabaid
- chore(security): bump follow-redirects to 1.16.1 everywhere ([#28792](https://github.com/twentyhq/twenty/pull/28792)) by @mabdullahabaid
- chore(security): bump verdaccio to 6.10.7 and drop its two resolutions ([#28809](https://github.com/twentyhq/twenty/pull/28809)) by @mabdullahabaid
- chore(security): bump fast-uri to 3.1.9 ([#28952](https://github.com/twentyhq/twenty/pull/28952)) by @BOHEUS
- chore(security): bump @graphql-tools/executor-legacy-ws to 1.1.39 ([#28953](https://github.com/twentyhq/twenty/pull/28953)) by @BOHEUS
- chore(security): bump markdown-it to 14.3.3 ([#28954](https://github.com/twentyhq/twenty/pull/28954)) by @BOHEUS
- chore(security): bump postcss-selector-parser to 6.1.5 ([#28955](https://github.com/twentyhq/twenty/pull/28955)) by @BOHEUS
- chore(security): bump body-parser to 1.20.9 and 2.4.0 ([#28958](https://github.com/twentyhq/twenty/pull/28958)) by @BOHEUS
- chore(security): bump vitest to 4.1.12 ([#28960](https://github.com/twentyhq/twenty/pull/28960)) by @BOHEUS
- chore(security): bump electron to 44.9.1 ([#28967](https://github.com/twentyhq/twenty/pull/28967)) by @BOHEUS
- chore(security): bump nodemailer to 10.2.1 ([#28968](https://github.com/twentyhq/twenty/pull/28968)) by @BOHEUS
</details>
## ๐ New contributors
- @ghazy2001 made their first contribution in https://github.com/twentyhq/twenty/pull/28412
- @zacyungblut made their first contribution in https://github.com/twentyhq/twenty/pull/28748
- @lineico made their first contribution in https://github.com/twentyhq/twenty/pull/28458
- @DamienFoulon made their first contribution in https://github.com/twentyhq/twenty/pull/28462
- @RaphaelFakhri made their first contribution in https://github.com/twentyhq/twenty/pull/28502
- @jackeddisciple made their first contribution in https://github.com/twentyhq/twenty/pull/28494
<details>
<summary>Full changelog (136 PRs)</summary>
- Move app tooling consumers to the standalone CLI ([#28182](https://github.com/twentyhq/twenty/pull/28182)) by @Weiko
- Remove the legacy SDK CLI and retire create-twenty-app ([#28183](https://github.com/twentyhq/twenty/pull/28183)) by @Weiko
- fix(front): pin record table columns with logical insets so they work in RTL ([#28379](https://github.com/twentyhq/twenty/pull/28379)) by @almoghazaz-cell
- fix(metadata-store): adopt new collection hash on replaceDraft when data is unchanged ([#28412](https://github.com/twentyhq/twenty/pull/28412)) by @ghazy2001
- Let members manage personal app connections from App preferences ([#28418](https://github.com/twentyhq/twenty/pull/28418)) by @ehconitin
- fix(record-form): block submission when field input has validation error ([#28425](https://github.com/twentyhq/twenty/pull/28425)) by @ghazy2001
- Keep code step outputs when the code is saved and remove the link output schema ([#28432](https://github.com/twentyhq/twenty/pull/28432)) by @ghazy2001
- Pass fieldMetadataId in if/else workflow node ([#28443](https://github.com/twentyhq/twenty/pull/28443)) by @BOHEUS
- docs: Introduce third-party marketplace vetting criteria ([#28457](https://github.com/twentyhq/twenty/pull/28457)) by @martmull
- fix(front): keep cached relation picker results clickable while Search refreshes ([#28458](https://github.com/twentyhq/twenty/pull/28458)) by @lineico
- Report a superseded session as superseded when its revocation races the request ([#28462](https://github.com/twentyhq/twenty/pull/28462)) by @DamienFoulon
- fix(slack): show one content-shaped skeleton while the settings tab loads ([#28493](https://github.com/twentyhq/twenty/pull/28493)) by @abdulrahmancodes
- Fix app sync recreating search rows that already exist ([#28494](https://github.com/twentyhq/twenty/pull/28494)) by @jackeddisciple
- fix(twenty-shared): promote formatBytes to the next unit when rounding reaches 1024 ([#28502](https://github.com/twentyhq/twenty/pull/28502)) by @RaphaelFakhri
- Link a sent email to the record it was sent from ([#28554](https://github.com/twentyhq/twenty/pull/28554)) by @FelixMalfait
- Show only workspace-shared connections in app settings ([#28556](https://github.com/twentyhq/twenty/pull/28556)) by @ehconitin
- Build inbox thread details and sharing ([#28565](https://github.com/twentyhq/twenty/pull/28565)) by @bosiraphael
- Add global chat commands ([#28567](https://github.com/twentyhq/twenty/pull/28567)) by @bosiraphael
- Move the Slack app to twenty-ui 2.x and use its Skeleton ([#28604](https://github.com/twentyhq/twenty/pull/28604)) by @abdulrahmancodes
- Migrate the metadata tools to @DefineTool ([#28631](https://github.com/twentyhq/twenty/pull/28631)) by @prastoin
- Clarify DPA, AI and access answers in the Legal FAQ and pricing page ([#28640](https://github.com/twentyhq/twenty/pull/28640)) by @ijreilly
- Migrate multiple record pickers ([#28643](https://github.com/twentyhq/twenty/pull/28643)) by @bosiraphael
- Use twenty-ui date picker in the frontend ([#28649](https://github.com/twentyhq/twenty/pull/28649)) by @bosiraphael
- Let apps connect accounts through their own authorization flow ([#28672](https://github.com/twentyhq/twenty/pull/28672)) by @FelixMalfait
- Allow npm publishing from protected release branches ([#28677](https://github.com/twentyhq/twenty/pull/28677)) by @FelixMalfait
- Mask restricted calendar events and messages in nested relations and groupBy ([#28679](https://github.com/twentyhq/twenty/pull/28679)) by @charlesBochet
- Let Granola uninstall when no API key was saved ([#28680](https://github.com/twentyhq/twenty/pull/28680)) by @charlesBochet
- Add batch approval review components ([#28684](https://github.com/twentyhq/twenty/pull/28684)) by @bosiraphael
- Bring back toggles, nested blocks, deeper headings and table controls in rich text notes ([#28687](https://github.com/twentyhq/twenty/pull/28687)) by @neo773
- Remove IS_APPLICATION_MONITORING_ENABLED feature flag ([#28688](https://github.com/twentyhq/twenty/pull/28688)) by @martmull
- Remove the main sources of server integration shard flakiness ([#28689](https://github.com/twentyhq/twenty/pull/28689)) by @martmull
- Add email approval review ([#28691](https://github.com/twentyhq/twenty/pull/28691)) by @bosiraphael
- Give the rebuilt user auth context its full workspace ([#28692](https://github.com/twentyhq/twenty/pull/28692)) by @prastoin
- Stabilize frontend Storybook interactions ([#28693](https://github.com/twentyhq/twenty/pull/28693)) by @bosiraphael
- Keep non-email participant links when a person's emails change ([#28694](https://github.com/twentyhq/twenty/pull/28694)) by @FelixMalfait
- Match app channel participants on a declared person field ([#28696](https://github.com/twentyhq/twenty/pull/28696)) by @FelixMalfait
- chore: bump version to 2.52.0 ([#28697](https://github.com/twentyhq/twenty/pull/28697)) by @twenty-pr
- Backfill frontend dependencies for existing Workspace apps ([#28698](https://github.com/twentyhq/twenty/pull/28698)) by @Weiko
- Show weekly AI user credits in AI chat ([#28700](https://github.com/twentyhq/twenty/pull/28700)) by @etiennejouan
- Balance server integration shards by recorded duration ([#28702](https://github.com/twentyhq/twenty/pull/28702)) by @neo773
- Let usage limit defaults override the plan while trialing ([#28703](https://github.com/twentyhq/twenty/pull/28703)) by @etiennejouan
- Bring back row and column controls in rich text tables ([#28704](https://github.com/twentyhq/twenty/pull/28704)) by @neo773
- Keep app uninstall hook failures out of Sentry ([#28705](https://github.com/twentyhq/twenty/pull/28705)) by @charlesBochet
- Fix workspace data export S3 upload and show exports on the admin user page ([#28706](https://github.com/twentyhq/twenty/pull/28706)) by @charlesBochet
- Keep sensitive-path maintainer approvals valid after pushes ([#28707](https://github.com/twentyhq/twenty/pull/28707)) by @FelixMalfait
- Replace the generic multi-item field inputs with composable bricks ([#28708](https://github.com/twentyhq/twenty/pull/28708)) by @charlesBochet
- Keep the front metadata store consistent across out-of-order updates ([#28711](https://github.com/twentyhq/twenty/pull/28711)) by @charlesBochet
- Refresh Resources menu previews and the homepage logo row ([#28713](https://github.com/twentyhq/twenty/pull/28713)) by @Bonapara
- Close the inbox conversation pane ([#28716](https://github.com/twentyhq/twenty/pull/28716)) by @bosiraphael
- Remove async CSV export feature flag ([#28717](https://github.com/twentyhq/twenty/pull/28717)) by @Weiko
- Hide app settings tab bar when General is the only tab ([#28720](https://github.com/twentyhq/twenty/pull/28720)) by @martmull
- Clean up remaining legacy SDK CLI references ([#28721](https://github.com/twentyhq/twenty/pull/28721)) by @Weiko
- Fix docs translations for Crowdin CLI 5 ([#28725](https://github.com/twentyhq/twenty/pull/28725)) by @Weiko
- Redesign the docs to match the website ([#28733](https://github.com/twentyhq/twenty/pull/28733)) by @Bonapara
- Edit list values and link labels in place in multi-item cell editors ([#28734](https://github.com/twentyhq/twenty/pull/28734)) by @charlesBochet
- Show the app error fallback for errors React Router catches ([#28747](https://github.com/twentyhq/twenty/pull/28747)) by @charlesBochet
- fix(onboarding): add aria-labels to invite team email inputs ([#28748](https://github.com/twentyhq/twenty/pull/28748)) by @zacyungblut
- Restore JSX attributes Crowdin translated in docs pages ([#28749](https://github.com/twentyhq/twenty/pull/28749)) by @Bonapara
- Apply workflow step edits to the draft's own logic function or agent ([#28750](https://github.com/twentyhq/twenty/pull/28750)) by @charlesBochet
- Split the multi-item draft hook into focused bricks ([#28751](https://github.com/twentyhq/twenty/pull/28751)) by @charlesBochet
- Fix bulk update of emptied list fields, full name pasting and address separators ([#28752](https://github.com/twentyhq/twenty/pull/28752)) by @charlesBochet
- Edit emails and array values as lists in the record form ([#28753](https://github.com/twentyhq/twenty/pull/28753)) by @charlesBochet
- Show partial domain setup on the email channel list ([#28754](https://github.com/twentyhq/twenty/pull/28754)) by @neo773
- Add an Email Channels docs page ([#28755](https://github.com/twentyhq/twenty/pull/28755)) by @neo773
- Edit phones, links, files and full name in the record form ([#28757](https://github.com/twentyhq/twenty/pull/28757)) by @charlesBochet
- Show address details on demand in the record form ([#28765](https://github.com/twentyhq/twenty/pull/28765)) by @charlesBochet
- Infer the code step input schema in the debounced save so keystrokes can't be saved out of order ([#28766](https://github.com/twentyhq/twenty/pull/28766)) by @charlesBochet
- Edit wrapping text in a text area and show the domain favicon in link inputs ([#28767](https://github.com/twentyhq/twenty/pull/28767)) by @charlesBochet
- Show a blue border on keyboard focus in form inputs, pickers and selects ([#28769](https://github.com/twentyhq/twenty/pull/28769)) by @charlesBochet
- chore(security): bump dompurify to 3.4.17 ([#28772](https://github.com/twentyhq/twenty/pull/28772)) by @mabdullahabaid
- Edit the full name in one input and show address details on demand in cell editors ([#28773](https://github.com/twentyhq/twenty/pull/28773)) by @charlesBochet
- Route any casing of host-sanitized props to their canonical key in front component host elements ([#28774](https://github.com/twentyhq/twenty/pull/28774)) by @charlesBochet
- Suggest addresses as you type in the record form address ([#28775](https://github.com/twentyhq/twenty/pull/28775)) by @charlesBochet
- Upload files by dropping them on the files field input ([#28777](https://github.com/twentyhq/twenty/pull/28777)) by @charlesBochet
- chore(security): bump next to 16.4.1 ([#28778](https://github.com/twentyhq/twenty/pull/28778)) by @mabdullahabaid
- Require a first-person session for admin panel actions ([#28779](https://github.com/twentyhq/twenty/pull/28779)) by @charlesBochet
- Backfill record form widgets for files fields ([#28780](https://github.com/twentyhq/twenty/pull/28780)) by @charlesBochet
- Apply field read permissions to timeline activity properties ([#28782](https://github.com/twentyhq/twenty/pull/28782)) by @charlesBochet
- Block bulk update while a field input is in error ([#28783](https://github.com/twentyhq/twenty/pull/28783)) by @charlesBochet
- Resend requests rejected because a sign-in superseded their session ([#28784](https://github.com/twentyhq/twenty/pull/28784)) by @charlesBochet
- Make the True/False control full width in record forms ([#28787](https://github.com/twentyhq/twenty/pull/28787)) by @charlesBochet
- chore(security): bump storybook to 10.6.3 ([#28790](https://github.com/twentyhq/twenty/pull/28790)) by @mabdullahabaid
- chore(security): bump follow-redirects to 1.16.1 everywhere ([#28792](https://github.com/twentyhq/twenty/pull/28792)) by @mabdullahabaid
- chore(security): bump vite to 8.3.5 in the app lockfiles ([#28798](https://github.com/twentyhq/twenty/pull/28798)) by @mabdullahabaid
- Ignore isSecret changes on existing application and server variables ([#28800](https://github.com/twentyhq/twenty/pull/28800)) by @prastoin
- chore(security): bump twenty-companion vite to 7.3.7 ([#28801](https://github.com/twentyhq/twenty/pull/28801)) by @mabdullahabaid
- chore(security): bump undici in the app lockfiles ([#28802](https://github.com/twentyhq/twenty/pull/28802)) by @mabdullahabaid
- Reject changes to non-comparable flat entity properties ([#28803](https://github.com/twentyhq/twenty/pull/28803)) by @prastoin
- chore(security): bump undici in the root lockfile ([#28805](https://github.com/twentyhq/twenty/pull/28805)) by @mabdullahabaid
- chore(security): bump zod to 4.6.7 in the fathom, fireflies and granola apps ([#28807](https://github.com/twentyhq/twenty/pull/28807)) by @mabdullahabaid
- Initialize application variable value at creation instead of in the manifest ([#28808](https://github.com/twentyhq/twenty/pull/28808)) by @prastoin
- chore(security): bump verdaccio to 6.10.7 and drop its two resolutions ([#28809](https://github.com/twentyhq/twenty/pull/28809)) by @mabdullahabaid
- Add configurable tags when creating Lambda functions ([#28810](https://github.com/twentyhq/twenty/pull/28810)) by @FelixMalfait
- Delete logic function Lambdas and SDK layers on workspace deletion ([#28813](https://github.com/twentyhq/twenty/pull/28813)) by @prastoin
- Ignore the CLI patch version in the scaffolded engines.twenty range ([#28814](https://github.com/twentyhq/twenty/pull/28814)) by @prastoin
- Document that app development is only supported on Unix systems ([#28817](https://github.com/twentyhq/twenty/pull/28817)) by @prastoin
- Let the Teams assistant work with CRM records ([#28832](https://github.com/twentyhq/twenty/pull/28832)) by @abdulrahmancodes
- Give the Teams assistant the earlier turns of the conversation ([#28833](https://github.com/twentyhq/twenty/pull/28833)) by @abdulrahmancodes
- Remove the `as any` casts in 2 files of modules/ui/input/components/internal/date/components ([#28838](https://github.com/twentyhq/twenty/pull/28838)) by @twenty-pr-author
- Rename 9 server files to the singular suffix in src/engine/core-modules/open-api/utils ([#28839](https://github.com/twentyhq/twenty/pull/28839)) by @twenty-pr-author
- feat(billing): lead the Plans page comparison with plan essentials ([#28843](https://github.com/twentyhq/twenty/pull/28843)) by @etiennejouan
- Application monitoring: legend totals and credits by operation type ([#28847](https://github.com/twentyhq/twenty/pull/28847)) by @martmull
- Fix follow-redirects in the Workspace upgrade snapshot ([#28852](https://github.com/twentyhq/twenty/pull/28852)) by @Weiko
- Seed Workspace applications with frontend dependencies ([#28853](https://github.com/twentyhq/twenty/pull/28853)) by @Weiko
- Remove the free trial for users already in 2 trial workspaces ([#28859](https://github.com/twentyhq/twenty/pull/28859)) by @etiennejouan
- Prebundle rich text editor extensions for Storybook ([#28862](https://github.com/twentyhq/twenty/pull/28862)) by @bosiraphael
- Add merge proposal review ([#28863](https://github.com/twentyhq/twenty/pull/28863)) by @bosiraphael
- Add scheduling and time-picker UI ([#28865](https://github.com/twentyhq/twenty/pull/28865)) by @bosiraphael
- Fix orphaned case study card on partner profiles ([#28913](https://github.com/twentyhq/twenty/pull/28913)) by @ijreilly
- Stop deleting provider domains Twenty did not create ([#28914](https://github.com/twentyhq/twenty/pull/28914)) by @neo773
- Serve campaign unsubscribe and tracked links on links.domain ([#28915](https://github.com/twentyhq/twenty/pull/28915)) by @neo773
- Add glass and metal materials to the halftone studio ([#28918](https://github.com/twentyhq/twenty/pull/28918)) by @Bonapara
- Let application workflows send email and create calendar events ([#28920](https://github.com/twentyhq/twenty/pull/28920)) by @FelixMalfait
- Fix integration specs that break on suites run before them in the same shard ([#28921](https://github.com/twentyhq/twenty/pull/28921)) by @etiennejouan
- Skip morph relation targets the role cannot read ([#28922](https://github.com/twentyhq/twenty/pull/28922)) by @neo773
- Skip application lifecycle scripts when building dependency layers ([#28926](https://github.com/twentyhq/twenty/pull/28926)) by @prastoin
- Let the workspace custom application's workflows call other apps' actions ([#28927](https://github.com/twentyhq/twenty/pull/28927)) by @FelixMalfait
- Fill the single full name input in the create record e2e test ([#28928](https://github.com/twentyhq/twenty/pull/28928)) by @charlesBochet
- Show the Admin role in the roles list again ([#28946](https://github.com/twentyhq/twenty/pull/28946)) by @prastoin
- Only offer junction targets the role can update in relation pickers ([#28947](https://github.com/twentyhq/twenty/pull/28947)) by @charlesBochet
- Fit the AI chat user credits banner on one line ([#28949](https://github.com/twentyhq/twenty/pull/28949)) by @etiennejouan
- chore(security): bump fast-uri to 3.1.9 ([#28952](https://github.com/twentyhq/twenty/pull/28952)) by @BOHEUS
- chore(security): bump @graphql-tools/executor-legacy-ws to 1.1.39 ([#28953](https://github.com/twentyhq/twenty/pull/28953)) by @BOHEUS
- chore(security): bump markdown-it to 14.3.3 ([#28954](https://github.com/twentyhq/twenty/pull/28954)) by @BOHEUS
- chore(security): bump postcss-selector-parser to 6.1.5 ([#28955](https://github.com/twentyhq/twenty/pull/28955)) by @BOHEUS
- chore(security): bump body-parser to 1.20.9 and 2.4.0 ([#28958](https://github.com/twentyhq/twenty/pull/28958)) by @BOHEUS
- chore(security): bump vitest to 4.1.12 ([#28960](https://github.com/twentyhq/twenty/pull/28960)) by @BOHEUS
- chore(security): bump electron to 44.9.1 ([#28967](https://github.com/twentyhq/twenty/pull/28967)) by @BOHEUS
- chore(security): bump nodemailer to 10.2.1 ([#28968](https://github.com/twentyhq/twenty/pull/28968)) by @BOHEUS
- Keep Avatar fallback icons within small avatars ([#28973](https://github.com/twentyhq/twenty/pull/28973)) by @bosiraphael
- Add admin status indicator to workspace users in admin panel ([#28974](https://github.com/twentyhq/twenty/pull/28974)) by @martmull
- Bump graphql to 16.14.2 and graphql-yoga to 5 ([#28976](https://github.com/twentyhq/twenty/pull/28976)) by @charlesBochet
- Reject object names that are not stable under camelCase ([#28978](https://github.com/twentyhq/twenty/pull/28978)) by @FelixMalfait
- Restore native blur in front component menus ([#28980](https://github.com/twentyhq/twenty/pull/28980)) by @bosiraphael
- Add Teams app to Microsoft publisher domain association ([#28983](https://github.com/twentyhq/twenty/pull/28983)) by @neo773
- Match AI chat user bubbles to the design ([#28984](https://github.com/twentyhq/twenty/pull/28984)) by @bosiraphael
</details>
**Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.51.0...twenty/v2.52.0