v2.2.0

twentyhq/twentyv2.2.0May 4, 2026by Weiko

AI Summary

This release adds CalDAV recurring events support, Digest authentication, and redesigns the application content tab with logic function settings. It also includes Gmail body extraction improvements and SSRF hardening.

Key Highlights

  • CalDAV recurring calendar events
  • CalDAV Digest authentication support
  • Application content tab redesign with layout detail pages
  • Gmail body extraction from nested MIME parts
  • SSRF hardening

New Features

  • Recurring calendar events for Google Calendar
  • CalDAV Digest auth
  • Application redesign
  • Logic function settings
  • Gmail nested MIME parsing

Full Release Notes

## What's Changed
* chore: remove accidentally committed .claude-pr/ directory by @turantekin in https://github.com/twentyhq/twenty/pull/20036
* Bump twenty-sdk, twenty-client-sdk, create-twenty-app to 2.1.0-canary.1 by @charlesBochet in https://github.com/twentyhq/twenty/pull/20038
* chore(server): bump current version to 2.2.0 by @charlesBochet in https://github.com/twentyhq/twenty/pull/20040
* Bump twenty-sdk, twenty-client-sdk, create-twenty-app to 2.1.0 by @charlesBochet in https://github.com/twentyhq/twenty/pull/20041
* chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20045
* feat(front-component-renderer): forward offset/movement coordinates on serialised events by @charlesBochet in https://github.com/twentyhq/twenty/pull/20046
* feat(github-connector): exclude self-reviews from review counts by @charlesBochet in https://github.com/twentyhq/twenty/pull/20050
* Make `twenty-front` build env agnostic by @prastoin in https://github.com/twentyhq/twenty/pull/20055
* [AI] Drop 'serialization' from tool output naming by @ehconitin in https://github.com/twentyhq/twenty/pull/20052
* [AI] ai usage line chart date gap filling by @ehconitin in https://github.com/twentyhq/twenty/pull/20048
* fix(logic-function): serialize LocalDriver layer builds with cache lock by @charlesBochet in https://github.com/twentyhq/twenty/pull/20054
* Add admin avatars and app logos by @Bonapara in https://github.com/twentyhq/twenty/pull/20001
* chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20073
* `[CI]` Prevent previous version upgrade sequence mutation by @prastoin in https://github.com/twentyhq/twenty/pull/20075
* fix(logic-function): forward raw request body for HMAC signature verification by @charlesBochet in https://github.com/twentyhq/twenty/pull/20061
* Documentation update by @BOHEUS in https://github.com/twentyhq/twenty/pull/20059
* gmail extract body from deeply nested MIME parts by @neo773 in https://github.com/twentyhq/twenty/pull/19989
* fix(messaging): refactor SentMessagePersistenceService by @neo773 in https://github.com/twentyhq/twenty/pull/20077
* fix(server): match IMAP \Noselect attribute case-insensitively by @rrrodzilla in https://github.com/twentyhq/twenty/pull/20043
* docs: document rawBody on RoutePayload by @charlesBochet in https://github.com/twentyhq/twenty/pull/20080
* [Website] locale-segment routing and shared Lingui factory by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/20079
* Filtered upgrade logs when stopping before starting next instance segment by @prastoin in https://github.com/twentyhq/twenty/pull/20078
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20081
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20083
* [AI] Collapse NativeToolBinder to a single bind() entry by @ehconitin in https://github.com/twentyhq/twenty/pull/20051
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20087
* Gate AI chat navigation entries by AI_SETTINGS permission by @FelixMalfait in https://github.com/twentyhq/twenty/pull/20089
* chore: export the enum view calendar layout to avoid typing errors on apps by @abusarah-tech in https://github.com/twentyhq/twenty/pull/20090
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20093
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20095
* feat(sentry): propagate workspace context to all spans by @FelixMalfait in https://github.com/twentyhq/twenty/pull/20064
* fix(ai-billing): bill thread title generation and tool-call repair by @FelixMalfait in https://github.com/twentyhq/twenty/pull/20067
* fix(ai-billing): bill POST /rest/ai/generate-text usage to ClickHouse by @FelixMalfait in https://github.com/twentyhq/twenty/pull/20066
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20097
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20100
* chore: use navigation menu item type into the generated navigation menu layout by @abusarah-tech in https://github.com/twentyhq/twenty/pull/20099
* chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20106
* fix(ai-billing): bill executeAgent in a finally block so failed runs don't leak by @FelixMalfait in https://github.com/twentyhq/twenty/pull/20065
* refactor: standardize JsonStringified casing by @saisathwikpeddireddy in https://github.com/twentyhq/twenty/pull/20101
* Fix orphan views by deferring record table widget view creation to dashboard save by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/20006
* Stop reseting isListed and is featured after each sync by @martmull in https://github.com/twentyhq/twenty/pull/20111
* Redesign application content tab + logic function settings; add Layout detail pages by @FelixMalfait in https://github.com/twentyhq/twenty/pull/20056
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20114
* Billing - optimize usageEvent CH table by @etiennejouan in https://github.com/twentyhq/twenty/pull/20019
* fix(rest-api): prevent silent pagination failures and include valid options in enum validation errors by @ratishjain12 in https://github.com/twentyhq/twenty/pull/20092
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20115
* refactor: harden website runtime, routing, and hero visual by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/20113
* Fix upgrade --start-from-workspace-id by @prastoin in https://github.com/twentyhq/twenty/pull/20116
* chore: sync AI model catalog from models.dev by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20122
* Copy twenty-shared in twenty-website deploy by @prastoin in https://github.com/twentyhq/twenty/pull/20124
* add UpsertViewWidget resolver by @abdulrahmancodes in https://github.com/twentyhq/twenty/pull/20053
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20125
* Fix click house migration by @prastoin in https://github.com/twentyhq/twenty/pull/20127
* Fix stale UI state after stop-impersonation by @FelixMalfait in https://github.com/twentyhq/twenty/pull/20088
* fix(ai): render record links inside markdown headings in AI chat by @ehconitin in https://github.com/twentyhq/twenty/pull/20074
* ssrf hardening by @neo773 in https://github.com/twentyhq/twenty/pull/19963
* refactor: optimize website visual runtime by @mabdullahabaid in https://github.com/twentyhq/twenty/pull/20120
* [Command Menu] Fix record-selection command filtering in edit mode by @ehconitin in https://github.com/twentyhq/twenty/pull/20034
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20138
* add recurring calendar events for google cal by @neo773 in https://github.com/twentyhq/twenty/pull/19748
* Ai Chat - Caching optim by @etiennejouan in https://github.com/twentyhq/twenty/pull/20126
* CalDAV: support Digest auth by @neo773 in https://github.com/twentyhq/twenty/pull/20135
* fix(billing): gate AI credit-cap at entry points instead of workflow executor by @FelixMalfait in https://github.com/twentyhq/twenty/pull/20096
* Fix application icons by @martmull in https://github.com/twentyhq/twenty/pull/20142
* chore(deps-dev): bump @babel/preset-typescript from 7.24.7 to 7.28.5 by @dependabot[bot] in https://github.com/twentyhq/twenty/pull/20151
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20155
* i18n - translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20156
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20157
* chore(deps): bump postal-mime from 2.6.1 to 2.7.4 by @dependabot[bot] in https://github.com/twentyhq/twenty/pull/20150
* chore(deps): bump @sentry/profiling-node from 10.27.0 to 10.51.0 by @dependabot[bot] in https://github.com/twentyhq/twenty/pull/20149
* Add twenty sdk server upgrade command by @martmull in https://github.com/twentyhq/twenty/pull/20158
* i18n - docs translations by @github-actions[bot] in https://github.com/twentyhq/twenty/pull/20161
* fix(security): reject ?token= URL query parameter for authentication by @FelixMalfait in https://github.com/twentyhq/twenty/pull/20154
* Update doc screenshots by @martmull in https://github.com/twentyhq/twenty/pull/20160
* Select application excluding logo by @Weiko in https://github.com/twentyhq/twenty/pull/20159

## New Contributors
* @turantekin made their first contribution in https://github.com/twentyhq/twenty/pull/20036
* @rrrodzilla made their first contribution in https://github.com/twentyhq/twenty/pull/20043
* @saisathwikpeddireddy made their first contribution in https://github.com/twentyhq/twenty/pull/20101
* @ratishjain12 made their first contribution in https://github.com/twentyhq/twenty/pull/20092

**Full Changelog**: https://github.com/twentyhq/twenty/compare/v2.1.0...v2.2.0