twenty/v2.41.0
BasedHardware/omitwenty/v2.41.0Sep 17, 2026by twenty-pr[bot]
Upgrading?
AI Summary
Release focused on workflow validation, messaging capabilities, and usage limit management.
Key Highlights
- Let every application admin manage workspace-shared connections
- Validate workflow versions and discard drafts
- Expose usage limits over the metadata API
- Messaging app ownership and message ingestion
- Desktop Recorder integration added
Breaking Changes
- Let every application admin manage a workspace-shared connection
New Features
- Workflow version validation
- Metadata author-keyed overrides
- Usage limits API exposure
- Messaging app ownership
- Desktop Recorder support
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
public-apis/public-apis★ 491,174
A collective list of free APIs
NousResearch/hermes-agent★ 256,015
The agent that grows with you
yt-dlp/yt-dlp★ 200,192
A feature-rich command-line audio/video downloader
microsoft/markitdown★ 191,524
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPT★ 187,702
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.