v1.20.0

twentyhq/twentyv1.20.0Mar 31, 2026by charlesBochet

AI Summary

This release upgrades Apollo Client to v4, implements OAuth 2.0 Dynamic Client Registration, and adds resumable stream support for agent chat. It also introduces billing analytics with ClickHouse and metadata store improvements.

Key Highlights

  • Apollo Client v4 upgrade with refactored error handling
  • OAuth 2.0 Dynamic Client Registration (RFC 7591)
  • Resumable stream support for agent chat
  • Billing analytics dashboard with ClickHouse
  • Metadata store migration to granular approach

New Features

  • Apollo Client v4
  • OAuth 2.0 DCR
  • Resumable streams
  • Billing analytics
  • Metadata store improvements
  • Rich text as creatable field
  • Object color customization

Full Release Notes

## What's Changed
* feat: add resumable stream support for agent chat by @FelixMalfait in https://github.com/twentyhq/twenty/pull/19107
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19134
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19135
* `[SDK]` Extract `twenty-front-component-renderer` outside of `twenty-sdk` ( 2.8MB ) by @prastoin in https://github.com/twentyhq/twenty/pull/19021
* Fix widgets drag handles by @bosiraphael in https://github.com/twentyhq/twenty/pull/19133
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19137
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19139
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19142
* `0.8.0.canary.7` bump by @prastoin in https://github.com/twentyhq/twenty/pull/19150
* Fix TransactionNotStartedError by @Weiko in https://github.com/twentyhq/twenty/pull/19155
* fix: show disabled file chip when file no longer exists in timeline by @bugisthegod in https://github.com/twentyhq/twenty/pull/19045
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19158
* Fix upgrade commands 2 by @charlesBochet in https://github.com/twentyhq/twenty/pull/19157


**Full Changelog**: https://github.com/twentyhq/twenty/compare/v1.19.13...v1.20.0

## What's Changed
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18617
* Add Gemini 3.1 Flash Lite model to AI registry by @pablofmorales in https://github.com/twentyhq/twenty/pull/18597
* Upgrade Apollo Client to v4 and refactor error handling by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18584
* Improve type safety and remove unnecessary store operations by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18622
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18620
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18621
* Deprecate legacy RICH_TEXT field metadata type by @charlesBochet in https://github.com/twentyhq/twenty/pull/18623
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18625
* fix: add missing React key props to ButtonGroup and FloatingButtonGro… by @williamjusticedavis in https://github.com/twentyhq/twenty/pull/18615
* feat: rename RICH_TEXT_V2 → RICH_TEXT in codebase (keep DB value) by @charlesBochet in https://github.com/twentyhq/twenty/pull/18628
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18633
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18636
* feat: deprecate WorkspaceFavorite in favor of NavigationMenuItem by @charlesBochet in https://github.com/twentyhq/twenty/pull/18624
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18639
* feat: enable Rich Text as a creatable field type by @charlesBochet in https://github.com/twentyhq/twenty/pull/18634
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18642
* Add pitfall reminders to LLMS guidance by @Bonapara in https://github.com/twentyhq/twenty/pull/18627
* View field override by @Weiko in https://github.com/twentyhq/twenty/pull/18572
* feat: migrate objectMetadata reads to granular metadata store by @charlesBochet in https://github.com/twentyhq/twenty/pull/18643
* docs: fix contributor docs links and typos by @channi23 in https://github.com/twentyhq/twenty/pull/18637
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18644
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18645
* feat: uniformize metadata store with flat types, SSE alignment, presentation endpoint & localStorage by @charlesBochet in https://github.com/twentyhq/twenty/pull/18647
* feat: hash-based metadata staleness detection by @charlesBochet in https://github.com/twentyhq/twenty/pull/18649
* refactor: metadata store cleanup, SSE unification, mock metadata loading & login redirect fix by @charlesBochet in https://github.com/twentyhq/twenty/pull/18651
* fix: yauzl contains an off-by-one error by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/18662
* fix: expr-eval related dependabot alerts by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/18661
* fix: @isaacs/brace-expansion has uncontrolled resource consumption by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/18660
* fix: multer vulnerable to denial of service via uncontrolled recursion by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/18659
* Implement OAuth 2.0 Dynamic Client Registration (RFC 7591) by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18608
* fix: DOMPurify contains a cross-site scripting vulnerability by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/18665
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18669
* refactor: remove "core" naming from views and eliminate converter layer by @charlesBochet in https://github.com/twentyhq/twenty/pull/18667
* fix: mailparser vulnerable to cross-site scripting by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/18664
* fix: return method-specific MCP responses by @channi23 in https://github.com/twentyhq/twenty/pull/18671
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18674
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18677
* fix: add viewFieldGroupId to ViewField fragment and connect page layout selectors to live metadata store by @ehconitin in https://github.com/twentyhq/twenty/pull/18676
* Fix timeline activities + breadcrumb by @thomtrp in https://github.com/twentyhq/twenty/pull/18626
* refactor: consolidate database query timeout config variables by @charlesBochet in https://github.com/twentyhq/twenty/pull/18670
* fix: respect standard object rename across all locales (Closes #18650) by @Assad-Robles in https://github.com/twentyhq/twenty/pull/18652
* Fix styles side column by @Devessier in https://github.com/twentyhq/twenty/pull/18632
* Fix custom object view fields creation by @Weiko in https://github.com/twentyhq/twenty/pull/18629
* Update sidebar section toggle to match Figma chevron by @Bonapara in https://github.com/twentyhq/twenty/pull/18631
* fix: allow identical singular and plural labels for objects by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18678
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18683
* feat: add color property to ObjectMetadata for object icon customization by @charlesBochet in https://github.com/twentyhq/twenty/pull/18672
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18686
* refactor: remove ProcessedNavigationMenuItem, derive display fields at point of use by @charlesBochet in https://github.com/twentyhq/twenty/pull/18687
* fix 2FA UI layout by @neo773 in https://github.com/twentyhq/twenty/pull/18688
* chore: frontend dead code removal and naming cleanup by @charlesBochet in https://github.com/twentyhq/twenty/pull/18690
* refactor(twenty-front): reorganize NavigationMenuItem module into common/display/edit subfolders by @charlesBochet in https://github.com/twentyhq/twenty/pull/18691
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18696
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18692
* Twenty sdk cli oauth by @martmull in https://github.com/twentyhq/twenty/pull/18638
* Add hotkeys to command menu items by @bosiraphael in https://github.com/twentyhq/twenty/pull/18682
* [FIx]: using the dynamic {objectLabelPlural} instead of hardcoded name by @carbonFibreCode in https://github.com/twentyhq/twenty/pull/18700
* Setup local instance on app creation by @thomtrp in https://github.com/twentyhq/twenty/pull/18184
* refactor: unify layout customization mode (record pages + navigation) by @ehconitin in https://github.com/twentyhq/twenty/pull/18640
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18703
* [Command menu items] Create engine commands by @bosiraphael in https://github.com/twentyhq/twenty/pull/18681
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18704
* refactor(twenty-front): unify Favorites and Workspace navigation menu item code by @charlesBochet in https://github.com/twentyhq/twenty/pull/18697
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18709
* Update store on data model mutation by @thomtrp in https://github.com/twentyhq/twenty/pull/18684
* Upgrade Ink to v6 and pause TUI on idle/error by @charlesBochet in https://github.com/twentyhq/twenty/pull/18705
* feat: optimistic metadata store updates for navigation menu items by @charlesBochet in https://github.com/twentyhq/twenty/pull/18710
* fix: make 1.19 upgrade commands resilient to pre-existing data by @charlesBochet in https://github.com/twentyhq/twenty/pull/18716
* Skip threads with no participants in timeline formatting by @neo773 in https://github.com/twentyhq/twenty/pull/18725
* fix: restructure navigationMenuItem type migration for safe upgrade path by @charlesBochet in https://github.com/twentyhq/twenty/pull/18722
* fix: route object color through standardOverrides for standard objects by @charlesBochet in https://github.com/twentyhq/twenty/pull/18717
* Treat Microsoft Graph 400 with empty body as transient error by @neo773 in https://github.com/twentyhq/twenty/pull/18726
* Fix null connectedAccount crash in blocklist message deletion job by @neo773 in https://github.com/twentyhq/twenty/pull/18723
* Publish new version by @martmull in https://github.com/twentyhq/twenty/pull/18727
* fix Draft Email stuck Callout by @neo773 in https://github.com/twentyhq/twenty/pull/18719
* Support template variables in command menu item labels by @bosiraphael in https://github.com/twentyhq/twenty/pull/18707
* workspace:export command by @neo773 in https://github.com/twentyhq/twenty/pull/18695
* fix: navigation menu item type backfill and frontend loading by @charlesBochet in https://github.com/twentyhq/twenty/pull/18730
* Migrate permission flag to syncable entity by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18567
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18736
* fix(auth): use dynamic SSE headers and add token renewal retry logic by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18706
* Remove front component and command menu item old seeds by @bosiraphael in https://github.com/twentyhq/twenty/pull/18737
* Add progress tracking to command menu items by @bosiraphael in https://github.com/twentyhq/twenty/pull/18732
* Add record page layout tabs editing by @Devessier in https://github.com/twentyhq/twenty/pull/18702
* fix: migrate driver modules to DriverFactoryBase lazy-loading pattern by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18731
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18738
* fix: replace > button with button selector in styled wrappers by @bugisthegod in https://github.com/twentyhq/twenty/pull/18568
* Migrate object permission to syncable entity by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18609
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18742
* fix: restore ViewFilter value stringification lost in converter removal by @charlesBochet in https://github.com/twentyhq/twenty/pull/18745
* Scaffold light twenty app dev container by @martmull in https://github.com/twentyhq/twenty/pull/18734
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18749
* fix: use unique concurrency group per merge queue entry by @charlesBochet in https://github.com/twentyhq/twenty/pull/18756
* chore(deps): bump @ai-sdk/mistral from 3.0.20 to 3.0.25 by @dependabot[bot] in https://github.com/twentyhq/twenty/pull/18755
* chore(deps): bump @dagrejs/dagre from 1.1.3 to 1.1.8 by @dependabot[bot] in https://github.com/twentyhq/twenty/pull/18753
* chore(deps): bump nodemailer from 7.0.11 to 7.0.13 by @dependabot[bot] in https://github.com/twentyhq/twenty/pull/18754
* Separate metadata and object record publisher by @thomtrp in https://github.com/twentyhq/twenty/pull/18740
* Fix: prevent record navigation when clicking Remove from favorite in nav sidebar by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18760
* Remove postition from Timeline Activities + fix workflow title placeholder by @thomtrp in https://github.com/twentyhq/twenty/pull/18777
* Fix: cascade delete favorite folder children on backend by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18765
* Fix relation connect where failing on mixed-case email and URL by @bugisthegod in https://github.com/twentyhq/twenty/pull/18605
* fix: stop event propagation when removing file in AI chat preview by @victorjzq in https://github.com/twentyhq/twenty/pull/18779
* Fix: Hide object from Opened section when it already has a workspace nav item by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18766
* feat: migrate ConnectedAccount infrastructure entities to metadata schema by @charlesBochet in https://github.com/twentyhq/twenty/pull/18784
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18786
* Improve workflow metrics with faillure reason by @thomtrp in https://github.com/twentyhq/twenty/pull/18768
* fix: remove redundant cookie write that made tokenPair a session cookie by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18795
* fix: autogrow input sizing + surface nested error details in upgrade command by @charlesBochet in https://github.com/twentyhq/twenty/pull/18796
* fix: backfill missing ids on SELECT/MULTI_SELECT field metadata options by @charlesBochet in https://github.com/twentyhq/twenty/pull/18797
* Avoid side panel tab overriden by show page by @thomtrp in https://github.com/twentyhq/twenty/pull/18800
* fix: add missing LEFT JOIN for relation fields in groupBy orderByForRecords by @charlesBochet in https://github.com/twentyhq/twenty/pull/18798
* fix: update workspace members state on profile onboarding completion by @charlesBochet in https://github.com/twentyhq/twenty/pull/18799
* fix - handle invoice.paid webhook to recover unpaid subscriptions by @etiennejouan in https://github.com/twentyhq/twenty/pull/18770
* Direct graphql execution by @etiennejouan in https://github.com/twentyhq/twenty/pull/18759
* Add a note to documentation about variable change by @BOHEUS in https://github.com/twentyhq/twenty/pull/18752
* Fix orphan navigation menu items for deleted views by @channi23 in https://github.com/twentyhq/twenty/pull/18791
* fix: decouple viewPicker favorite detection from sorted navigation menu items by @charlesBochet in https://github.com/twentyhq/twenty/pull/18803
* Clean workflow query invalid input errors from sentry by @thomtrp in https://github.com/twentyhq/twenty/pull/18804
* feat: secure and user-scope metadata resolvers for messaging infrastructure by @charlesBochet in https://github.com/twentyhq/twenty/pull/18787
* fix useless auth in sdk gql codegen command by @etiennejouan in https://github.com/twentyhq/twenty/pull/18805
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18806
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18807
* fix(links): preserve percent-encoded URLs during normalization by @Dailin521 in https://github.com/twentyhq/twenty/pull/18792
* fix: restore original migration timestamp for messaging infrastructure by @charlesBochet in https://github.com/twentyhq/twenty/pull/18810
* Fix page scrolling when layout customization bar is visible by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18802
* [Fix]: Vertical bar charts with max data range do not show data up to the top if above max data range by @carbonFibreCode in https://github.com/twentyhq/twenty/pull/18748
* Fix AI chat re-renders and refactored code by @lucasbordeau in https://github.com/twentyhq/twenty/pull/18585
* fix: prevent blank subdomain from being saved by @oniani1 in https://github.com/twentyhq/twenty/pull/18812
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18822
* feat: replace hardcoded AI model constants with JSON seed catalog by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18818
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18823
* fix: board view loads all records instead of showing skeleton placeholders by @charlesBochet in https://github.com/twentyhq/twenty/pull/18824
* fix: prevent FIND_RECORDS from silently dropping unresolved filter variables by @oniani1 in https://github.com/twentyhq/twenty/pull/18814
* fix: skip chat messages query when thread ID is the unknown-thread default by @neo773 in https://github.com/twentyhq/twenty/pull/18828
* feat: store SSO connections as connected accounts during sign-in by @charlesBochet in https://github.com/twentyhq/twenty/pull/18825
* Fetch load more on group by by @thomtrp in https://github.com/twentyhq/twenty/pull/18811
* fix: prevent localStorage bloat from derived fields on mock metadata by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18809
* refactor: rename ObjectMetadataItem to EnrichedObjectMetadataItem and clean up metadata flows by @charlesBochet in https://github.com/twentyhq/twenty/pull/18830
* [Chore]: Migration to dynamic view names for standard views by @carbonFibreCode in https://github.com/twentyhq/twenty/pull/18701
* Add `In-Reply-To` to Email Workflow Node by @neo773 in https://github.com/twentyhq/twenty/pull/18641
* fix: auto-retry Microsoft OAuth on AADSTS650051 race condition by @311u1 in https://github.com/twentyhq/twenty/pull/18405
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18831
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18832
* Improve helm chart // Fix linting issues & introduce Redis externalSecret for redis password // Add additional ENVs // Improve migrations by @HuppertzL in https://github.com/twentyhq/twenty/pull/18157
* fix(helm): add unit tests, extraEnv schema validation, and minor fixes by @charlesBochet in https://github.com/twentyhq/twenty/pull/18836
* fix: reset form defaultValues after save to fix dirty detection by @bugisthegod in https://github.com/twentyhq/twenty/pull/18835
* Create command menu items for workflows with manual trigger by @bosiraphael in https://github.com/twentyhq/twenty/pull/18746
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18837
* Fix: TypeError: Cannot convert undefined or null to object by @sonarly[bot] in https://github.com/twentyhq/twenty/pull/18333
* Allow users to create Fields and Field widget by @Devessier in https://github.com/twentyhq/twenty/pull/18801
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18838
* Migrate field widgets to backend by @Devessier in https://github.com/twentyhq/twenty/pull/18808
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18839
* Fix migration crash: agent.modelId NOT NULL violation by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18844
* Add billing usage analytics dashboard with ClickHouse integration by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18592
* Show AI provider sections regardless of billing status by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18845
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18846
* chore: improve i18n workflow to prevent stale compiled translations by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18850
* fix: run AI catalog sync as standalone script to avoid DB dependency by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18853
* chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18854
* chore: trigger automerge for AI catalog sync PRs by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18855
* Fix deploy: remove stale @ai-sdk/groq from yarn.lock by @charlesBochet in https://github.com/twentyhq/twenty/pull/18863
* fix: add security headers to file serving endpoints to prevent stored XSS by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18857
* Update BackfillCommandMenuItemsCommand with workflow backfill by @bosiraphael in https://github.com/twentyhq/twenty/pull/18848
* Ensure command backfills all relations as Field widget by @Devessier in https://github.com/twentyhq/twenty/pull/18858
* Fix e2e test by @etiennejouan in https://github.com/twentyhq/twenty/pull/18866
* Rename "New sidebar item" to "New menu item" by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18859
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18873
* Fix: Background color selected row + border bottom settings tab by @thomtrp in https://github.com/twentyhq/twenty/pull/18870
* Fix workspace dropdown truncation and center auth titles by @Bonapara in https://github.com/twentyhq/twenty/pull/18869
* Fix multi-select option removal crashing when records contain removed values by @charlesBochet in https://github.com/twentyhq/twenty/pull/18871
* Add visual regression CI for twenty-ui by @charlesBochet in https://github.com/twentyhq/twenty/pull/18877
* chore: add explicit return type to getBackgroundColor by @charlesBochet in https://github.com/twentyhq/twenty/pull/18878
* chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18885
* chore: optimize app-dev Docker image and add CI test by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18856
* [AI] Fix new chat button stacking side panel and auto-focus editor by @ehconitin in https://github.com/twentyhq/twenty/pull/18875
* Fix twenty app dev image by @martmull in https://github.com/twentyhq/twenty/pull/18852
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18903
* Fix rich text widget edition by @Devessier in https://github.com/twentyhq/twenty/pull/18899
* fix: ai providers json formatting by @neo773 in https://github.com/twentyhq/twenty/pull/18910
* Fix cropped view/link overlay icons in collapsed navigation sidebar by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18883
* Fix lambda driver by @martmull in https://github.com/twentyhq/twenty/pull/18907
* Perf investigation - Time qgl query by @etiennejouan in https://github.com/twentyhq/twenty/pull/18911
* fix: validate blocknote JSON in rich text fields by @charlesBochet in https://github.com/twentyhq/twenty/pull/18902
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18915
* Fix duplicate views creation in command by @Devessier in https://github.com/twentyhq/twenty/pull/18900
* fix: insert-before folder for workspace DnD and add-to-nav drags by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18789
* Display found items after full items loaded by @thomtrp in https://github.com/twentyhq/twenty/pull/18914
* Fix double arrow by @martmull in https://github.com/twentyhq/twenty/pull/18916
* fix: metadata store lifecycle during sign-in, sign-out, and locale change by @charlesBochet in https://github.com/twentyhq/twenty/pull/18901
* Fix readme by @martmull in https://github.com/twentyhq/twenty/pull/18918
* Fix documentation by @martmull in https://github.com/twentyhq/twenty/pull/18917
* Fix navigation “add before/after” insertion index by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18879
* Refactor: Unify command menu item execution by @bosiraphael in https://github.com/twentyhq/twenty/pull/18908
* Fix batch update optimistic and prevent accidental mass-update by @samuelarbibe in https://github.com/twentyhq/twenty/pull/17213
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18920
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18922
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18925
* Fix visual regression dispatch for fork PRs by @charlesBochet in https://github.com/twentyhq/twenty/pull/18921
* Refactor backfill-command-menu-items to use a single validateBuildAndRun call by @bosiraphael in https://github.com/twentyhq/twenty/pull/18923
* send X-Schema-Version header when metadataVersion is 0 by @thomtrp in https://github.com/twentyhq/twenty/pull/18924
* Add record table widget to dashboards by @lucasbordeau in https://github.com/twentyhq/twenty/pull/18747
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18926
* Refactor twenty client sdk provisioning for logic function and front-component by @prastoin in https://github.com/twentyhq/twenty/pull/18544
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18930
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18931
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18932
* Batch create, update, and delete navigation menu items by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18882
* Unify auth context → role permission config resolution into a single pure utility by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18927
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18934
* Use side panel sub-pages for add-to-folder flow by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18872
* Add twenty-sdk-client to deployed packages unique version check by @martmull in https://github.com/twentyhq/twenty/pull/18933
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18935
* Set system object icon colors to gray in New menu item flows by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18862
* Animate the sidebar when opening/closing an element in the "opened" section by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18867
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18936
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18938
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18941
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18942
* fix navigation menu item overflow issue by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18937
* fix logo upload during workspace onboarding by @neo773 in https://github.com/twentyhq/twenty/pull/18905
* Migrate twenty-companion from npm to yarn workspaces by @charlesBochet in https://github.com/twentyhq/twenty/pull/18946
* fix: reset throttle state on channel relaunch by @neo773 in https://github.com/twentyhq/twenty/pull/18843
* Do not rollback on cache invalidation failure in workspace migration runner by @prastoin in https://github.com/twentyhq/twenty/pull/18947
* Fix object permission override by @thomtrp in https://github.com/twentyhq/twenty/pull/18948
* Fix: use user role for OAuth tokens bearing user context by @ijreilly in https://github.com/twentyhq/twenty/pull/18954
* fix: wrap standard object/field metadata labels in msg for i18n extraction by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18951
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18955
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18956
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18958
* Split command menu items backfill into separate migration runs per application by @charlesBochet in https://github.com/twentyhq/twenty/pull/18957
* Add object type filter dropdown to side panel record searches by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18912
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18967
* feat: add S3 presigned URL redirect for file downloads by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18864
* Fix: default to allow-read when object permissions are not yet loaded by @charlesBochet in https://github.com/twentyhq/twenty/pull/18971
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18976
* Fix record page layout upgrade commands by @Devessier in https://github.com/twentyhq/twenty/pull/18962
* Add record table widget feature flag by @lucasbordeau in https://github.com/twentyhq/twenty/pull/18960
* Fix SSE event stream errors when impersonating users with limited permissions by @thomtrp in https://github.com/twentyhq/twenty/pull/18966
* Add multiselect option to form step by @thomtrp in https://github.com/twentyhq/twenty/pull/18979
* Do not run loop when iterator is skipped by @thomtrp in https://github.com/twentyhq/twenty/pull/18964
* fix SVG icon sizing broken in Chrome 142 by @charlesBochet in https://github.com/twentyhq/twenty/pull/18974
* Fixed board no value column not fetching more by @lucasbordeau in https://github.com/twentyhq/twenty/pull/18977
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18981
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18982
* chore(deps): bump @linaria/core from 6.2.0 to 6.3.0 by @dependabot[bot] in https://github.com/twentyhq/twenty/pull/18984
* chore(deps): bump @ai-sdk/xai from 3.0.59 to 3.0.74 by @dependabot[bot] in https://github.com/twentyhq/twenty/pull/18986
* chore(deps): bump @microsoft/microsoft-graph-types from 2.40.0 to 2.43.1 by @dependabot[bot] in https://github.com/twentyhq/twenty/pull/18985
* [AI] Match ai chat composer to figma by @ehconitin in https://github.com/twentyhq/twenty/pull/18874
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18987
* [AI] Refactor settings search to use SearchInput and restructure Skills tab by @ehconitin in https://github.com/twentyhq/twenty/pull/18876
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18988
* fix: prevent saving API key with empty name by @bugisthegod in https://github.com/twentyhq/twenty/pull/18970
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18990
* feat: make workflow objects searchable by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18906
* Use record page layouts in the merge records feature by @Devessier in https://github.com/twentyhq/twenty/pull/18961
* fix: handle dashboard filters referencing deleted fields by @ehconitin in https://github.com/twentyhq/twenty/pull/18512
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/18997
* fix dashboard widget edit mode content by @ehconitin in https://github.com/twentyhq/twenty/pull/18965
* fix: prevent empty array `id.in` filter in single record picker by @FelixMalfait in https://github.com/twentyhq/twenty/pull/18995
* [Ai] fix overflow on new chat button by @ehconitin in https://github.com/twentyhq/twenty/pull/18996
* fix: hide "Move to folder" when no destination folder is available by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18992
* Refactor dependency graph for SDK, client-sdk and create-app by @prastoin in https://github.com/twentyhq/twenty/pull/18963
* Bump prelease version sdk, sdk-client, create-twenty-app by @prastoin in https://github.com/twentyhq/twenty/pull/19000
* fix: hide objects with no addable views in sidebar view picker by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18993
* connected accounts follow up by @neo773 in https://github.com/twentyhq/twenty/pull/18998
* [AI] Navigation panel scroll refactor + Non chat placeholder by @ehconitin in https://github.com/twentyhq/twenty/pull/18999
* Add missing row lvl permission check on Kanban view by @thomtrp in https://github.com/twentyhq/twenty/pull/19002
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19011
* [AI] replace custom styles with MenuItem and SidePanelGroup in AI agent persmissions tab by @ehconitin in https://github.com/twentyhq/twenty/pull/19003
* Fix format result by @etiennejouan in https://github.com/twentyhq/twenty/pull/18975
* `[SDK]` twenty-ui/display selective re-export to avoid bloating icons by @prastoin in https://github.com/twentyhq/twenty/pull/19010
* feat: add command menu item to layout customization by @ehconitin in https://github.com/twentyhq/twenty/pull/18764
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19014
* Fix create new with filters by @lucasbordeau in https://github.com/twentyhq/twenty/pull/18969
* Fix board drag and drop issues by @lucasbordeau in https://github.com/twentyhq/twenty/pull/19005
* [Apps SDK] Add error message if relationType is missing by @ijreilly in https://github.com/twentyhq/twenty/pull/19006
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19018
* feat: support authType on AI providers for IAM role authentication by @FelixMalfait in https://github.com/twentyhq/twenty/pull/19016
* fix: update settings page for mobile viewport by @harshit078 in https://github.com/twentyhq/twenty/pull/18991
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19019
* Fix: Cannot create two workflow agent nodes because these have the same name by @thomtrp in https://github.com/twentyhq/twenty/pull/19015
* Fix not shared chip height + hard coded border radius by @Bonapara in https://github.com/twentyhq/twenty/pull/19020
* Clear navbar edit selection when closing the side panel by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18940
* [Dashboards] fix rich text widget AGAIN by @ehconitin in https://github.com/twentyhq/twenty/pull/19017
* Combine and clean upgrade commands for record page layouts by @Devessier in https://github.com/twentyhq/twenty/pull/19004
* chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19028
* fix: gate command-menu-items query behind feature flag by @charlesBochet in https://github.com/twentyhq/twenty/pull/19029
* fix: batch viewGroup mutations sequentially to prevent race conditions by @cyphercodes in https://github.com/twentyhq/twenty/pull/19027
* fix: remove remaining direct cookie writes that make tokenPair a session cookie on renewal by @FelixMalfait in https://github.com/twentyhq/twenty/pull/19031
* fix: sign file URLs in timeline and file loss on click outside by @bugisthegod in https://github.com/twentyhq/twenty/pull/19001
* Refactor client auto heal by @prastoin in https://github.com/twentyhq/twenty/pull/19032
* refacto - remove hello-pangea/dnd from navigation-menu-item module by @etiennejouan in https://github.com/twentyhq/twenty/pull/19033
* Seed company workflow for email upserts by @Bonapara in https://github.com/twentyhq/twenty/pull/18909
* First PR to bring in the new twenty website. by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/19035
* fix: use workspace-generated id for core dual-write in message folder save by @neo773 in https://github.com/twentyhq/twenty/pull/19038
* Migrate field permission to syncable entity by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/18751
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19040
* Guard `yarn database:migrate:prod` by @prastoin in https://github.com/twentyhq/twenty/pull/19008
* fix: resolve availabilityObjectMetadataUniversalIdentifier in backfill command by @charlesBochet in https://github.com/twentyhq/twenty/pull/19041
* Enforce workspace count limit for multi-workspace setups by @FelixMalfait in https://github.com/twentyhq/twenty/pull/19036
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19046
* Fix backfill record page layout command by @Devessier in https://github.com/twentyhq/twenty/pull/19043
* fix: invalidate rolesPermissions cache + add Docker Hub auth to CI by @charlesBochet in https://github.com/twentyhq/twenty/pull/19044
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19048
* Fix INDEX view showing labelPlural instead of resolved view name in nav by @charlesBochet in https://github.com/twentyhq/twenty/pull/19049
* Deprecate dataSource table with dual-write to workspace.databaseSchema by @charlesBochet in https://github.com/twentyhq/twenty/pull/19059
* feat: optimize hot database queries with multi-layer caching by @charlesBochet in https://github.com/twentyhq/twenty/pull/19068
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19073
* fix: resolve settings/usage chart crash and add ClickHouse usage event seeds by @FelixMalfait in https://github.com/twentyhq/twenty/pull/19039
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19076
* chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19078
* chore: remove completed migration feature flags and upgrade commands <= 1.18 by @charlesBochet in https://github.com/twentyhq/twenty/pull/19074
* chore: remove IS_DASHBOARD_V2_ENABLED feature flag by @charlesBochet in https://github.com/twentyhq/twenty/pull/19079
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19080
* chore: remove IS_APPLICATION_ENABLED feature flag by @charlesBochet in https://github.com/twentyhq/twenty/pull/19081
* chore: remove IS_ROW_LEVEL_PERMISSION_PREDICATES_ENABLED and IS_DATE_TIME_WHOLE_DAY_FILTER_ENABLED feature flags by @charlesBochet in https://github.com/twentyhq/twenty/pull/19082
* chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19100
* Provide applicatiion assets by @martmull in https://github.com/twentyhq/twenty/pull/18973
* Fix warning about ../../tsconfig.base.json not found by @martmull in https://github.com/twentyhq/twenty/pull/19105
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19108
* More parts of the new website. by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/19094
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19113
* Fix workspace dropdown by @bosiraphael in https://github.com/twentyhq/twenty/pull/19106
* fix: convert empty parentFolderId to null in messageFolder core dual-write by @neo773 in https://github.com/twentyhq/twenty/pull/19110
* Fix record name hover by @bosiraphael in https://github.com/twentyhq/twenty/pull/19109
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19119
* fix: use Redis metadata version for GraphQL response cache key by @charlesBochet in https://github.com/twentyhq/twenty/pull/19111
* Fix export view by @bosiraphael in https://github.com/twentyhq/twenty/pull/19117
* Fix navigation menu edition by @bosiraphael in https://github.com/twentyhq/twenty/pull/19115
* Fix - Not shared message on record index by @etiennejouan in https://github.com/twentyhq/twenty/pull/19103
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19125
* messaging cleanup  by @neo773 in https://github.com/twentyhq/twenty/pull/19124
* chore: remove 1-19 upgrade commands and navigation menu item feature flags by @charlesBochet in https://github.com/twentyhq/twenty/pull/19083
* [APP] Stricter API assertions by @prastoin in https://github.com/twentyhq/twenty/pull/19114
* Fix cropped calendar event name by @bosiraphael in https://github.com/twentyhq/twenty/pull/19126
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19128
* Improve apps by @martmull in https://github.com/twentyhq/twenty/pull/19120
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19129
* Gql direct execution - Improvements by @etiennejouan in https://github.com/twentyhq/twenty/pull/18972
* Fix - Remove signFileUrl method by @etiennejouan in https://github.com/twentyhq/twenty/pull/19121
* clean paddings in favorites section by @Bonapara in https://github.com/twentyhq/twenty/pull/19112
* Fix databaseSchema migration by @Weiko in https://github.com/twentyhq/twenty/pull/19132
* feat: add resumable stream support for agent chat by @FelixMalfait in https://github.com/twentyhq/twenty/pull/19107
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19134
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19135
* `[SDK]` Extract `twenty-front-component-renderer` outside of `twenty-sdk` ( 2.8MB ) by @prastoin in https://github.com/twentyhq/twenty/pull/19021
* Fix widgets drag handles by @bosiraphael in https://github.com/twentyhq/twenty/pull/19133
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19137
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19139
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19142
* `0.8.0.canary.7` bump by @prastoin in https://github.com/twentyhq/twenty/pull/19150
* Fix TransactionNotStartedError by @Weiko in https://github.com/twentyhq/twenty/pull/19155
* fix: show disabled file chip when file no longer exists in timeline by @bugisthegod in https://github.com/twentyhq/twenty/pull/19045
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/19158
* Fix upgrade commands 2 by @charlesBochet in https://github.com/twentyhq/twenty/pull/19157

## New Contributors
* @pablofmorales made their first contribution in https://github.com/twentyhq/twenty/pull/18597
* @williamjusticedavis made their first contribution in https://github.com/twentyhq/twenty/pull/18615
* @channi23 made their first contribution in https://github.com/twentyhq/twenty/pull/18637
* @Assad-Robles made their first contribution in https://github.com/twentyhq/twenty/pull/18652
* @victorjzq made their first contribution in https://github.com/twentyhq/twenty/pull/18779
* @Dailin521 made their first contribution in https://github.com/twentyhq/twenty/pull/18792
* @oniani1 made their first contribution in https://github.com/twentyhq/twenty/pull/18812
* @311u1 made their first contribution in https://github.com/twentyhq/twenty/pull/18405
* @HuppertzL made their first contribution in https://github.com/twentyhq/twenty/pull/18157
* @cyphercodes made their first contribution in https://github.com/twentyhq/twenty/pull/19027

**Full Changelog**: https://github.com/twentyhq/twenty/compare/v1.19.0...v1.20.0