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