This release includes 1 security fix for security teams reviewing exposed deployments.
Topics
+8 more
Affected surfaces
Summary
AI summaryBroad release touches server, chore, fix, and preview-env.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Medium |
harden CI against supply-chain attacks harden CI against supply-chain attacks Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Breaking | Medium |
[breaking: deploy server before front] feat(view-sort): pick sort sub-field inline on the chip [breaking: deploy server before front] feat(view-sort): pick sort sub-field inline on the chip Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Feature | Medium |
Add Twenty Claude skills package Add Twenty Claude skills package Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
add workspace toggle to sync internal emails add workspace toggle to sync internal emails Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
forward file input metadata forward file input metadata Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
Show logic function label instead of technical name in workflow UI Show logic function label instead of technical name in workflow UI Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
Support optional labels on logic-function input schema fields Support optional labels on logic-function input schema fields Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
migrate all remaining JWT token types to ES256 migrate all remaining JWT token types to ES256 Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
introduce ENCRYPTION_KEY env var with versioned envelope introduce ENCRYPTION_KEY env var with versioned envelope Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
Stop ai thinking if credits exhausted Stop ai thinking if credits exhausted Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
Dedicated REST controllers for object & field metadata Dedicated REST controllers for object & field metadata Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
Simplify create-twenty-app command Simplify create-twenty-app command Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
Twenty discord integration Twenty discord integration Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Feature | Medium |
one-hop relation filters in GraphQL API one-hop relation filters in GraphQL API Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Dependency | Medium |
bump react-dropzone from 14.2.3 to 14.4.1 bump react-dropzone from 14.2.3 to 14.4.1 Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Bugfix | Medium |
prevent admin panel workspace upgrade error from overflowing the table prevent admin panel workspace upgrade error from overflowing the table Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Bugfix | Medium |
preserve caret position on controlled input/textarea updates preserve caret position on controlled input/textarea updates Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Bugfix | Medium |
Fix application variable issue Fix application variable issue Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Bugfix | Medium |
handle ImapFlow socket errors instead of crashing the process handle ImapFlow socket errors instead of crashing the process Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Bugfix | Medium |
add subFieldName column early in upgrade sequence add subFieldName column early in upgrade sequence Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Bugfix | Medium |
scope workspace findOne in 1-21 backfill-datasource command scope workspace findOne in 1-21 backfill-datasource command Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Bugfix | Medium |
scope workspace findOne in ApplicationService scope workspace findOne in ApplicationService Source: granite4.1:8b-q6_K@2026-05-19 Confidence: high |
— |
| Refactor | Medium |
use workflow inputSchema to render boolean, number, and enum fields in code/logic function steps use workflow inputSchema to render boolean, number, and enum fields in code/logic function steps Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Refactor | Medium |
Refactor SAML relayState structure Refactor SAML relayState structure Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Refactor | Medium |
Ignore twenty versions constant files in prettier Ignore twenty versions constant files in prettier Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Refactor | Medium |
rename "Access" tab to "Invite" + fix e2e rename "Access" tab to "Invite" + fix e2e Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Other | Medium |
bump @mui/material from 7.3.8 to 7.3.11 bump @mui/material from 7.3.8 to 7.3.11 Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
| Other | Medium |
bump vite-plugin-svgr from 4.3.0 to 4.5.0 bump vite-plugin-svgr from 4.3.0 to 4.5.0 Source: granite4.1:8b-q6_K@2026-05-19 Confidence: low |
— |
Full changelog
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
accessTokenandrefreshTokenby @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--lightreaches 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
Breaking Changes
- [breaking: deploy server before front] feat(view-sort): pick sort sub-field inline on the chip
Security Fixes
- security: harden CI against supply-chain attacks
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Earlier breaking changes
- v2.8.0 Introduces a new permission flags system defined by apps
- v2.8.0 Permission flags system replaces previous permission model
- v2.7.0 Unify connected account permissions.
- v2.7.0 Encrypt `ConnectedAccount` connectionParameters field.
- v2.6.0 Rename permissionFlag to rolePermissionFlag and add catalog/backfill
Beta — feedback welcome: [email protected]