github twentyhq/twenty twenty/v2.41.0

4 hours ago

⚠️ Breaking changes

✨ New features

  • feat(server): validate workflow versions through exceptions, malformed at write and non-activable on activate or validate (#24964) by @charlesBochet
  • feat(metadata): author-keyed overrides blob (steps 1 to 3) (#25284) by @prastoin
  • feat(view): seed a user-owned initial view per object alongside the INDEX view (#25416) by @thomtrp
  • feat(workflow): add workspaceWorkflowId to core workflows (#25723) by @thomtrp
  • feat(usage-limit): expose usage limits over the metadata API (#25740) by @etiennejouan
  • feat(usage-limit): list workspace limits in a billing tab (#25741) by @etiennejouan
  • feat(usage-limit): create and edit limits from settings billing (#25742) by @etiennejouan
  • feat(workflow): point core workflows and command menu items at core version ids (#25757) by @thomtrp
  • feat(slack): report a rejected bot token to the platform connection (#25763) by @abdulrahmancodes
  • feat(ai): generate every deployment catalog from the model catalog and a spec (#25831) by @FelixMalfait
  • feat(slack): access mode to restrict the assistant to linked members (#25834) by @abdulrahmancodes
  • feat(workflow): read the workflow show page shell through core (#25901) by @thomtrp
  • feat(workflow): discard a workflow draft through the core API (#25902) by @thomtrp
  • feat(messaging): let apps own message channels (#25903) by @FelixMalfait
  • feat(messaging): let apps ingest messages into their channels (#25905) by @FelixMalfait
  • feat(messaging): resolve identity for non-email participants (#25906) by @FelixMalfait
  • feat(workflow): remove the See Active Version command menu item from workspaces (#25938) by @thomtrp
  • feat(last-contact): run database event triggers in batch mode (#26072) by @martmull

💅 Improvements & UX

🐛 Bug fixes

  • fix(server): backfill workflow rich text record fields (2.41 upgrade command) (#24965) by @charlesBochet
  • fix(shared): stop the utils barrel dragging handlebars into twenty-client-sdk (#25846) by @FelixMalfait
  • fix(create-twenty-app): ship a lockfile so generated apps install under an age gate (#25879) by @FelixMalfait
  • fix(front): widen the admin default-model rows (#25881) by @FelixMalfait
  • fix(currency): prevent dropping decimal separator and multiplying amount on 0-decimal fields (#25870) (#25904) by @Dewin
  • fix(email-tool): resolve the default sender through the caller entitlement filter (#25908) by @etiennejouan
  • fix(billing): restore the credit-package match on an interval switch (#25919) by @FelixMalfait
  • fix(record-form): render rich text fields with the BlockNote editor (#25920) by @thomtrp
  • fix(messaging): resolve an app channel's connectedAccount for app contexts (#25942) by @FelixMalfait
  • fix(upgrade): pin 2.20 messageList view command to its original columns (#26006) by @prastoin
  • fix(front-component-renderer): forward React 18 camelCase attributes on remote elements (#26015) by @abdulrahmancodes
  • fix(messaging): enforce CRLF line endings on raw outbound messages and surface IMAP append error responseText (#26011) (#26017) by @Dewin
  • fix(workflow): stop reporting user-facing step errors to Sentry (#26041) by @charlesBochet
  • fix(rest): forward flatIndexMaps to the merge query runner (#26063) by @charlesBochet
  • fix(workflow): unblock the 2-41 See Active Version removal on workspaces that still have the item (#26090) by @thomtrp

🔧 Developer & API

🏗️ Internal changes (10)
  • refactor(ai): derive the SDK package from the packages we bundle (#25845) by @FelixMalfait
  • refactor(shared): resolve workflow variables without handlebars (#25852) by @FelixMalfait
  • docs: state which plan row-level permissions require (#25868) by @yosh1
  • docs: move Translations under the Operations section (#25892) by @FelixMalfait
  • docs(slack): point self-hosters at the Slack setup guide (#25899) by @abdulrahmancodes
  • chore(security): bump curl/jq in the image and the npm packages flagged by Oneleet (#25926) by @charlesBochet
  • chore(security): drop extract-zip (HIGH, past SLA, no fix) by lifting mintlify's puppeteer to 25 (#25931) by @charlesBochet
  • test(messaging): cover the app-facing message channel API end to end (#25945) by @FelixMalfait
  • revert(email-tool): restore the default sender resolution (#25972) by @etiennejouan
  • refactor(server): bind resolved application packages to their registration (#26077) by @prastoin

🎉 New contributors

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

Full Changelog: twenty/v2.40.0...twenty/v2.41.0

Don't miss a new twenty release

NewReleases is sending notifications on new releases.