twenty/v2.41.0
Gerstep/cybostwenty/v2.41.0Sep 17, 2026by twenty-pr[bot]
Upgrading?
AI Summary
Enhances workflow validation, metadata management, and messaging capabilities. Includes new features for AI deployment catalog generation and desktop recorder integration.
Key Highlights
- Let every application admin manage a workspace-shared connection
- Workflow validation through exceptions for malformed versions
- Metadata author-keyed overrides blob
- Apps can own and ingest messages into their channels
- AI generates deployment catalog from model catalog
Breaking Changes
- Let every application admin manage a workspace-shared connection
New Features
- Slack bot token reporting and access mode restrictions
- Desktop recorder app installation
- Messaging channel ownership for apps
- Usage limits exposed over the metadata API
Full Release Notes
<!-- generated-release-notes v1 --> ## ⚠️ Breaking changes - Let every application admin manage a workspace-shared connection ([#25773](https://github.com/twentyhq/twenty/pull/25773)) by @abdulrahmancodes ## ✨ New features - feat(server): validate workflow versions through exceptions, malformed at write and non-activable on activate or validate ([#24964](https://github.com/twentyhq/twenty/pull/24964)) by @charlesBochet - feat(metadata): author-keyed overrides blob (steps 1 to 3) ([#25284](https://github.com/twentyhq/twenty/pull/25284)) by @prastoin - feat(view): seed a user-owned initial view per object alongside the INDEX view ([#25416](https://github.com/twentyhq/twenty/pull/25416)) by @thomtrp - feat(workflow): add workspaceWorkflowId to core workflows ([#25723](https://github.com/twentyhq/twenty/pull/25723)) by @thomtrp - feat(usage-limit): expose usage limits over the metadata API ([#25740](https://github.com/twentyhq/twenty/pull/25740)) by @etiennejouan - feat(usage-limit): list workspace limits in a billing tab ([#25741](https://github.com/twentyhq/twenty/pull/25741)) by @etiennejouan - feat(usage-limit): create and edit limits from settings billing ([#25742](https://github.com/twentyhq/twenty/pull/25742)) by @etiennejouan - feat(workflow): point core workflows and command menu items at core version ids ([#25757](https://github.com/twentyhq/twenty/pull/25757)) by @thomtrp - feat(slack): report a rejected bot token to the platform connection ([#25763](https://github.com/twentyhq/twenty/pull/25763)) by @abdulrahmancodes - feat(ai): generate every deployment catalog from the model catalog and a spec ([#25831](https://github.com/twentyhq/twenty/pull/25831)) by @FelixMalfait - feat(slack): access mode to restrict the assistant to linked members ([#25834](https://github.com/twentyhq/twenty/pull/25834)) by @abdulrahmancodes - feat(workflow): read the workflow show page shell through core ([#25901](https://github.com/twentyhq/twenty/pull/25901)) by @thomtrp - feat(workflow): discard a workflow draft through the core API ([#25902](https://github.com/twentyhq/twenty/pull/25902)) by @thomtrp - feat(messaging): let apps own message channels ([#25903](https://github.com/twentyhq/twenty/pull/25903)) by @FelixMalfait - feat(messaging): let apps ingest messages into their channels ([#25905](https://github.com/twentyhq/twenty/pull/25905)) by @FelixMalfait - feat(messaging): resolve identity for non-email participants ([#25906](https://github.com/twentyhq/twenty/pull/25906)) by @FelixMalfait - feat(workflow): remove the See Active Version command menu item from workspaces ([#25938](https://github.com/twentyhq/twenty/pull/25938)) by @thomtrp - feat(last-contact): run database event triggers in batch mode ([#26072](https://github.com/twentyhq/twenty/pull/26072)) by @martmull ## 💅 Improvements & UX - Enforce blocklist scope and surface the workspace blocklist in settings ([#25007](https://github.com/twentyhq/twenty/pull/25007)) by @neo773 - Record sharing: inherited objects follow their parent ([#25439](https://github.com/twentyhq/twenty/pull/25439)) by @martmull - Granola 7/8: Filter Granola synchronization by folder ([#25576](https://github.com/twentyhq/twenty/pull/25576)) by @ehconitin - [3/4] Desktop Recorder: add the Twenty desktop app ([#25616](https://github.com/twentyhq/twenty/pull/25616)) by @Bonapara - [1/4] Desktop Recorder: support existing UI controls ([#25632](https://github.com/twentyhq/twenty/pull/25632)) by @Bonapara - [2/4] Desktop Recorder: add the installable Twenty integration ([#25633](https://github.com/twentyhq/twenty/pull/25633)) by @Bonapara - Replace frontend snackbars with twenty-ui toasts ([#25664](https://github.com/twentyhq/twenty/pull/25664)) by @bosiraphael - Add `eloqnt lint` to catch translation errors ([#25754](https://github.com/twentyhq/twenty/pull/25754)) by @amannn - Resolve Slack account identity through one typed service ([#25772](https://github.com/twentyhq/twenty/pull/25772)) by @abdulrahmancodes - Fix shared connected account permissions and visibility ([#25777](https://github.com/twentyhq/twenty/pull/25777)) by @neo773 - Validate select option colors ([#25805](https://github.com/twentyhq/twenty/pull/25805)) by @bosiraphael - Polish AI model settings ([#25810](https://github.com/twentyhq/twenty/pull/25810)) by @Bonapara - Stop selecting non-mailbox connected accounts as the email sender ([#25814](https://github.com/twentyhq/twenty/pull/25814)) by @neo773 - Emit URL-safe pagination cursors ([#25822](https://github.com/twentyhq/twenty/pull/25822)) by @tomjtobinn - Let runAgent messages carry file attachments ([#25835](https://github.com/twentyhq/twenty/pull/25835)) by @abdulrahmancodes - Repair machine-translation damage in Crowdin automatically ([#25842](https://github.com/twentyhq/twenty/pull/25842)) by @FelixMalfait - Cover every translation pipeline with the normalizer ([#25848](https://github.com/twentyhq/twenty/pull/25848)) by @FelixMalfait - Ship three finished locales, drop the pseudo-locale, and lint the ICU apostrophe ([#25850](https://github.com/twentyhq/twenty/pull/25850)) by @FelixMalfait - Close the silent gaps around adding a locale, and stop an email shipping its message ids ([#25851](https://github.com/twentyhq/twenty/pull/25851)) by @FelixMalfait - Delete translations that came back as debris rather than words ([#25853](https://github.com/twentyhq/twenty/pull/25853)) by @FelixMalfait - Lay the app out right to left for Arabic and Hebrew ([#25854](https://github.com/twentyhq/twenty/pull/25854)) by @FelixMalfait - Mint optimistic cache cursors the way the server does ([#25855](https://github.com/twentyhq/twenty/pull/25855)) by @FelixMalfait - Update book meetings doc for the calendar event composer ([#25856](https://github.com/twentyhq/twenty/pull/25856)) by @neo773 - Restore code identifiers the docs translated into prose ([#25858](https://github.com/twentyhq/twenty/pull/25858)) by @FelixMalfait - Fix the English, and the catalogs and layout that made it unreadable ([#25859](https://github.com/twentyhq/twenty/pull/25859)) by @FelixMalfait - fix (usage-limit) - stop plan-gated spender groups from opening in the billing limits form ([#25871](https://github.com/twentyhq/twenty/pull/25871)) by @etiennejouan - Phone number fix ([#25882](https://github.com/twentyhq/twenty/pull/25882)) by @BOHEUS - Thread replies to email group and campaign emails ([#25884](https://github.com/twentyhq/twenty/pull/25884)) by @neo773 - Migrate buttons to Base UI ([#25888](https://github.com/twentyhq/twenty/pull/25888)) by @bosiraphael - Add live previews to Twenty UI documentation ([#25889](https://github.com/twentyhq/twenty/pull/25889)) by @bosiraphael - [forms 1/3] Make record creation commands available across objects ([#25890](https://github.com/twentyhq/twenty/pull/25890)) by @Bonapara - Move UI Library into the Developers menu ([#25898](https://github.com/twentyhq/twenty/pull/25898)) by @bosiraphael - [4/4] Desktop Recorder: add desktop application coverage ([#25900](https://github.com/twentyhq/twenty/pull/25900)) by @Bonapara - Index the messageList and messageCampaign legs on timelineActivity ([#25912](https://github.com/twentyhq/twenty/pull/25912)) by @charlesBochet - Publish Twenty app skills as a portable Agent Skills collection (skills.sh) ([#25913](https://github.com/twentyhq/twenty/pull/25913)) by @martmull - Record sharing: inherited records follow the records their child rows point at ([#25914](https://github.com/twentyhq/twenty/pull/25914)) by @martmull - Remove the email group flag and gate campaigns behind their own flag ([#25916](https://github.com/twentyhq/twenty/pull/25916)) by @neo773 - fix(ai-chat) - fix AI chat turns dying on tool results that carry Date values ([#25921](https://github.com/twentyhq/twenty/pull/25921)) by @etiennejouan - Show AI chat context and credit usage ([#25923](https://github.com/twentyhq/twenty/pull/25923)) by @Bonapara - Record sharing: inherited records follow the parent's complete access policy, in queries and events ([#25925](https://github.com/twentyhq/twenty/pull/25925)) by @martmull - Add readable admin feature flag names and descriptions ([#25927](https://github.com/twentyhq/twenty/pull/25927)) by @Bonapara - Default demo accounts to the system theme ([#25928](https://github.com/twentyhq/twenty/pull/25928)) by @Bonapara - Use primary text color for settings table identifying columns ([#25939](https://github.com/twentyhq/twenty/pull/25939)) by @Bonapara - Add copy button on hover to Emails/Phones/Links in the record side panel ([#25940](https://github.com/twentyhq/twenty/pull/25940)) by @charlesBochet - Clarify self-hosted pricing CTAs and Organization license keys ([#25941](https://github.com/twentyhq/twenty/pull/25941)) by @Bonapara - Clarify model mode comparisons with an information popup ([#25947](https://github.com/twentyhq/twenty/pull/25947)) by @Bonapara - Organize Twenty UI into primitive families ([#25948](https://github.com/twentyhq/twenty/pull/25948)) by @bosiraphael - Read forwarded email bodies like the mailbox importers do ([#25954](https://github.com/twentyhq/twenty/pull/25954)) by @neo773 - Complete Organization naming in settings and activation ([#25961](https://github.com/twentyhq/twenty/pull/25961)) by @Bonapara - Scope application file uploads to the registration owner ([#25962](https://github.com/twentyhq/twenty/pull/25962)) by @prastoin - Split the admin application registration update input ([#25963](https://github.com/twentyhq/twenty/pull/25963)) by @prastoin - Record sharing: gate events through one access policy entry point ([#25964](https://github.com/twentyhq/twenty/pull/25964)) by @martmull - Pin catalog sync to a registration's own source package ([#25965](https://github.com/twentyhq/twenty/pull/25965)) by @prastoin - Derive permission universal identifiers from their role and target ([#25966](https://github.com/twentyhq/twenty/pull/25966)) by @Weiko - Redesign the marketplace app detail page ([#25969](https://github.com/twentyhq/twenty/pull/25969)) by @martmull - [1/2 Sidebar] New layout ([#25974](https://github.com/twentyhq/twenty/pull/25974)) by @Bonapara - Export roles, permissions and permission flags ([#25975](https://github.com/twentyhq/twenty/pull/25975)) by @Weiko - Use Twenty UI components in presentation stories ([#25976](https://github.com/twentyhq/twenty/pull/25976)) by @bosiraphael - Desktop Recorder: align merged integration and UI naming conventions ([#25977](https://github.com/twentyhq/twenty/pull/25977)) by @Bonapara - Document data display primitives ([#25980](https://github.com/twentyhq/twenty/pull/25980)) by @bosiraphael - Export row-level permission predicates and groups ([#25984](https://github.com/twentyhq/twenty/pull/25984)) by @Weiko - Share CSV formatting and composite field labels ([#25986](https://github.com/twentyhq/twenty/pull/25986)) by @Weiko - Write roles and permission flags on pull ([#25994](https://github.com/twentyhq/twenty/pull/25994)) by @Weiko - Use a twenty-bounce MAIL FROM subdomain for new sending domains ([#25995](https://github.com/twentyhq/twenty/pull/25995)) by @neo773 - Show sending domain DNS records as a status list and a records table ([#25996](https://github.com/twentyhq/twenty/pull/25996)) by @neo773 - Use Twenty UI buttons in Menu and Popover stories ([#26001](https://github.com/twentyhq/twenty/pull/26001)) by @bosiraphael - Remove unused view delete mutations from the front ([#26003](https://github.com/twentyhq/twenty/pull/26003)) by @Weiko - Fix custom domain settings spacing ([#26007](https://github.com/twentyhq/twenty/pull/26007)) by @Bonapara - Show shortcuts in command menu button tooltips ([#26009](https://github.com/twentyhq/twenty/pull/26009)) by @Bonapara - Clip the toast progress overlay to the toast corners ([#26012](https://github.com/twentyhq/twenty/pull/26012)) by @neo773 - Record sharing: fail closed on unresolved row predicates, gate application events on the role, run dashboard duplication under the caller ([#26021](https://github.com/twentyhq/twenty/pull/26021)) by @martmull - Require client authentication for OAuth token introspection ([#26023](https://github.com/twentyhq/twenty/pull/26023)) by @charlesBochet - Consume the OAuth authorization code atomically ([#26025](https://github.com/twentyhq/twenty/pull/26025)) by @charlesBochet - Block system and relation fields on workspace member settings update ([#26026](https://github.com/twentyhq/twenty/pull/26026)) by @charlesBochet - Enforce UNLISTED view visibility when resolving query params ([#26027](https://github.com/twentyhq/twenty/pull/26027)) by @charlesBochet - Expose minimum likelihood in enrichment workflows ([#26040](https://github.com/twentyhq/twenty/pull/26040)) by @bosiraphael - Clarify twenty-ui setup in the README ([#26044](https://github.com/twentyhq/twenty/pull/26044)) by @bosiraphael - Split Twenty UI docs into primitives and components ([#26045](https://github.com/twentyhq/twenty/pull/26045)) by @bosiraphael - Skip participant matching jobs when no person email is involved ([#26058](https://github.com/twentyhq/twenty/pull/26058)) by @neo773 - Show contact auto-creation and sync options on shared mailboxes ([#26059](https://github.com/twentyhq/twenty/pull/26059)) by @neo773 - Honor exclude group emails on shared mailboxes ([#26060](https://github.com/twentyhq/twenty/pull/26060)) by @neo773 - Document controlled and uncontrolled UI state ([#26062](https://github.com/twentyhq/twenty/pull/26062)) by @bosiraphael - Document Twenty UI anatomy and composition ([#26066](https://github.com/twentyhq/twenty/pull/26066)) by @bosiraphael - Disable play functions in UI documentation examples ([#26069](https://github.com/twentyhq/twenty/pull/26069)) by @bosiraphael - Make record sharing an enterprise feature ([#26070](https://github.com/twentyhq/twenty/pull/26070)) by @martmull - Keep default domain deep links through sign-in and workspace selection ([#26073](https://github.com/twentyhq/twenty/pull/26073)) by @martmull - Cache billing entitlements in the workspace cache ([#26078](https://github.com/twentyhq/twenty/pull/26078)) by @Weiko - Embed MainButton and LightButton stories in docs ([#26089](https://github.com/twentyhq/twenty/pull/26089)) by @bosiraphael - Add website release notes for 2.39 and 2.40 ([#26092](https://github.com/twentyhq/twenty/pull/26092)) by @Bonapara - Add website release notes for 2.27 and 2.34 ([#26094](https://github.com/twentyhq/twenty/pull/26094)) by @Bonapara ## 🐛 Bug fixes - fix(server): backfill workflow rich text record fields (2.41 upgrade command) ([#24965](https://github.com/twentyhq/twenty/pull/24965)) by @charlesBochet - fix(shared): stop the utils barrel dragging handlebars into twenty-client-sdk ([#25846](https://github.com/twentyhq/twenty/pull/25846)) by @FelixMalfait - fix(create-twenty-app): ship a lockfile so generated apps install under an age gate ([#25879](https://github.com/twentyhq/twenty/pull/25879)) by @FelixMalfait - fix(front): widen the admin default-model rows ([#25881](https://github.com/twentyhq/twenty/pull/25881)) by @FelixMalfait - fix(currency): prevent dropping decimal separator and multiplying amount on 0-decimal fields (#25870) ([#25904](https://github.com/twentyhq/twenty/pull/25904)) by @Dewin - fix(email-tool): resolve the default sender through the caller entitlement filter ([#25908](https://github.com/twentyhq/twenty/pull/25908)) by @etiennejouan - fix(billing): restore the credit-package match on an interval switch ([#25919](https://github.com/twentyhq/twenty/pull/25919)) by @FelixMalfait - fix(record-form): render rich text fields with the BlockNote editor ([#25920](https://github.com/twentyhq/twenty/pull/25920)) by @thomtrp - fix(messaging): resolve an app channel's connectedAccount for app contexts ([#25942](https://github.com/twentyhq/twenty/pull/25942)) by @FelixMalfait - fix(upgrade): pin 2.20 messageList view command to its original columns ([#26006](https://github.com/twentyhq/twenty/pull/26006)) by @prastoin - fix(front-component-renderer): forward React 18 camelCase attributes on remote elements ([#26015](https://github.com/twentyhq/twenty/pull/26015)) by @abdulrahmancodes - fix(messaging): enforce CRLF line endings on raw outbound messages and surface IMAP append error responseText (#26011) ([#26017](https://github.com/twentyhq/twenty/pull/26017)) by @Dewin - fix(workflow): stop reporting user-facing step errors to Sentry ([#26041](https://github.com/twentyhq/twenty/pull/26041)) by @charlesBochet - fix(rest): forward flatIndexMaps to the merge query runner ([#26063](https://github.com/twentyhq/twenty/pull/26063)) by @charlesBochet - fix(workflow): unblock the 2-41 See Active Version removal on workspaces that still have the item ([#26090](https://github.com/twentyhq/twenty/pull/26090)) by @thomtrp ## 🔧 Developer & API - Migrate Avatar to the new twenty-ui API ([#25787](https://github.com/twentyhq/twenty/pull/25787)) by @bosiraphael - Migrate Chip to the new twenty-ui API ([#25788](https://github.com/twentyhq/twenty/pull/25788)) by @bosiraphael - Add Twenty UI documentation and generated API references ([#25791](https://github.com/twentyhq/twenty/pull/25791)) by @bosiraphael - Prevent reactivating revoked API keys ([#25918](https://github.com/twentyhq/twenty/pull/25918)) by @Weiko <details> <summary>🏗️ Internal changes (10)</summary> - refactor(ai): derive the SDK package from the packages we bundle ([#25845](https://github.com/twentyhq/twenty/pull/25845)) by @FelixMalfait - refactor(shared): resolve workflow variables without handlebars ([#25852](https://github.com/twentyhq/twenty/pull/25852)) by @FelixMalfait - docs: state which plan row-level permissions require ([#25868](https://github.com/twentyhq/twenty/pull/25868)) by @yosh1 - docs: move Translations under the Operations section ([#25892](https://github.com/twentyhq/twenty/pull/25892)) by @FelixMalfait - docs(slack): point self-hosters at the Slack setup guide ([#25899](https://github.com/twentyhq/twenty/pull/25899)) by @abdulrahmancodes - chore(security): bump curl/jq in the image and the npm packages flagged by Oneleet ([#25926](https://github.com/twentyhq/twenty/pull/25926)) by @charlesBochet - chore(security): drop extract-zip (HIGH, past SLA, no fix) by lifting mintlify's puppeteer to 25 ([#25931](https://github.com/twentyhq/twenty/pull/25931)) by @charlesBochet - test(messaging): cover the app-facing message channel API end to end ([#25945](https://github.com/twentyhq/twenty/pull/25945)) by @FelixMalfait - revert(email-tool): restore the default sender resolution ([#25972](https://github.com/twentyhq/twenty/pull/25972)) by @etiennejouan - refactor(server): bind resolved application packages to their registration ([#26077](https://github.com/twentyhq/twenty/pull/26077)) by @prastoin </details> ## 🎉 New contributors - @amannn made their first contribution in https://github.com/twentyhq/twenty/pull/25754 - @tomjtobinn made their first contribution in https://github.com/twentyhq/twenty/pull/25822 - @yosh1 made their first contribution in https://github.com/twentyhq/twenty/pull/25868 - @Dewin made their first contribution in https://github.com/twentyhq/twenty/pull/26017 <details> <summary>Full changelog (188 PRs)</summary> - feat(server): validate workflow versions through exceptions, malformed at write and non-activable on activate or validate ([#24964](https://github.com/twentyhq/twenty/pull/24964)) by @charlesBochet - fix(server): backfill workflow rich text record fields (2.41 upgrade command) ([#24965](https://github.com/twentyhq/twenty/pull/24965)) by @charlesBochet - Enforce blocklist scope and surface the workspace blocklist in settings ([#25007](https://github.com/twentyhq/twenty/pull/25007)) by @neo773 - feat(metadata): author-keyed overrides blob (steps 1 to 3) ([#25284](https://github.com/twentyhq/twenty/pull/25284)) by @prastoin - feat(view): seed a user-owned initial view per object alongside the INDEX view ([#25416](https://github.com/twentyhq/twenty/pull/25416)) by @thomtrp - Record sharing: inherited objects follow their parent ([#25439](https://github.com/twentyhq/twenty/pull/25439)) by @martmull - Granola 7/8: Filter Granola synchronization by folder ([#25576](https://github.com/twentyhq/twenty/pull/25576)) by @ehconitin - [3/4] Desktop Recorder: add the Twenty desktop app ([#25616](https://github.com/twentyhq/twenty/pull/25616)) by @Bonapara - [1/4] Desktop Recorder: support existing UI controls ([#25632](https://github.com/twentyhq/twenty/pull/25632)) by @Bonapara - [2/4] Desktop Recorder: add the installable Twenty integration ([#25633](https://github.com/twentyhq/twenty/pull/25633)) by @Bonapara - Replace frontend snackbars with twenty-ui toasts ([#25664](https://github.com/twentyhq/twenty/pull/25664)) by @bosiraphael - feat(workflow): add workspaceWorkflowId to core workflows ([#25723](https://github.com/twentyhq/twenty/pull/25723)) by @thomtrp - feat(usage-limit): expose usage limits over the metadata API ([#25740](https://github.com/twentyhq/twenty/pull/25740)) by @etiennejouan - feat(usage-limit): list workspace limits in a billing tab ([#25741](https://github.com/twentyhq/twenty/pull/25741)) by @etiennejouan - feat(usage-limit): create and edit limits from settings billing ([#25742](https://github.com/twentyhq/twenty/pull/25742)) by @etiennejouan - Add `eloqnt lint` to catch translation errors ([#25754](https://github.com/twentyhq/twenty/pull/25754)) by @amannn - feat(workflow): point core workflows and command menu items at core version ids ([#25757](https://github.com/twentyhq/twenty/pull/25757)) by @thomtrp - feat(slack): report a rejected bot token to the platform connection ([#25763](https://github.com/twentyhq/twenty/pull/25763)) by @abdulrahmancodes - Resolve Slack account identity through one typed service ([#25772](https://github.com/twentyhq/twenty/pull/25772)) by @abdulrahmancodes - Let every application admin manage a workspace-shared connection ([#25773](https://github.com/twentyhq/twenty/pull/25773)) by @abdulrahmancodes - Fix shared connected account permissions and visibility ([#25777](https://github.com/twentyhq/twenty/pull/25777)) by @neo773 - Migrate Avatar to the new twenty-ui API ([#25787](https://github.com/twentyhq/twenty/pull/25787)) by @bosiraphael - Migrate Chip to the new twenty-ui API ([#25788](https://github.com/twentyhq/twenty/pull/25788)) by @bosiraphael - Add Twenty UI documentation and generated API references ([#25791](https://github.com/twentyhq/twenty/pull/25791)) by @bosiraphael - Validate select option colors ([#25805](https://github.com/twentyhq/twenty/pull/25805)) by @bosiraphael - Polish AI model settings ([#25810](https://github.com/twentyhq/twenty/pull/25810)) by @Bonapara - chore: bump version to 2.41.0 ([#25813](https://github.com/twentyhq/twenty/pull/25813)) by @twenty-pr - Stop selecting non-mailbox connected accounts as the email sender ([#25814](https://github.com/twentyhq/twenty/pull/25814)) by @neo773 - Emit URL-safe pagination cursors ([#25822](https://github.com/twentyhq/twenty/pull/25822)) by @tomjtobinn - chore: sync AI model catalog ([#25825](https://github.com/twentyhq/twenty/pull/25825)) by @github-actions - feat(ai): generate every deployment catalog from the model catalog and a spec ([#25831](https://github.com/twentyhq/twenty/pull/25831)) by @FelixMalfait - feat(slack): access mode to restrict the assistant to linked members ([#25834](https://github.com/twentyhq/twenty/pull/25834)) by @abdulrahmancodes - Let runAgent messages carry file attachments ([#25835](https://github.com/twentyhq/twenty/pull/25835)) by @abdulrahmancodes - chore: sync AI model catalog ([#25840](https://github.com/twentyhq/twenty/pull/25840)) by @github-actions - Repair machine-translation damage in Crowdin automatically ([#25842](https://github.com/twentyhq/twenty/pull/25842)) by @FelixMalfait - refactor(ai): derive the SDK package from the packages we bundle ([#25845](https://github.com/twentyhq/twenty/pull/25845)) by @FelixMalfait - fix(shared): stop the utils barrel dragging handlebars into twenty-client-sdk ([#25846](https://github.com/twentyhq/twenty/pull/25846)) by @FelixMalfait - Cover every translation pipeline with the normalizer ([#25848](https://github.com/twentyhq/twenty/pull/25848)) by @FelixMalfait - i18n - website translations ([#25849](https://github.com/twentyhq/twenty/pull/25849)) by @github-actions - Ship three finished locales, drop the pseudo-locale, and lint the ICU apostrophe ([#25850](https://github.com/twentyhq/twenty/pull/25850)) by @FelixMalfait - Close the silent gaps around adding a locale, and stop an email shipping its message ids ([#25851](https://github.com/twentyhq/twenty/pull/25851)) by @FelixMalfait - refactor(shared): resolve workflow variables without handlebars ([#25852](https://github.com/twentyhq/twenty/pull/25852)) by @FelixMalfait - Delete translations that came back as debris rather than words ([#25853](https://github.com/twentyhq/twenty/pull/25853)) by @FelixMalfait - Lay the app out right to left for Arabic and Hebrew ([#25854](https://github.com/twentyhq/twenty/pull/25854)) by @FelixMalfait - Mint optimistic cache cursors the way the server does ([#25855](https://github.com/twentyhq/twenty/pull/25855)) by @FelixMalfait - Update book meetings doc for the calendar event composer ([#25856](https://github.com/twentyhq/twenty/pull/25856)) by @neo773 - Restore code identifiers the docs translated into prose ([#25858](https://github.com/twentyhq/twenty/pull/25858)) by @FelixMalfait - Fix the English, and the catalogs and layout that made it unreadable ([#25859](https://github.com/twentyhq/twenty/pull/25859)) by @FelixMalfait - i18n - website translations ([#25860](https://github.com/twentyhq/twenty/pull/25860)) by @github-actions - i18n - website translations ([#25861](https://github.com/twentyhq/twenty/pull/25861)) by @github-actions - i18n - translations ([#25863](https://github.com/twentyhq/twenty/pull/25863)) by @github-actions - i18n - translations ([#25864](https://github.com/twentyhq/twenty/pull/25864)) by @github-actions - i18n - website translations ([#25865](https://github.com/twentyhq/twenty/pull/25865)) by @github-actions - i18n - translations ([#25867](https://github.com/twentyhq/twenty/pull/25867)) by @github-actions - docs: state which plan row-level permissions require ([#25868](https://github.com/twentyhq/twenty/pull/25868)) by @yosh1 - chore: sync AI model catalog ([#25869](https://github.com/twentyhq/twenty/pull/25869)) by @github-actions - fix (usage-limit) - stop plan-gated spender groups from opening in the billing limits form ([#25871](https://github.com/twentyhq/twenty/pull/25871)) by @etiennejouan - fix(create-twenty-app): ship a lockfile so generated apps install under an age gate ([#25879](https://github.com/twentyhq/twenty/pull/25879)) by @FelixMalfait - fix(front): widen the admin default-model rows ([#25881](https://github.com/twentyhq/twenty/pull/25881)) by @FelixMalfait - Phone number fix ([#25882](https://github.com/twentyhq/twenty/pull/25882)) by @BOHEUS - Thread replies to email group and campaign emails ([#25884](https://github.com/twentyhq/twenty/pull/25884)) by @neo773 - i18n - translations ([#25885](https://github.com/twentyhq/twenty/pull/25885)) by @github-actions - i18n - translations ([#25886](https://github.com/twentyhq/twenty/pull/25886)) by @github-actions - Migrate buttons to Base UI ([#25888](https://github.com/twentyhq/twenty/pull/25888)) by @bosiraphael - Add live previews to Twenty UI documentation ([#25889](https://github.com/twentyhq/twenty/pull/25889)) by @bosiraphael - [forms 1/3] Make record creation commands available across objects ([#25890](https://github.com/twentyhq/twenty/pull/25890)) by @Bonapara - docs: move Translations under the Operations section ([#25892](https://github.com/twentyhq/twenty/pull/25892)) by @FelixMalfait - Move UI Library into the Developers menu ([#25898](https://github.com/twentyhq/twenty/pull/25898)) by @bosiraphael - docs(slack): point self-hosters at the Slack setup guide ([#25899](https://github.com/twentyhq/twenty/pull/25899)) by @abdulrahmancodes - [4/4] Desktop Recorder: add desktop application coverage ([#25900](https://github.com/twentyhq/twenty/pull/25900)) by @Bonapara - feat(workflow): read the workflow show page shell through core ([#25901](https://github.com/twentyhq/twenty/pull/25901)) by @thomtrp - feat(workflow): discard a workflow draft through the core API ([#25902](https://github.com/twentyhq/twenty/pull/25902)) by @thomtrp - feat(messaging): let apps own message channels ([#25903](https://github.com/twentyhq/twenty/pull/25903)) by @FelixMalfait - fix(currency): prevent dropping decimal separator and multiplying amount on 0-decimal fields (#25870) ([#25904](https://github.com/twentyhq/twenty/pull/25904)) by @Dewin - feat(messaging): let apps ingest messages into their channels ([#25905](https://github.com/twentyhq/twenty/pull/25905)) by @FelixMalfait - feat(messaging): resolve identity for non-email participants ([#25906](https://github.com/twentyhq/twenty/pull/25906)) by @FelixMalfait - fix(email-tool): resolve the default sender through the caller entitlement filter ([#25908](https://github.com/twentyhq/twenty/pull/25908)) by @etiennejouan - i18n - translations ([#25910](https://github.com/twentyhq/twenty/pull/25910)) by @github-actions - Index the messageList and messageCampaign legs on timelineActivity ([#25912](https://github.com/twentyhq/twenty/pull/25912)) by @charlesBochet - Publish Twenty app skills as a portable Agent Skills collection (skills.sh) ([#25913](https://github.com/twentyhq/twenty/pull/25913)) by @martmull - Record sharing: inherited records follow the records their child rows point at ([#25914](https://github.com/twentyhq/twenty/pull/25914)) by @martmull - Remove the email group flag and gate campaigns behind their own flag ([#25916](https://github.com/twentyhq/twenty/pull/25916)) by @neo773 - i18n - translations ([#25917](https://github.com/twentyhq/twenty/pull/25917)) by @github-actions - Prevent reactivating revoked API keys ([#25918](https://github.com/twentyhq/twenty/pull/25918)) by @Weiko - fix(billing): restore the credit-package match on an interval switch ([#25919](https://github.com/twentyhq/twenty/pull/25919)) by @FelixMalfait - fix(record-form): render rich text fields with the BlockNote editor ([#25920](https://github.com/twentyhq/twenty/pull/25920)) by @thomtrp - fix(ai-chat) - fix AI chat turns dying on tool results that carry Date values ([#25921](https://github.com/twentyhq/twenty/pull/25921)) by @etiennejouan - i18n - translations ([#25922](https://github.com/twentyhq/twenty/pull/25922)) by @github-actions - Show AI chat context and credit usage ([#25923](https://github.com/twentyhq/twenty/pull/25923)) by @Bonapara - i18n - translations ([#25924](https://github.com/twentyhq/twenty/pull/25924)) by @github-actions - Record sharing: inherited records follow the parent's complete access policy, in queries and events ([#25925](https://github.com/twentyhq/twenty/pull/25925)) by @martmull - chore(security): bump curl/jq in the image and the npm packages flagged by Oneleet ([#25926](https://github.com/twentyhq/twenty/pull/25926)) by @charlesBochet - Add readable admin feature flag names and descriptions ([#25927](https://github.com/twentyhq/twenty/pull/25927)) by @Bonapara - Default demo accounts to the system theme ([#25928](https://github.com/twentyhq/twenty/pull/25928)) by @Bonapara - chore(security): bump @faker-js/faker to 10 (HIGH Dependabot alert on an SLA clock) ([#25930](https://github.com/twentyhq/twenty/pull/25930)) by @charlesBochet - chore(security): drop extract-zip (HIGH, past SLA, no fix) by lifting mintlify's puppeteer to 25 ([#25931](https://github.com/twentyhq/twenty/pull/25931)) by @charlesBochet - chore: sync AI model catalog ([#25934](https://github.com/twentyhq/twenty/pull/25934)) by @github-actions - feat(workflow): remove the See Active Version command menu item from workspaces ([#25938](https://github.com/twentyhq/twenty/pull/25938)) by @thomtrp - Use primary text color for settings table identifying columns ([#25939](https://github.com/twentyhq/twenty/pull/25939)) by @Bonapara - Add copy button on hover to Emails/Phones/Links in the record side panel ([#25940](https://github.com/twentyhq/twenty/pull/25940)) by @charlesBochet - Clarify self-hosted pricing CTAs and Organization license keys ([#25941](https://github.com/twentyhq/twenty/pull/25941)) by @Bonapara - fix(messaging): resolve an app channel's connectedAccount for app contexts ([#25942](https://github.com/twentyhq/twenty/pull/25942)) by @FelixMalfait - test(messaging): cover the app-facing message channel API end to end ([#25945](https://github.com/twentyhq/twenty/pull/25945)) by @FelixMalfait - Clarify model mode comparisons with an information popup ([#25947](https://github.com/twentyhq/twenty/pull/25947)) by @Bonapara - Organize Twenty UI into primitive families ([#25948](https://github.com/twentyhq/twenty/pull/25948)) by @bosiraphael - i18n - translations ([#25949](https://github.com/twentyhq/twenty/pull/25949)) by @github-actions - i18n - translations ([#25950](https://github.com/twentyhq/twenty/pull/25950)) by @github-actions - i18n - translations ([#25952](https://github.com/twentyhq/twenty/pull/25952)) by @github-actions - i18n - translations ([#25953](https://github.com/twentyhq/twenty/pull/25953)) by @github-actions - Read forwarded email bodies like the mailbox importers do ([#25954](https://github.com/twentyhq/twenty/pull/25954)) by @neo773 - i18n - translations ([#25955](https://github.com/twentyhq/twenty/pull/25955)) by @github-actions - i18n - website translations ([#25956](https://github.com/twentyhq/twenty/pull/25956)) by @github-actions - i18n - translations ([#25958](https://github.com/twentyhq/twenty/pull/25958)) by @github-actions - i18n - website translations ([#25960](https://github.com/twentyhq/twenty/pull/25960)) by @github-actions - Complete Organization naming in settings and activation ([#25961](https://github.com/twentyhq/twenty/pull/25961)) by @Bonapara - Scope application file uploads to the registration owner ([#25962](https://github.com/twentyhq/twenty/pull/25962)) by @prastoin - Split the admin application registration update input ([#25963](https://github.com/twentyhq/twenty/pull/25963)) by @prastoin - Record sharing: gate events through one access policy entry point ([#25964](https://github.com/twentyhq/twenty/pull/25964)) by @martmull - Pin catalog sync to a registration's own source package ([#25965](https://github.com/twentyhq/twenty/pull/25965)) by @prastoin - Derive permission universal identifiers from their role and target ([#25966](https://github.com/twentyhq/twenty/pull/25966)) by @Weiko - i18n - website translations ([#25967](https://github.com/twentyhq/twenty/pull/25967)) by @github-actions - Redesign the marketplace app detail page ([#25969](https://github.com/twentyhq/twenty/pull/25969)) by @martmull - i18n - translations ([#25971](https://github.com/twentyhq/twenty/pull/25971)) by @github-actions - revert(email-tool): restore the default sender resolution ([#25972](https://github.com/twentyhq/twenty/pull/25972)) by @etiennejouan - i18n - translations ([#25973](https://github.com/twentyhq/twenty/pull/25973)) by @github-actions - [1/2 Sidebar] New layout ([#25974](https://github.com/twentyhq/twenty/pull/25974)) by @Bonapara - Export roles, permissions and permission flags ([#25975](https://github.com/twentyhq/twenty/pull/25975)) by @Weiko - Use Twenty UI components in presentation stories ([#25976](https://github.com/twentyhq/twenty/pull/25976)) by @bosiraphael - Desktop Recorder: align merged integration and UI naming conventions ([#25977](https://github.com/twentyhq/twenty/pull/25977)) by @Bonapara - i18n - translations ([#25979](https://github.com/twentyhq/twenty/pull/25979)) by @github-actions - Document data display primitives ([#25980](https://github.com/twentyhq/twenty/pull/25980)) by @bosiraphael - i18n - website translations ([#25981](https://github.com/twentyhq/twenty/pull/25981)) by @github-actions - Export row-level permission predicates and groups ([#25984](https://github.com/twentyhq/twenty/pull/25984)) by @Weiko - i18n - translations ([#25985](https://github.com/twentyhq/twenty/pull/25985)) by @github-actions - Share CSV formatting and composite field labels ([#25986](https://github.com/twentyhq/twenty/pull/25986)) by @Weiko - i18n - translations ([#25990](https://github.com/twentyhq/twenty/pull/25990)) by @github-actions - Write roles and permission flags on pull ([#25994](https://github.com/twentyhq/twenty/pull/25994)) by @Weiko - Use a twenty-bounce MAIL FROM subdomain for new sending domains ([#25995](https://github.com/twentyhq/twenty/pull/25995)) by @neo773 - Show sending domain DNS records as a status list and a records table ([#25996](https://github.com/twentyhq/twenty/pull/25996)) by @neo773 - i18n - translations ([#25999](https://github.com/twentyhq/twenty/pull/25999)) by @github-actions - Use Twenty UI buttons in Menu and Popover stories ([#26001](https://github.com/twentyhq/twenty/pull/26001)) by @bosiraphael - Remove unused view delete mutations from the front ([#26003](https://github.com/twentyhq/twenty/pull/26003)) by @Weiko - i18n - translations ([#26004](https://github.com/twentyhq/twenty/pull/26004)) by @github-actions - fix(upgrade): pin 2.20 messageList view command to its original columns ([#26006](https://github.com/twentyhq/twenty/pull/26006)) by @prastoin - Fix custom domain settings spacing ([#26007](https://github.com/twentyhq/twenty/pull/26007)) by @Bonapara - Show shortcuts in command menu button tooltips ([#26009](https://github.com/twentyhq/twenty/pull/26009)) by @Bonapara - i18n - translations ([#26010](https://github.com/twentyhq/twenty/pull/26010)) by @github-actions - Clip the toast progress overlay to the toast corners ([#26012](https://github.com/twentyhq/twenty/pull/26012)) by @neo773 - i18n - translations ([#26013](https://github.com/twentyhq/twenty/pull/26013)) by @github-actions - fix(front-component-renderer): forward React 18 camelCase attributes on remote elements ([#26015](https://github.com/twentyhq/twenty/pull/26015)) by @abdulrahmancodes - fix(messaging): enforce CRLF line endings on raw outbound messages and surface IMAP append error responseText (#26011) ([#26017](https://github.com/twentyhq/twenty/pull/26017)) by @Dewin - i18n - translations ([#26018](https://github.com/twentyhq/twenty/pull/26018)) by @github-actions - Record sharing: fail closed on unresolved row predicates, gate application events on the role, run dashboard duplication under the caller ([#26021](https://github.com/twentyhq/twenty/pull/26021)) by @martmull - i18n - translations ([#26022](https://github.com/twentyhq/twenty/pull/26022)) by @github-actions - Require client authentication for OAuth token introspection ([#26023](https://github.com/twentyhq/twenty/pull/26023)) by @charlesBochet - Consume the OAuth authorization code atomically ([#26025](https://github.com/twentyhq/twenty/pull/26025)) by @charlesBochet - Block system and relation fields on workspace member settings update ([#26026](https://github.com/twentyhq/twenty/pull/26026)) by @charlesBochet - Enforce UNLISTED view visibility when resolving query params ([#26027](https://github.com/twentyhq/twenty/pull/26027)) by @charlesBochet - chore: sync AI model catalog ([#26033](https://github.com/twentyhq/twenty/pull/26033)) by @github-actions - Expose minimum likelihood in enrichment workflows ([#26040](https://github.com/twentyhq/twenty/pull/26040)) by @bosiraphael - fix(workflow): stop reporting user-facing step errors to Sentry ([#26041](https://github.com/twentyhq/twenty/pull/26041)) by @charlesBochet - Clarify twenty-ui setup in the README ([#26044](https://github.com/twentyhq/twenty/pull/26044)) by @bosiraphael - Split Twenty UI docs into primitives and components ([#26045](https://github.com/twentyhq/twenty/pull/26045)) by @bosiraphael - i18n - translations ([#26050](https://github.com/twentyhq/twenty/pull/26050)) by @github-actions - i18n - translations ([#26051](https://github.com/twentyhq/twenty/pull/26051)) by @github-actions - Skip participant matching jobs when no person email is involved ([#26058](https://github.com/twentyhq/twenty/pull/26058)) by @neo773 - Show contact auto-creation and sync options on shared mailboxes ([#26059](https://github.com/twentyhq/twenty/pull/26059)) by @neo773 - Honor exclude group emails on shared mailboxes ([#26060](https://github.com/twentyhq/twenty/pull/26060)) by @neo773 - i18n - translations ([#26061](https://github.com/twentyhq/twenty/pull/26061)) by @github-actions - Document controlled and uncontrolled UI state ([#26062](https://github.com/twentyhq/twenty/pull/26062)) by @bosiraphael - fix(rest): forward flatIndexMaps to the merge query runner ([#26063](https://github.com/twentyhq/twenty/pull/26063)) by @charlesBochet - Document Twenty UI anatomy and composition ([#26066](https://github.com/twentyhq/twenty/pull/26066)) by @bosiraphael - i18n - translations ([#26067](https://github.com/twentyhq/twenty/pull/26067)) by @github-actions - Disable play functions in UI documentation examples ([#26069](https://github.com/twentyhq/twenty/pull/26069)) by @bosiraphael - Make record sharing an enterprise feature ([#26070](https://github.com/twentyhq/twenty/pull/26070)) by @martmull - feat(last-contact): run database event triggers in batch mode ([#26072](https://github.com/twentyhq/twenty/pull/26072)) by @martmull - Keep default domain deep links through sign-in and workspace selection ([#26073](https://github.com/twentyhq/twenty/pull/26073)) by @martmull - i18n - translations ([#26074](https://github.com/twentyhq/twenty/pull/26074)) by @github-actions - refactor(server): bind resolved application packages to their registration ([#26077](https://github.com/twentyhq/twenty/pull/26077)) by @prastoin - Cache billing entitlements in the workspace cache ([#26078](https://github.com/twentyhq/twenty/pull/26078)) by @Weiko - i18n - translations ([#26079](https://github.com/twentyhq/twenty/pull/26079)) by @github-actions - Embed MainButton and LightButton stories in docs ([#26089](https://github.com/twentyhq/twenty/pull/26089)) by @bosiraphael - fix(workflow): unblock the 2-41 See Active Version removal on workspaces that still have the item ([#26090](https://github.com/twentyhq/twenty/pull/26090)) by @thomtrp - Add website release notes for 2.39 and 2.40 ([#26092](https://github.com/twentyhq/twenty/pull/26092)) by @Bonapara - i18n - website translations ([#26093](https://github.com/twentyhq/twenty/pull/26093)) by @github-actions - Add website release notes for 2.27 and 2.34 ([#26094](https://github.com/twentyhq/twenty/pull/26094)) by @Bonapara - i18n - website translations ([#26095](https://github.com/twentyhq/twenty/pull/26095)) by @github-actions - i18n - website translations ([#26096](https://github.com/twentyhq/twenty/pull/26096)) by @github-actions </details> **Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.40.0...twenty/v2.41.0
Related Repositories
openclaw/openclaw★ 392,729
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
nilbuild/developer-roadmap★ 370,105
Interactive roadmaps, guides and other educational content to help developers grow in their careers.
morluto/rea★ 361,425
Reverse engineer anything with agents, from app behavior down to native binaries.
anomalyco/opencode★ 219,918
The open source coding agent.
n8n-io/n8n★ 208,293
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.