Twenty
The open alternative to Salesforce, designed for AI
Alternative to: salesforce, hubspot, pipedrive, zoho crm
About
Versions (86)
twenty/v2.20.0
2026-07-10What’s Changed
- chore: bump version to 2.20.0 by @twenty-pr[bot] in https://github.com/twentyhq/twenty/pull/22639
- Unify featured/vetted app terminology to featured by @martmull in https://github.com/twentyhq/twenty/pull/22648
- 2.20
fieldMetadataandobjectMetadatastandardOverrides deprecation by @prastoin in https://github.com/twentyhq/twenty/pull/22650 - Fix root domain /authorize rendering workspace-scoped consent page by @ehconitin in https://github.com/twentyhq/twenty/pull/22641
- Fireflies: port app to the CallRecording standard object by @ehconitin in https://github.com/twentyhq/twenty/pull/22642
- Suppress Claude session URL in generated PR bodies and commits by @martmull in https://github.com/twentyhq/twenty/pull/22651
- feat(server): support server-scoped files via nullable workspaceId on file table by @martmull in https://github.com/twentyhq/twenty/pull/22587
- fix(rls): prefill RLS predicate fields when creating related records by @Aressand in https://github.com/twentyhq/twenty/pull/22620
- fix: corrected grammar in approved domain message by @brahmlower in https://github.com/twentyhq/twenty/pull/22646
- fix(workflow): handle IS/IS_NOT operand in text and array filters by @thomtrp in https://github.com/twentyhq/twenty/pull/22640
- fix(workflow): batch staled run reset to avoid Postgres param limit by @thomtrp in https://github.com/twentyhq/twenty/pull/22654
- fix: add workspace command to backfill missing AGENT source enum values by @etiennejouan in https://github.com/twentyhq/twenty/pull/22593
- fix: dropping favorites to the last position in a open folder by @parshipcy in https://github.com/twentyhq/twenty/pull/22360
- feat(workflow): scaffold core workflowVersion entity + trigger cache (phase 0) by @thomtrp in https://github.com/twentyhq/twenty/pull/21674
- fix(call-recorder): stream Recall media to storage to fix OOM by @ehconitin in https://github.com/twentyhq/twenty/pull/22652
- Make onboarding steps responsive on mobile by @bosiraphael in https://github.com/twentyhq/twenty/pull/22659
- feat(sdk): validate graph page-layout widgets at build time by @charlesBochet in https://github.com/twentyhq/twenty/pull/22559
- Merge app Public URL and Public Domains settings into one App URL section by @FelixMalfait in https://github.com/twentyhq/twenty/pull/22666
- fix(messaging): add sender name to IMAP/SMTP From headers by @PratikMahajan in https://github.com/twentyhq/twenty/pull/22603
- Fix email validation for over-length inline edits by @deep231w in https://github.com/twentyhq/twenty/pull/22426
- fix(docker): pin node base back to 24.16.0 to stop premature-close fetch failures by @charlesBochet in https://github.com/twentyhq/twenty/pull/22673
- i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22676
- feat(server): add public marketplace resolver for vetted app catalog by @martmull in https://github.com/twentyhq/twenty/pull/22647
- fix(docker): bump node base to 24.18.0 (all 24.17.0 CVE fixes + http.Agent premature-close fix) by @charlesBochet in https://github.com/twentyhq/twenty/pull/22677
- [Billing for self hosts] Add info in description by @ijreilly in https://github.com/twentyhq/twenty/pull/22660
- feat(messaging): message campaign delivery stats + views by @neo773 in https://github.com/twentyhq/twenty/pull/22661
- Chore/remove messaging mock specs by @neo773 in https://github.com/twentyhq/twenty/pull/22665
- Validate range version app dev sync by @prastoin in https://github.com/twentyhq/twenty/pull/22625
- refactor(app-marketplace): rename featured to vetted by @martmull in https://github.com/twentyhq/twenty/pull/22674
- feat(workflow): backfill workspace workflowVersion into core (phase A) by @thomtrp in https://github.com/twentyhq/twenty/pull/22663
- fix(front): page header title overlap, Cmd+K on page layout pages & stable tooltip id by @ijreilly in https://github.com/twentyhq/twenty/pull/22678
- feat(website): add public apps marketplace with one-click install by @martmull in https://github.com/twentyhq/twenty/pull/22611
- [Twenty Fireflies] Add calendar event summary and transcript UI components by @ehconitin in https://github.com/twentyhq/twenty/pull/22667
- feat(call-recorder): type application and server variables, make summary prompt rich text by @ehconitin in https://github.com/twentyhq/twenty/pull/22685
- feat(ai): optionally preselect fast or smart model when opening Ask AI by @Weiko in https://github.com/twentyhq/twenty/pull/22679
- chore: remove IS_MESSAGING_CALENDAR_WEBHOOK_ENABLED flag by @neo773 in https://github.com/twentyhq/twenty/pull/22680
- feat(ai-chat): inject current date & per-message timestamps into agent context by @etiennejouan in https://github.com/twentyhq/twenty/pull/22632
- chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22710
- fix(billing) - skip paying upgrade invoices already settled at finalization by @FelixMalfait in https://github.com/twentyhq/twenty/pull/22705
- i18n - website translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22683
- fix(billing): only reactivate suspended workspaces when subscription is in good standing by @etiennejouan in https://github.com/twentyhq/twenty/pull/22687
- feat(ai) - add light AI chat turn instrumentation (metrics + Sentry correlation) by @etiennejouan in https://github.com/twentyhq/twenty/pull/22692
- fix(sdk): report the connected server’s real version in dev version check by @ijreilly in https://github.com/twentyhq/twenty/pull/22670
- docs(apps): fix stale CLI commands in getting-started and operations pages by @martmull in https://github.com/twentyhq/twenty/pull/22688
- docs(apps): fix nonexistent SDK import paths and unsupported config in layout pages by @martmull in https://github.com/twentyhq/twenty/pull/22689
- docs(apps): align project structure and testing pages with the actual scaffold by @martmull in https://github.com/twentyhq/twenty/pull/22690
- docs(apps): document missing enum values and complete entity references by @martmull in https://github.com/twentyhq/twenty/pull/22691
- docs(apps): rewrite install hooks page — real client API, one explanation per concept by @martmull in https://github.com/twentyhq/twenty/pull/22694
- fix(create-twenty-app): working docs URL in final message, complete dev:add table in AGENTS.md by @martmull in https://github.com/twentyhq/twenty/pull/22695
- docs(apps): make the workspace functions URL the primary route-serving story by @martmull in https://github.com/twentyhq/twenty/pull/22693
- Welcome animation when a workspace is set up by @bosiraphael in https://github.com/twentyhq/twenty/pull/22622
- Fix flaky webhook delivery integration test (fixed sleep -> poll) by @martmull in https://github.com/twentyhq/twenty/pull/22699
- Fix flaky e2e tests: CI-realistic timeouts + retry-safe kanban field label by @martmull in https://github.com/twentyhq/twenty/pull/22701
- Fix flaky “read EINVAL” in integration tests: bump msw to 2.12.14 by @martmull in https://github.com/twentyhq/twenty/pull/22702
- ci: add app-docs drift check agent by @martmull in https://github.com/twentyhq/twenty/pull/22696
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22714
- i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22715
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22716
- feat(billing): collect credit card in-app when starting subscription from billing page by @FelixMalfait in https://github.com/twentyhq/twenty/pull/22706
- Rebuild email composer recipient fields as a structured chip input with person resolution and autocomplete by @FelixMalfait in https://github.com/twentyhq/twenty/pull/22668
- i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22723
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22725
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22726
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22728
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22729
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22730
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22731
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22732
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22733
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22735
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22738
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22741
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22743
- Fix onboarding entry animations not triggering on first load by @bosiraphael in https://github.com/twentyhq/twenty/pull/22724
- Fail App docs drift check ci if doc drift detected by @martmull in https://github.com/twentyhq/twenty/pull/22713
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22744
- perf(upsert) - tighten createMany upsert candidate lookup to avoid broad OR scans by @etiennejouan in https://github.com/twentyhq/twenty/pull/22721
- fix: prevent duplicate junction rows from double-fired checkbox clicks in multi-select menu items by @thomtrp in https://github.com/twentyhq/twenty/pull/22737
- Fix onboarding locale reverting to English after signup by @bosiraphael in https://github.com/twentyhq/twenty/pull/22675
- docs: surface the self-serve partner marketplace on high-intent pages by @rashad in https://github.com/twentyhq/twenty/pull/22719
- Centralize system field side effects + search field metadata by @prastoin in https://github.com/twentyhq/twenty/pull/22594
- fix(server): allow relabelling onto a field introduced in the same manifest sync by @prastoin in https://github.com/twentyhq/twenty/pull/22727
- i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22752
- Only propose configured apps during onboarding install step by @bosiraphael in https://github.com/twentyhq/twenty/pull/22712
- feat(workflow): add core workflow entity (syncable) + create-table by @thomtrp in https://github.com/twentyhq/twenty/pull/22746
- Add Last contact on Companies and Opportunities to last-contact app by @martmull in https://github.com/twentyhq/twenty/pull/22720
- i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22759
- i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22762
- i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22764
- chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22770
- Fix shard 12 integration test failure: regenerate stale object metadata snapshot from #22594 by @martmull in https://github.com/twentyhq/twenty/pull/22768
- fix(twenty-sdk): restore require/__filename/__dirname in rolldown ESM CLI bundle by @martmull in https://github.com/twentyhq/twenty/pull/22711
- Seed CHANGELOG.md and SETUP.md in create-twenty-app scaffold by @martmull in https://github.com/twentyhq/twenty/pull/22769
- feat(workflow): add universalIdentifier + applicationId to core workflowVersion by @thomtrp in https://github.com/twentyhq/twenty/pull/22747
- Fix integration test hang on unmocked requests + de-flake object metadata suite by @neo773 in https://github.com/twentyhq/twenty/pull/22758
- Improve application asset management by @martmull in https://github.com/twentyhq/twenty/pull/22564
- migrate 10 modules off NestjsQueryTypeOrmModule wiring by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/22763
- Gate connected-account webhook subscriptions behind config by @neo773 in https://github.com/twentyhq/twenty/pull/22761
- i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22777
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22745
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22779
- Allow CLI dev mode on catalog-synced apps without mutating the shared registration by @martmull in https://github.com/twentyhq/twenty/pull/22756
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22781
- Fix front-component serving on Safari, kill stale presigned caching, and cache built bundles client-side by @prastoin in https://github.com/twentyhq/twenty/pull/22672
- remove nestjs-query from app-token and drop unused createOneAppToken mutation by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/22765
- Fix front-component cache read rejection bypassing network fallback by @prastoin in https://github.com/twentyhq/twenty/pull/22785
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22784
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22787
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22788
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22789
- fix(front): render +N button for right-edge-clipped chips in expandable list by @thomtrp in https://github.com/twentyhq/twenty/pull/22748
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22793
- i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22794
- fix(twenty-partners): align createdAt view field with 2.19 deterministic ids and bump to 1.2.10 by @prastoin in https://github.com/twentyhq/twenty/pull/22782
- remove nestjs-query from user and workspace resolvers by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/22766
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22796
- Catch Cursor’s “Made with” attribution footer in blocked contributors check by @prastoin in https://github.com/twentyhq/twenty/pull/22791
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22798
- remove nestjs-query auto-resolver from index-metadata by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/22775
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22799
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22802
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22804
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22806
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22807
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22809
- docs: partner CTAs on high-traffic pages (workflows, data-model, docker-compose) by @rashad in https://github.com/twentyhq/twenty/pull/22808
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22810
- fix(workflow): scope one-active-per-workflow index to workspace by @thomtrp in https://github.com/twentyhq/twenty/pull/22795
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22812
- fix(front): clean stale morph relations from metadata store on object deletion by @ijreilly in https://github.com/twentyhq/twenty/pull/22681
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22813
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22814
- Run front components in a sandboxed opaque-origin iframe by @bosiraphael in https://github.com/twentyhq/twenty/pull/22588
- Fix SDK plan on non installed apps by @Weiko in https://github.com/twentyhq/twenty/pull/22805
- accepts any valid expression, not just an identifier by @martmull in https://github.com/twentyhq/twenty/pull/22778
- fix(emails): deterministic i18n catalog order to stop recurring i18n PR conflicts by @charlesBochet in https://github.com/twentyhq/twenty/pull/22803
- i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22816
- i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/22815
- Fix Cloudflare rate limiting during last-contact backfill by @martmull in https://github.com/twentyhq/twenty/pull/22811
New Contributors
- @Aressand made their first contribution in https://github.com/twentyhq/twenty/pull/22620
- @brahmlower made their first contribution in https://github.com/twentyhq/twenty/pull/22646
- @PratikMahajan made their first contribution in https://github.com/twentyhq/twenty/pull/22603
- @deep231w made their first contribution in https://github.com/twentyhq/twenty/pull/22426
Full Changelog: https://github.com/twentyhq/twenty/compare/twenty/v2.19.0…twenty/v2.20.0