What's Changed
- Stop rejecting application token on calendar and message events requests by @martmull in #20440
- fix: update broken AI documentation link by @ajitkumarsaini02 in #20401
- Upgrade sdk version by @martmull in #20444
- chore: bump version to 2.5.0 by @twenty-pr[bot] in #20446
- chore(members): rename "Access" tab to "Invite" + fix e2e by @FelixMalfait in #20447
- i18n - translations by @github-actions[bot] in #20449
- Refactor SAML relayState structure by @prastoin in #20430
- Use workflow inputSchema to render boolean, number, and enum fields in code/logic function steps by @abdulrahmancodes in #20439
- Ignore twenty versions constant files in prettier by @prastoin in #20448
- [codex] Add Twenty Claude skills package by @Bonapara in #20450
- Encrypt connected account
accessTokenandrefreshTokenby @prastoin in #20441 - Stop rejecting application install when APP_VERSION is wrong by @martmull in #20443
- i18n - docs translations by @github-actions[bot] in #20451
- fix: prevent admin panel workspace upgrade error from overflowing the table by @charlesBochet in #20394
- [Website] Replace feature card screenshots with interactive visuals by @mabdullahabaid in #20442
- refactor(file v2) - deletion by @etiennejouan in #20356
- i18n - website translations by @github-actions[bot] in #20454
- fix(front-component): preserve caret position on controlled input/textarea updates by @QuantumByteMaster in #20416
- Fix(UI): Side panel having two scrollbars by @git-init-priyanshu in #20456
- ci(preview-env): replace bore.pub with Cloudflare quick tunnel by @FelixMalfait in #20459
- feat(messaging): add workspace toggle to sync internal emails by @neo773 in #20457
- feat(front-component-renderer): forward file input metadata by @charlesBochet in #20458
- i18n - translations by @github-actions[bot] in #20461
- ci(preview-env): use --light seed so Apple is the default workspace by @FelixMalfait in #20464
- Fix lint:diff-with-main oxlint rules build dependency by @bitloi in #20389
- Show logic function label instead of technical name in workflow UI by @abdulrahmancodes in #20470
- Support optional labels on logic-function input schema fields by @abdulrahmancodes in #20471
- fix(ci): probe real schema in breaking-changes server readiness check by @FelixMalfait in #20465
- ci(preview-env): drop yarn
--separator so--lightreaches the seed command by @FelixMalfait in #20479 - chore: remove dead feature flags by @charlesBochet in #20460
- Billing - Add default ff by @etiennejouan in #20480
- security: harden CI against supply-chain attacks by @neo773 in #20476
- fix(kanban): give title full width when card is not hovered by @FelixMalfait in #20455
- chore: add an icon to why-twenty page and update preview by @mabdullahabaid in #20482
- i18n - website translations by @github-actions[bot] in #20495
- Upgrade cli tools by @martmull in #20496
- feat(server): asymmetric JWT signing with kid + key rotation table by @charlesBochet in #20467
- Improve linear app by @martmull in #20453
- fix: map FlatEntityMaps and WorkspaceMigrationRunner exceptions to proper status codes on REST and GraphQL by @Weiko in #20494
- Fix application variable issue by @martmull in #20500
- chore: sync AI model catalog from models.dev by @github-actions[bot] in #20523
[twenty-server]no floating promises lint rule by @prastoin in #20499- feat(server): migrate all remaining JWT token types to ES256 by @charlesBochet in #20513
- Fix phone unique constraints by @MkDev11 in #20261
- Dedicated REST controllers for object & field metadata by @Weiko in #20364
[twenty-server]no-misused-promise lint by @prastoin in #20529- fix(ai-agent-node) - agent node execution error by @etiennejouan in #20534
- fix(server): add Apple seed workspace as fallback for single-workspace mode by @Rpaudel379 in #20498
- fix(navigation): settings drawer should never appear collapsed by @GusFromSpace in #20505
- feat(ai-chat) - Stop ai thinking if credits exhausted by @etiennejouan in #20526
- fix(server): handle ImapFlow socket errors instead of crashing the process by @davidfarah2003 in #20510
- feat(twenty-server): introduce ENCRYPTION_KEY env var with versioned envelope by @charlesBochet in #20528
- i18n - translations by @github-actions[bot] in #20547
- Inject none secret env variables into front components by @martmull in #20511
- fix - nav drawer expansion by @etiennejouan in #20545
- chore(billing) - remove feature flag by @etiennejouan in #20531
- i18n - translations by @github-actions[bot] in #20548
- i18n - docs translations by @github-actions[bot] in #20549
- Simplify create-twenty-app command by @martmull in #20512
- i18n - translations by @github-actions[bot] in #20551
- i18n - docs translations by @github-actions[bot] in #20553
- [breaking: deploy server before front] feat(view-sort): pick sort sub-field inline on the chip by @FelixMalfait in #20445
- i18n - translations by @github-actions[bot] in #20554
- feat(upgrade): emit structured logfmt logs for upgrade flow by @charlesBochet in #20539
- fix(auth): preserve returnToPath across Google/Microsoft SSO redirects by @FelixMalfait in #20537
- Add default value to apiKey for authentication method by @martmull in #20552
- feat(upgrade): expose twenty_upgrade_workspaces_up_to_date_total by @charlesBochet in #20555
- chore(page-layout): remove IS_RECORD_PAGE_LAYOUT_* feature flags by @charlesBochet in #20556
- feat(twenty-server): migrate remaining at-rest encryption sites to versioned envelope by @charlesBochet in #20550
- chore(deps): bump react-dropzone from 14.2.3 to 14.4.1 by @dependabot[bot] in #20560
- chore(auth): drop unused workspacePersonalInviteToken from SSO state by @FelixMalfait in #20557
- chore(deps-dev): bump @mui/material from 7.3.8 to 7.3.11 by @dependabot[bot] in #20562
- chore(deps-dev): bump vite-plugin-svgr from 4.3.0 to 4.5.0 by @dependabot[bot] in #20561
- Update OAuth consent modal design by @Bonapara in #20540
- Regrant id token write to claude for oidc swap by @prastoin in #20564
- i18n - translations by @github-actions[bot] in #20567
- i18n - translations by @github-actions[bot] in #20569
- [Website] Replace product page hero visual with interactive CRM depicting AI chat in action. by @mabdullahabaid in #20566
- chore(server): drop unused postgresCredentials feature by @charlesBochet in #20573
- Fix time consuming search ilike fallback by @Weiko in #20544
- [Website] Refine feature card scroll entrance to a subtle opacity fade by @mabdullahabaid in #20574
- fix(auth): exclude /authorize from MinimalMetadataGater loading gate by @FelixMalfait in #20572
- fix(server): decouple SDK client generation from workspace activation by @neo773 in #20514
- chore(.vscode): add remaining packages to VSCode workspace by @Rpaudel379 in #20570
- Twenty discord integration by @abdulrahmancodes in #20530
- feat(server): migrate TOTP secret encryption to SecretEncryptionService by @charlesBochet in #20577
- feat(twenty-server): one-hop relation filters in GraphQL API by @FelixMalfait in #20527
- i18n - translations by @github-actions[bot] in #20582
- fix(server): scope workspace findOne in 1-21 backfill-datasource command by @charlesBochet in #20581
- fix(server): scope workspace findOne in ApplicationService by @charlesBochet in #20583
- fix(server): add subFieldName column early in upgrade sequence by @charlesBochet in #20584
New Contributors
- @ajitkumarsaini02 made their first contribution in #20401
- @MkDev11 made their first contribution in #20261
- @GusFromSpace made their first contribution in #20505
- @davidfarah2003 made their first contribution in #20510
Full Changelog: v2.4.0...v2.5.0