What's Changed
- i18n - docs translations by @github-actions[bot] in #20893
- Add definePermissionFlag for app-defined permission flags by @Weiko in #20887
- i18n - translations by @github-actions[bot] in #20895
- i18n - docs translations by @github-actions[bot] in #20898
- chore(server): remove unused REST→GraphQL HTTP bridge by @Weiko in #20897
- Publish new cli tool version by @martmull in #20903
- perf(website): cache prerendered pages in CF Cache API (withRegionalCache) by @FelixMalfait in #20905
- File service uniformize not found behavior and stream management by @prastoin in #20891
- Edit actor chip icon style & read-only behavior by @Bonapara in #18552
- Add application installation validation modale by @martmull in #20907
- chore(security): bump esbuild to ^0.28.0 to clear CVE-2025-68121 (CVSS 10.0) by @charlesBochet in #20902
- i18n - translations by @github-actions[bot] in #20910
- i18n - translations by @github-actions[bot] in #20911
- feat(twenty-partners): partnerContent catalog + TFT import improvements by @rashad in #20904
- [Website] Generate release notes manifest at build time by @mabdullahabaid in #20913
- Various fixes - some AI findings by @Weiko in #20921
- i18n - translations by @github-actions[bot] in #20924
- Fix/restore channel association scalar field metadata by @neo773 in #20920
- chore: bump version to 2.9.0 by @twenty-pr[bot] in #20925
- i18n - docs translations by @github-actions[bot] in #20926
- Refactor and centralize file mimeType integrity check and sanitization by @prastoin in #20889
- i18n - translations by @github-actions[bot] in #20930
- Fix workflow step output schema not reflecting user-renamed step name by @thomtrp in #20922
- Fix cross version upgrade for 2.8 by @prastoin in #20927
- fix(billing) - fix orphaned stripe subs 2/2 by @etiennejouan in #20916
- Fix index cache computation by @prastoin in #20933
- [Website] Restore shared build dependency for typecheck by @mabdullahabaid in #20936
- remove ai-model-preferences var env and config by @etiennejouan in #20859
- chore: sync AI model catalog from models.dev by @github-actions[bot] in #20948
- Basic app logo fixes by @martmull in #20919
- i18n - translations by @github-actions[bot] in #20951
- feat: raise FILES field max number of values from 10 to 60 by @FelixMalfait in #20950
- fix(role): rebind API keys + agents before deleting their role by @FelixMalfait in #20935
- i18n - translations by @github-actions[bot] in #20952
- fix(website) - fix getPartners by @etiennejouan in #20947
- Add a Table display mode to relation field widgets by @Weiko in #20929
- i18n - translations by @github-actions[bot] in #20959
- Deprecate dummy enterprise key 1/2 by @ijreilly in #20890
- i18n - translations by @github-actions[bot] in #20963
- fix(website): use Stripe fetch client on Cloudflare Workers by @FelixMalfait in #20966
- fix(front): ignore IME composition Enter in input hotkeys by @fyujiwara in #20958
- fix: separate initial timeline loading from fetchMore loading state by @DeviSriSaiCharan in #20896
- refactor(website): replace axios with native fetch by @FelixMalfait in #20967
- tt-fix-logic-function-error-handling by @thomtrp in #20928
- revert(navigation-drawer): unwanted desktop design changes from #20634 by @ehconitin in #20955
- Display which remote is used when twenty-sdk runs command by @martmull in #20969
- Fix page layout widget tab moves by @ehconitin in #20915
- i18n - translations by @github-actions[bot] in #20975
- fix(contact-creation): handle common email display-name shapes when auto-creating People by @clivemeister in #20639
- Fix error when token invalid by @martmull in #20972
- Fix focus in front components inputs by @bosiraphael in #20961
- feat(twenty-orm): introduce WorkspaceScopedRepository for core/metadata workspace-scoped entities by @FelixMalfait in #20953
- i18n - translations by @github-actions[bot] in #20978
- Display application info in workflow side panel by @martmull in #20976
- i18n - translations by @github-actions[bot] in #20979
- Ses outbound followup by @neo773 in #20610
- i18n - translations by @github-actions[bot] in #20982
- fix: exclude system objects and workflow/dashboard from AI/MCP write tool descriptors by @mvanhorn in #20973
- Fix lambda timeout diagnostics by @thomtrp in #21002
- fix: refresh admin panel feature flags after toggling by @FelixMalfait in #21007
- feat(settings): move email handles and emailing domains to dedicated Email page by @FelixMalfait in #21008
- i18n - translations by @github-actions[bot] in #21013
- fix(ai): expose MORPH_RELATION join columns in AI/MCP tool schemas by @FelixMalfait in #21012
- Export STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS by @martmull in #21010
- chore(deps): bump @apollo/client from 4.1.6 to 4.2.0 by @dependabot[bot] in #20993
- Fix twenty sdk billing exports by @bosiraphael in #21016
- i18n - docs translations by @github-actions[bot] in #21019
- Support the "Me" filter for workspace members in dashboard widgets and add multi select by @bosiraphael in #20971
- Add darkmode for oAuth screen by @martmull in #21005
- i18n - translations by @github-actions[bot] in #21021
- i18n - translations by @github-actions[bot] in #21022
- Fix playwright CI by @Weiko in #21024
EncryptedStringPlaintextStringbranded string types by @prastoin in #21001- Fix AI permission gating: use Ask AI for chat UI, AI Settings for admin endpoints by @FelixMalfait in #21030
- refactor(twenty-orm): migrate 23 grandfathered entities to WorkspaceScopedRepository by @FelixMalfait in #20987
- fix(contact-creation): enrich missing names on auto-created contacts by @FelixMalfait in #21018
- chore(deps): bump js-cookie from 3.0.5 to 3.0.7 by @dependabot[bot] in #20992
- Fix: focus stack overwritten when auto-opening title cell on new record by @bosiraphael in #21029
- refactor(agents): split tool resolution into native and action rails by @ehconitin in #20331
- i18n - translations by @github-actions[bot] in #21032
- fix: correct typo occurence -> occurrence in metadata-event-emitter.ts by @ltianyi992 in #21036
- fix(dashboards): isolate pie chart slice labels per widget by @FelixMalfait in #21034
- fix(address): show saved address in record detail when street1 is null by @FelixMalfait in #21033
- chore(deps): bump typescript from 5.9.2 to 5.9.3 by @dependabot[bot] in #20991
- chore: sync AI model catalog from models.dev by @github-actions[bot] in #21041
- Fix workflow creation on view filtered by status by @ijreilly in #21027
- Fix latency spike on application lookup by @martmull in #21042
- [Dashboards] Remove gauge chart types and code by @ehconitin in #20410
- i18n - website translations by @github-actions[bot] in #21045
- i18n - translations by @github-actions[bot] in #21047
- i18n - translations by @github-actions[bot] in #21048
- Fix admin pannel server variable config tab by @martmull in #21017
- i18n - translations by @github-actions[bot] in #21050
- fix: harden email-group SES provisioning, cleanup, and inbound replay by @neo773 in #21046
- 2439 improve command menu item display in right panel by @martmull in #21020
- fix(sso): accept HTTP-POST binding and surface descriptive parser errors by @FelixMalfait in #21051
- i18n - translations by @github-actions[bot] in #21055
- Docs update: Calling a logic function from a front component by @bosiraphael in #21057
- fix: resolve workflow form step auto-open race condition by @thomtrp in #21053
- i18n - docs translations by @github-actions[bot] in #21062
- Docs: clarify numberOfSelectedRecords usage for RECORD_SELECTION items by @bosiraphael in #21059
- feat(server): opt-in FRONT_AUTO_BASE_URL for hostname-relative API URL by @LazyBouy in #20504
- i18n - docs translations by @github-actions[bot] in #21064
- [Website] i18n module, page-local sections, translatable copy by @mabdullahabaid in #21082
- fix(ai): route xAI search through Responses API as native tools by @ehconitin in #21037
- fix: SSE event stream reconnection after idle connection death by @thomtrp in #21061
- fix(front): scroll long content in rich text editor by @Nik1125 in #20319
- fix(twenty-sdk): minify front-component bundles & set NODE_ENV=production in deploy build by @8Maverik8 in #20937
- fix(front): keep app variable cache in sync after update by @nicolas-besnard in #20861
- Twenty server:Fix REST pagination issues by @git-init-priyanshu in #20980
- fix(kanban): contain checkbox hover reveal within card bounds by @ehconitin in #21100
- feat(settings): discovery hero rollout + ephemeral playground token by @FelixMalfait in #21072
- i18n - translations by @github-actions[bot] in #21103
- Fix array-typed parameters in code/logic-function action forms by @ijreilly in #21102
- fix navigation item tree breadcrumb active state by @ehconitin in #21101
- Billing - Fix credit upgrade invoice error by @etiennejouan in #21097
- fix: broadcast timeline activities to live SSE subscriptions by @Weiko in #21104
- Fix else branches not properly skipped in nested if/else workflows by @thomtrp in #20938
- fix: show relation field changes in the timeline by @parshipcy in #21052
- i18n - translations by @github-actions[bot] in #21112
- Bump playwright by @prastoin in #21113
- fix: return proper FORBIDDEN GraphQL errors from ApiKeyResolver by @Weiko in #21107
- Strictly type encryption rotation key site maps constants through entity type derivation by @prastoin in #21085
- Public assets server s3 redirection by @prastoin in #21108
- chore(settings): address review comments from PR 21072 by @FelixMalfait in #21121
- i18n - translations by @github-actions[bot] in #21128
- fix: REST cursor encoding for nested order_by composite fields by @mvanhorn in #20974
- i18n - website translations by @github-actions[bot] in #21088
- docs: remove the self-host cloud providers page by @FelixMalfait in #21134
- fix: lowercase OAuth handle to prevent duplicate connected accounts by @neo773 in #21120
- feat: expose CURRENCY field settings (format/decimals) in shared types by @josephj in #21090
- Front component s3 redirect by @prastoin in #21116
- [Website] Partner application wizard + logic-function handover by @rashad in #21039
- feat(twenty-partners): expose partnerScope on list + by-slug endpoints by @rashad in #21126
- i18n - website translations by @github-actions[bot] in #21135
- feat(twenty-partners): submit-partner-application HTTP logic function by @rashad in #21040
- feat(website): surface partner Categories (partnerScope) in marketplace, drop deploymentExpertise facet by @rashad in #21127
- fix(twenty-front): enable text selection for display-mode fields by @dev-kp-eloper in #21068
- fix(ai): correct find-records tool description (top-level filter fields) by @richroberts-prog in #21109
- feat(logic-function): add LIVE / PREBUILT execution modes by @charlesBochet in #20873
- i18n - translations by @github-actions[bot] in #21141
- fix(record-table): keep column header dropdown open after Move Left/Right by @prakhartripath0001 in #21015
- Prevent conditional availability variables from being used at runtime by @bosiraphael in #21110
- chore(twenty-partners): bump app version to 0.3.3 by @rashad in #21140
- feat(settings): move settings chrome into a single rounded card by @FelixMalfait in #21131
- Always show Favorites section and add favorites via the side panel by @FelixMalfait in #21087
- i18n - translations by @github-actions[bot] in #21148
- i18n - translations by @github-actions[bot] in #21149
- chore(twenty-partners): refine design-doc skill doctrine by @rashad in #21151
- Allow functional iframes in front components while blocking sandbox escapes by @bosiraphael in #21145
- fix: block self-impersonation in admin panel by @parshipcy in #21130
- i18n - translations by @github-actions[bot] in #21154
- feat: allow many-to-one relations as advanced filter leaves by @FelixMalfait in #21147
- i18n - website translations by @github-actions[bot] in #21137
- refactor(server): merge duplicate
TypeOrmModule.forFeaturecalls inMessagingMessageCleanerModuleby @Rpaudel379 in #21150 - refactor(twenty-server): collapse workspace migration build orchestrator by @charlesBochet in #21144
- Bonapara/twenty codex plugin by @Bonapara in #20857
- Fix front component pointer/mouse event coordinates by @bosiraphael in #21117
- refactor(server): split LambdaDriver and LocalDriver into focused sub-services by @charlesBochet in #21153
- fix(twenty-server): fix AI tools description for SELECT view filter values by @thomtrp in #21156
- feat(partners): remove Project Budget Typical field, rework partner views & nav order by @rashad in #21162
- feat(website): partner marketplace UI fixes & CTA improvements by @rashad in #21163
- chore: sync AI model catalog from models.dev by @github-actions[bot] in #21170
- (partners): bump app version 0.3.3 -> 0.3.4 by @rashad in #21167
- Fix Unzipped size must be smaller than 250Mb error by @martmull in #21172
- i18n - website translations by @github-actions[bot] in #21165
- fix: update yarn.lock after removing dotenv and zod from twenty-sdk by @rashad in #21174
- Refactor email composer by @prastoin in #21177
- fix(ai-chat): refresh JWT token on SSE reconnect to prevent login red… by @b3nito404 in #20176
- Fix fields widget new field visibility by @Weiko in #21111
- fix: eliminate workflow editing flicker on active-to-draft transitions by @thomtrp in #21176
- i18n - translations by @github-actions[bot] in #21189
- perf(ai) - per-tool schema resolution in resolveSchemas by @etiennejouan in #21188
- Fix lambda error by @martmull in #21179
- Provide additional logsobservability to workflow runs (per node) by @ijreilly in #21142
- feat(mcp) - optimize instruction prompt and hide get_tool_catalog by @etiennejouan in #21183
- i18n - translations by @github-actions[bot] in #21191
- Fix: Not able to add multiple handles to Blocklist in settings/accounts by @git-init-priyanshu in #21049
- i18n - translations by @github-actions[bot] in #21192
- Update axios in package.json of seed-dependencies by @mabdullahabaid in #21190
- fix(ai) - optimize crud tools by @etiennejouan in #21133
- i18n - docs translations by @github-actions[bot] in #21195
- Fix axios related dependabot alerts generated against root yarn.lock by @mabdullahabaid in #21187
- feat(ci): integrate Argos visual regression via vitest screenshots by @charlesBochet in #21210
- feat(settings): add Logs as a dedicated tab in General settings by @FelixMalfait in #21180
- chore: sync AI model catalog from models.dev by @github-actions[bot] in #21212
- fix(front): settings skeleton, app-detail header & empty favorites by @FelixMalfait in #21209
- chore(deps): bump @mantine/hooks from 8.3.15 to 8.3.18 by @dependabot[bot] in #21203
- chore(deps-dev): bump @types/passport-microsoft from 2.1.0 to 2.1.1 by @dependabot[bot] in #21204
- chore(deps-dev): bump prettier from 3.4.2 to 3.8.3 by @dependabot[bot] in #21205
- fix(upgrade): resequence workflow step logs command by @ehconitin in #21213
- Set 200 code for post requests by @martmull in #21214
[AUDIT]Run knip over twenty-server by @prastoin in #21159- feat(ci): simplify visual regression dispatch to twenty-ui only by @charlesBochet in #21215
New Contributors
- @fyujiwara made their first contribution in #20958
- @DeviSriSaiCharan made their first contribution in #20896
- @clivemeister made their first contribution in #20639
- @mvanhorn made their first contribution in #20973
- @ltianyi992 made their first contribution in #21036
- @LazyBouy made their first contribution in #20504
- @Nik1125 made their first contribution in #20319
- @8Maverik8 made their first contribution in #20937
- @nicolas-besnard made their first contribution in #20861
- @parshipcy made their first contribution in #21052
- @dev-kp-eloper made their first contribution in #21068
- @richroberts-prog made their first contribution in #21109
- @prakhartripath0001 made their first contribution in #21015
- @b3nito404 made their first contribution in #20176
Full Changelog: v2.8.0...v2.9.0