Twenty logo

Twenty

The open alternative to Salesforce, designed for AI

Alternative to: salesforce, hubspot, pipedrive, zoho crm

Twenty screenshot

About Versions (102)

sdk/v2.25.0

2026-07-29

Release notes preview

🌟 Highlights

  • Call kv.get, kv.set, and kv.delete in logic functions to store and retrieve per-app key-value data scoped to the installing workspace. (#23089)
  • defineUninstallLogicFunction runs your cleanup logic before app entities are deleted, while app objects and records are still queryable. (#23227)
  • Server route resolvers can now return a value synchronously to the HTTP caller, unblocking webhook handshakes like Slack’s url_verification challenge. (#23233)
  • Set onConnectLogicFunctionUniversalIdentifier on a connection provider manifest to fire a logic function immediately after an OAuth connection succeeds. (#23167)
  • roleUniversalIdentifier on AgentManifest assigns a role to an agent at install time without writing a post-install hook. (#23206)

✨ New features

  • Use kv.get, kv.set, and kv.delete from twenty-sdk/logic-function to read and write key-value pairs scoped to your app and the installing workspace; entries require an APPLICATION_ACCESS token and apps cannot access each other’s pairs. (#23089) by @abdulrahmancodes
  • Add onConnectLogicFunctionUniversalIdentifier to your connection provider manifest to trigger a named logic function immediately after an OAuth connection is established for that provider. (#23167) by @abdulrahmancodes
  • Set roleUniversalIdentifier on defineAgent or AgentManifest to declaratively assign a role to your agent at install time, eliminating the need for a manual post-install hook. (#23206) by @abdulrahmancodes
  • Export defineUninstallLogicFunction to register a logic function that runs before your app’s entities are deleted on uninstall — the handler can still query app objects and records at that point; failures are best-effort and do not block uninstall. (#23227) by @martmull
  • Server route resolvers can now return a plain object directly to the caller instead of always receiving a queued 202; use this for integrations that require a synchronous response such as Slack’s url_verification handshake. (#23233) by @abdulrahmancodes
  • settingsCustomTabFrontComponentUniversalIdentifier is restored on ApplicationManifest; apps can again declare a custom settings tab rendered via a front component, reversing the removal from a prior release. (#23256) by @martmull

💅 Improvements & UX

  • workspace.metadataVersion is now marked deprecated in the GraphQL schema; remove it from workspace queries in your client code. (#23189) by @Weiko

🐛 Bug fixes

  • Installed application icons now display correctly across the workspace UI; logoUrl is fetched properly in the application fragment rather than relying solely on the bootstrap user query. (#23411) by @martmull

🔧 Developer & API

  • A new twenty-sdk env var disables the provider check; useful when running the SDK in environments where provider validation should be skipped. (#23155) by @prastoin
  • Use the new upgrade-application CLI command to roll out app upgrades across workspaces; the admin UI rollout buttons for install-on-all and upgrade-existing have been removed. (#23212) by @martmull
🏗️ Internal changes (8)
  • Fix dashboard record table widget aggregate persistence (#23008) by @scarab-systems
  • Stop leaking the refresh token in the social SSO redirect URL (#23061) by @bosiraphael
  • Make solo tabs first-class: derived presentation, native editing, unified widget header (#23109) by @FelixMalfait
  • Add post-onboarding AI chat setup behind a feature flag (#23120) by @bosiraphael
  • Feat/email settings v2 (#23180) by @neo773
  • Feat/email composer improvements (#23188) by @neo773
  • Enrich workspace company via People Data Labs during onboarding (#23199) by @bosiraphael
  • Replace the onboarding AI chat feature flag with an environment variable (#23439) by @bosiraphael

🎉 New contributors

Full changelog (20 PRs)
  • Fix dashboard record table widget aggregate persistence (#23008) by @scarab-systems
  • Stop leaking the refresh token in the social SSO redirect URL (#23061) by @bosiraphael
  • key-value storage for applications (#23089) by @abdulrahmancodes
  • Make solo tabs first-class: derived presentation, native editing, unified widget header (#23109) by @FelixMalfait
  • Add post-onboarding AI chat setup behind a feature flag (#23120) by @bosiraphael
  • chore: bump version to 2.24.0 (#23152) by @twenty-pr
  • twenty-sdk env var to disable prov check (#23155) by @prastoin
  • feat(connections): run a logic function on connection provider connect (#23167) by @abdulrahmancodes
  • Feat/email settings v2 (#23180) by @neo773
  • Feat/email composer improvements (#23188) by @neo773
  • Deprecate workspace metadataVersion and stop consuming it in the frontend (#23189) by @Weiko
  • Enrich workspace company via People Data Labs during onboarding (#23199) by @bosiraphael
  • feat: agent roleUniversalIdentifier for manifest-driven role assignment (#23206) by @abdulrahmancodes
  • Replace admin app rollout buttons with upgrade-application CLI command (#23212) by @martmull
  • chore: bump version to 2.25.0 (#23221) by @twenty-pr
  • Add defineUninstallLogicFunction hook for applications (#23227) by @martmull
  • Let server route resolvers answer the caller synchronously (#23233) by @abdulrahmancodes
  • feat(applications): restore the application custom settings tab (#23256) by @martmull
  • fix(applications): display the installed application icon (#23411) by @martmull
  • Replace the onboarding AI chat feature flag with an environment variable (#23439) by @bosiraphael

Full Changelog: https://github.com/twentyhq/twenty/compare/sdk/v2.23.0…sdk/v2.25.0