Skip to content

twenty/v2.19.0

Latest

Choose a tag to compare

@prastoin prastoin released this 08 Jul 07:54
435073e

What's Changed

  • fix(page-layout): render relation field widgets in table display mode by @ehconitin in #22220
  • chore: bump version to 2.19.0 by @twenty-pr[bot] in #22363
  • Fix draft send: read messageChannel from core, not workspace ORM by @neo773 in #22365
  • messaging remove dead workspace entities by @neo773 in #22366
  • i18n - docs translations by @github-actions[bot] in #22371
  • [FIX_TYPECHECK_ON_MAIN] Add missing inviteTeamMaxCreditsReward to OnboardingConfig type by @prastoin in #22370
  • Front fallback flat object search field metadata by @prastoin in #22369
  • chore: auto pre-translate untranslated docs strings before Crowdin pull by @abdulrahmancodes in #22334
  • [REQUIRED FOR 2.18 RELEASE] Show the upgrade-plan step at the end of V1 onboarding by @bosiraphael in #22368
  • feat(server): make workspace Custom application carry an applicationRegistration so custom labels are translatable by @FelixMalfait in #22378
  • fix: drop domain from computed remote name when subdomain present by @martmull in #22376
  • chore: sync AI model catalog from models.dev by @github-actions[bot] in #22387
  • fix(workflow): stop relative date filter from crashing on empty/invalid date values by @abdulrahmancodes in #22384
  • Backfill webhook subscriptions for existing connected accounts by @neo773 in #22314
  • feat: show group-by context in record show breadcrumb by @parshipcy in #22247
  • Handle field isNullable update by @Weiko in #22362
  • fix(dpa): correct US processor entity to Twenty.com PBC by @mabdullahabaid in #22393
  • Add install your first apps onboarding V2 step by @bosiraphael in #22347
  • feat(twenty-sdk): terraform-style plan/apply for app metadata sync by @Weiko in #22372
  • SearchVector derivation via migration-scoped index (alt to #2622 __warmedUpCache) by @prastoin in #22389
  • Add smooth page transitions to onboarding v2 by @bosiraphael in #22392
  • i18n - docs translations by @github-actions[bot] in #22400
  • feat(last-contact): design for Last contact by + Last contact item by @martmull in #22308
  • Update onboarding v2 credit reward amounts by @bosiraphael in #22399
  • Let the sign-in screen scroll when its content overflows the viewport by @bosiraphael in #22397
  • fix(billing): link billing emails to the workspace subdomain by @FelixMalfait in #22401
  • Add installed workspaces view to application registration by @martmull in #22359
  • refactor(server): unify metadata override-blob computation (step 1 of override unification) by @FelixMalfait in #22404
  • Fix BlockNote placeholder alignment + paddings by @Bonapara in #22409
  • Update app name by @martmull in #22410
  • feat(sdk): translate front-component strings with t()/Trans/useTranslate by @FelixMalfait in #22301
  • Improve billing settings UI by @Bonapara in #22377
  • i18n - docs translations by @github-actions[bot] in #22413
  • Add twenty-app keyword by @martmull in #22415
  • Fix lint by @martmull in #22416
  • chore: sync DPA sub-processors from trust center by @github-actions[bot] in #22403
  • i18n - docs translations by @github-actions[bot] in #22420
  • test(server): fix DPA Annex C test broken by sub-processor sync action by @FelixMalfait in #22422
  • feat(shared): require defaultValue on non-nullable field manifests by @martmull in #22419
  • feat(twenty-sdk): include app readme in published package by @martmull in #22431
  • fix(billing) - invalidate activationStatus after billing event by @etiennejouan in #22414
  • fix(website): tighten product-feature spotlight height and align bento spacing by @mabdullahabaid in #22428
  • feat(website): add Product to menu + footer nav, move Why into Resources dropdown by @mabdullahabaid in #22429
  • i18n - website translations by @github-actions[bot] in #22436
  • Add Last contact app to onboarding v2 installable apps by @bosiraphael in #22433
  • fix: bump json-2-csv 5.5.10 -> 5.5.11 (Dependabot) by @mabdullahabaid in #22438
  • refactor(schema): reorganize IndexField and related types by @abdulrahmancodes in #22439
  • fix(website): center the User Guide nav preview image by @mabdullahabaid in #22445
  • refactor(server): unify the two metadata override mechanisms into one by @FelixMalfait in #22417
  • fix(ai) - Fix date stripped from agent tool output by @etiennejouan in #22443
  • feat(ai) - add delete_workflow tool by @etiennejouan in #22432
  • chore(server): ship the 2.20 standardOverrides drop as a dormant command by @FelixMalfait in #22448
  • fix(website): restore footer CTA buttons on the light card inside the dark stage by @mabdullahabaid in #22447
  • fix(server): apply row-level security predicates to API key and application principals by @FelixMalfait in #22456
  • fix(front): render pinned command-menu buttons inline in page header by @Weiko in #22446
  • fix(front): hide sub-item tree connector in navigation drag preview by @Weiko in #22442
  • feat(server): improve traceability of flat-entity map mutation errors by @prastoin in #22396
  • feat(ai): surface AI chat stream failures through one typed error channel by @FelixMalfait in #22434
  • fix(twenty-sdk): stop dev-mode OOM by caching compiled manifest modules by @martmull in #22435
  • Fix front component crash on unknown elements by @bosiraphael in #22455
  • feat(emailing): forward SES events to Tatami Monitor by @neo773 in #22407
  • feat(ai): add ask_questions interactive clarifying-question tool by @FelixMalfait in #22346
  • feat(emailing): local unsubscribe URL + full-content log driver by @neo773 in #22412
  • [Breaking change] fix: make pageLayout type field required by @etiennejouan in #22450
  • Drop unsafe props from front component elements by @bosiraphael in #22458
  • perf(front): query only rendered fields in application settings pages by @martmull in #22454
  • feat(server): workspace opt-out of root-domain directory listing by @FelixMalfait in #22423
  • Gate and meter email group: enterprise license (self-host) + credits (cloud) by @neo773 in #22390
  • feat(call-recorder): cap media file size during ingestion to avoid OOM by @ehconitin in #22463
  • Fire front component window error handlers by @bosiraphael in #22462
  • fix(ai): offer Retry when the failed turn persisted partial assistant output by @FelixMalfait in #22478
  • fix(sse): treat expected event-stream coordination errors as 403s and never crash the sync loop by @FelixMalfait in #22475
  • test(ai): pin StreamAgentChatJob stream lifecycle with a reusable spec harness by @FelixMalfait in #22479
  • fix(ai): delete the Redis chunk list on credits-exhausted terminal events by @FelixMalfait in #22477
  • fix(ai): route missing-workspace stream failures through the standard error path by @FelixMalfait in #22480
  • perf(sse): drop the per-workspace lock around atomic activeStreams set operations by @FelixMalfait in #22476
  • fix(ai): tell members without billing permission why AI stopped at the usage cap by @FelixMalfait in #22487
  • fix(ai): apply stream chunks in exact server seq order via a client-side sequencer by @FelixMalfait in #22484
  • fix(ai): bound silent stream recovery and surface a terminal CONNECTION_LOST state by @FelixMalfait in #22486
  • perf(ai): render streaming markdown as memoized blocks by @FelixMalfait in #22489
  • chore(server): fix stream-agent-chat job spec formatting breaking main's lint by @FelixMalfait in #22493
  • feat(ai): typed CONTEXT_WINDOW_EXCEEDED error that hides the pointless Retry by @FelixMalfait in #22488
  • fix(ai): converge every tab's transcript when a stream fails with partial output by @FelixMalfait in #22494
  • fix(ai): notify all tabs when a pending question is answered by @FelixMalfait in #22491
  • fix(ai): fully roll back a question answer when the resume enqueue fails by @FelixMalfait in #22492
  • use Temporal for date filter evaluation and fix IS operand by @abdulrahmancodes in #22408
  • test(ai): pin the queue-updated event that now follows stream-error on the failure path by @FelixMalfait in #22500
  • fix(upgrade): re-slot all 2-19 upgrade commands to their real merge epochs and guard timestamps in CI by @FelixMalfait in #22498
  • fix: format numbers according to user preferences in settings views by @FelixMalfait in #22501
  • fix: align email validation between front and server and roll back optimistic value on failed save by @abdulrahmancodes in #22490
  • fix(front): skip unknown fields in SSE optimistic updates instead of dropping the event by @FelixMalfait in #22474
  • Fix non-idempotent application sync for viewSorts (subFieldName undefined vs null) by @martmull in #22505
  • Self-host Inter and DM Mono fonts by @FelixMalfait in #22506
  • Add billing plans comparison page by @Bonapara in #22424
  • fix(ai): make stream claims atomic via conditional UPDATEs with claim-or-queue send by @FelixMalfait in #22481
  • fix(front): gate SSO and audit logs on enterprise validity token by @charlesBochet in #22459
  • fix(ai) - sync AI agent step output schema when agent response format changes by @etiennejouan in #22466
  • feat(applications): add type and options to application variables by @martmull in #22157
  • Fix webhook entity dropdown layout by @Bonapara in #22497
  • i18n - docs translations by @github-actions[bot] in #22511
  • perf(twenty-server): browser-cache picture file responses (avatars/logos) by @clivemeister in #22166
  • feat(server): first-class logo on application registration + narrowed settings queries by @martmull in #22453
  • feat(server): import application logo into file storage at install by @martmull in #22437
  • fix(server): resolve foreign key violation blocking application uninstall by @abdulrahmancodes in #22502
  • perf(twenty-server): drive immutable file caching from fileFolderConfigs on both serving paths by @FelixMalfait in #22510
  • chore(server): remove the five dead FileFolder values and their legacy serving pipeline by @FelixMalfait in #22516
  • feat(logic-function): namespace shared Lambda resources per instance by @charlesBochet in #22509
  • feat(ai): add a stream heartbeat and reap dead claims so a worker crash cannot brick a thread by @FelixMalfait in #22482
  • feat(server): promote registration display fields to first-class columns by @martmull in #22513
  • fix email alias guard with message channel availibility by @neo773 in #22521
  • fix(server): tolerate metadata-physical index drift in legacy index name normalization by @prastoin in #22472
  • feat(files): direct-to-storage upload endpoints with pending file lifecycle by @martmull in #22449
  • feat(ai): dashboard & view building by @etiennejouan in #22411
  • fix(server): restrict /webhooks/server dispatch to server-route-exposed functions by @prastoin in #22469
  • perf(twenty-server): cache BuiltFrontComponent and PublicAsset responses by @FelixMalfait in #22523
  • perf(front-component): fingerprint built-JS URLs by path for CDN caching by @FelixMalfait in #22530
  • Support sender variable on workflow send-email action by @FelixMalfait in #22512
  • Expose sent message identifiers in workflow send-email step output by @FelixMalfait in #22520
  • Remove v1 onboarding and rely only on v2 by @bosiraphael in #22398
  • Centralized side effects devxp basis by @prastoin in #22295
  • feat(ai): persist assistant chat messages progressively during streaming by @FelixMalfait in #22524
  • Add configurable call recorder summaries by @ehconitin in #22405
  • feat(server): drain queue workers gracefully on SIGTERM by @FelixMalfait in #22514
  • fix(ai): gate chat thread totals on stream ownership to prevent usage under-counting by @FelixMalfait in #22534
  • Call recorder: skeleton loading state + port front components to twenty-ui by @ehconitin in #22473
  • Squirclesssss 🟦🔵 by @Bonapara in #22535
  • fix(docker): bump node base to 24.17.0 for CVE-2026-48930 (critical) by @charlesBochet in #22529
  • feat(helm): parametrize liveness, readiness and startup probes for server by @mhorcajada in #22268
  • feat(twenty-for-twenty): bump to SDK 2.18 with local UI components by @charlesBochet in #22542
  • fix(front): don't blank record title when the title cell is untouched by @avonian in #22293
  • feat(ci): detect bot signatures in PR description, comments and reviews by @charlesBochet in #22547
  • Add MCP setup screen by @Bonapara in #22468
  • chore(apps): remove the twenty-for-twenty app (consolidated into twenty-eng) by @charlesBochet in #22549
  • fix(server): require confidential client auth in authorization_code grant by @charlesBochet in #22548
  • feat(server): refresh application registration on install by @martmull in #22527
  • feat: expose marketplace app detail fields explicitly and deprecate manifest blob by @martmull in #22526
  • QA follow up - Polish settings billing and MCP UI by @Bonapara in #22554
  • refactor(server): regroup application resolvers by resource and unify install permission flag by @martmull in #22532
  • Run integration tests against the real BullMQ driver by @neo773 in #22551
  • Add focus-safe side panel shortcuts by @Bonapara in #22499
  • chore: sync AI model catalog from models.dev by @github-actions[bot] in #22558
  • message campaign redesign by @neo773 in #22508
  • feat(server): abort ai stream jobs that outlive the shutdown drain budget by @FelixMalfait in #22517
  • messaging: Prefer plain text calendar event description over HTML for Microsoft calendar. by @mvanhorn in #22540
  • Call recorder: parse conference links from calendar event text by @ehconitin in #22555
  • chore: sync AI model catalog from models.dev by @github-actions[bot] in #22568
  • feat(files): content-verify direct uploads and pin pending files to octet-stream by @martmull in #22533
  • feat(files): reap stale pending direct-upload files via hourly cron by @martmull in #22531
  • Reverse pinned command menu item order on record header by @bosiraphael in #22577
  • refactor(server): remove nestjs-query from key-value-pair module by @abdulrahmancodes in #22575
  • Don't list headless front components in the widget picker by @bosiraphael in #22578
  • feat(server): add instance-level file storage layer by @martmull in #22560
  • fix(server): pace lambda control-plane calls to avoid 'Rate exceeded' on release by @thomtrp in #22569
  • chore(server): remove unused flat-field-metadata per-object mocks by @prastoin in #22581
  • Revert "feat(server): add instance-level file storage layer" by @martmull in #22579
  • Fix stale token race forcing re-login on verify pages by @bosiraphael in #22573
  • Inject functions URL into logic function env by @ehconitin in #22583
  • feat(front): upload files directly to storage for files-field, attachments and workflow by @martmull in #22576
  • Deterministic system field universal identifier by @prastoin in #22565
  • Polish onboarding v2 verify animation and step screens by @bosiraphael in #22585
  • feat(ai): open Ask AI side panel with a preprompt in two modes by @Weiko in #22582
  • feat: publish MCP & API discovery documents (well-known standards) by @FelixMalfait in #22589
  • (Billing for self hosts) Tie enterprise key to server by @ijreilly in #22464
  • feat(messaging): message campaign delivery stats + views by @neo773 in #22452
  • fix(server): converge app-sync isUnique diff for single-column unique constraints by @ijreilly in #22592
  • chore: bump sdk packages to 2.19.0-alpha.1 prerelease by @prastoin in #22599
  • feat(files): use direct-to-storage upload for email and AI-chat attachments by @martmull in #22610
  • Remove book a call step from onboarding by @bosiraphael in #22597
  • Fix side panel open/close animation glitches in the page header and panel content by @bosiraphael in #22598
  • Use record pickers for People Data Labs enrichment workflow inputs by @bosiraphael in #22596
  • fix(server): make all view children reparentable across a workspace migration sync by @prastoin in #22600
  • feat(app): allow claiming ownership of unclaimed app registrations by @martmull in #22609
  • Add Document Generator SDK app + step-by-step tutorial by @martmull in #22522
  • i18n - docs translations by @github-actions[bot] in #22617
  • Use SDK calendarEventRecordPageFields identifiers in call-recorder by @ehconitin in #22618
  • App installation workspace version check engines constraint by @prastoin in #22613
  • chore(server): remove nestjs-query from user-workspace module by @abdulrahmancodes in #22591
  • chore(server): migrate 5 modules off NestjsQueryTypeOrmModule wiring by @abdulrahmancodes in #22595
  • Update claude session settings for a proper PR behavior by @martmull in #22619
  • Widen front component crossing attributes to aria-, data- and draggable by @bosiraphael in #22614
  • fix(front): honor user-set label on LINKS/URL social links by @thomtrp in #22586
  • chore(apps): bump sdk to 2.19.0-alpha.1 and require twenty server >=2.19.0 by @prastoin in #22601
  • chore(apps): patch bump public apps moved to sdk 2.19.0-alpha.1 by @prastoin in #22623
  • i18n - docs translations by @github-actions[bot] in #22624
  • feat(index): support composite unique indexes in create-many upsert conflict resolution by @etiennejouan in #22604
  • Revert "feat(messaging): message campaign delivery stats + views" (#22452) by @prastoin in #22627
  • Remove logo from onboarding trust badges by @bosiraphael in #22628
  • test(messaging): messaging and calendar sync integration suites by @neo773 in #22567
  • Call recorder: sweep upcoming calendar events for recording bots on install by @ehconitin in #22552
  • fix(ai-chat): sort message parts by orderIndex on reload by @thomtrp in #22629
  • Create billing customer at signup so onboarding rewards are credited by @bosiraphael in #22633
  • Display featured applications in marketplace by @martmull in #22635

Full Changelog: twenty/v2.18.0...twenty/v2.19.0