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