sdk/v2.25.0
givanz/Vvvebsdk/v2.25.0Jul 29, 2026by prastoin
AI Summary
This SDK release provides developers with key-value storage for apps, logic functions for connection lifecycle events, and synchronous route resolvers for integrations like Slack. It also introduces features for uninstall logic and agent role assignment.
Key Highlights
- Added key-value storage (kv.get, kv.set, kv.delete) scoped to apps
- Added defineUninstallLogicFunction to run cleanup before app deletion
- Server route resolvers can return synchronous responses
- Added onConnectLogicFunctionUniversalIdentifier for OAuth triggers
- Added roleUniversalIdentifier to AgentManifest for declarative roles
New Features
- Key-value storage for applications
- Uninstall logic function
- Synchronous route resolvers
- Connection logic hooks
- Agent role assignment via manifest
- Restored application custom settings tabs
Full Release Notes
## Release notes preview <!-- generated-release-notes v1 --> ## 🌟 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](https://github.com/twentyhq/twenty/pull/23089)) - defineUninstallLogicFunction runs your cleanup logic before app entities are deleted, while app objects and records are still queryable. ([#23227](https://github.com/twentyhq/twenty/pull/23227)) - Server route resolvers can now return a value synchronously to the HTTP caller, unblocking webhook handshakes like Slack's url_verification challenge. ([#23233](https://github.com/twentyhq/twenty/pull/23233)) - Set onConnectLogicFunctionUniversalIdentifier on a connection provider manifest to fire a logic function immediately after an OAuth connection succeeds. ([#23167](https://github.com/twentyhq/twenty/pull/23167)) - roleUniversalIdentifier on AgentManifest assigns a role to an agent at install time without writing a post-install hook. ([#23206](https://github.com/twentyhq/twenty/pull/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](https://github.com/twentyhq/twenty/pull/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](https://github.com/twentyhq/twenty/pull/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](https://github.com/twentyhq/twenty/pull/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](https://github.com/twentyhq/twenty/pull/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](https://github.com/twentyhq/twenty/pull/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](https://github.com/twentyhq/twenty/pull/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](https://github.com/twentyhq/twenty/pull/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](https://github.com/twentyhq/twenty/pull/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](https://github.com/twentyhq/twenty/pull/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](https://github.com/twentyhq/twenty/pull/23212)) by @martmull <details> <summary>🏗️ Internal changes (8)</summary> - Fix dashboard record table widget aggregate persistence ([#23008](https://github.com/twentyhq/twenty/pull/23008)) by @scarab-systems - Stop leaking the refresh token in the social SSO redirect URL ([#23061](https://github.com/twentyhq/twenty/pull/23061)) by @bosiraphael - Make solo tabs first-class: derived presentation, native editing, unified widget header ([#23109](https://github.com/twentyhq/twenty/pull/23109)) by @FelixMalfait - Add post-onboarding AI chat setup behind a feature flag ([#23120](https://github.com/twentyhq/twenty/pull/23120)) by @bosiraphael - Feat/email settings v2 ([#23180](https://github.com/twentyhq/twenty/pull/23180)) by @neo773 - Feat/email composer improvements ([#23188](https://github.com/twentyhq/twenty/pull/23188)) by @neo773 - Enrich workspace company via People Data Labs during onboarding ([#23199](https://github.com/twentyhq/twenty/pull/23199)) by @bosiraphael - Replace the onboarding AI chat feature flag with an environment variable ([#23439](https://github.com/twentyhq/twenty/pull/23439)) by @bosiraphael </details> ## 🎉 New contributors - @scarab-systems made their first contribution in https://github.com/twentyhq/twenty/pull/23008 - @Rehansanjay made their first contribution in https://github.com/twentyhq/twenty/pull/22885 - @djadji-gueye made their first contribution in https://github.com/twentyhq/twenty/pull/23287 - @eeshsaxena made their first contribution in https://github.com/twentyhq/twenty/pull/23293 - @guillaume-flambard made their first contribution in https://github.com/twentyhq/twenty/pull/23325 - @Shinu-Cherian made their first contribution in https://github.com/twentyhq/twenty/pull/23343 <details> <summary>Full changelog (20 PRs)</summary> - Fix dashboard record table widget aggregate persistence ([#23008](https://github.com/twentyhq/twenty/pull/23008)) by @scarab-systems - Stop leaking the refresh token in the social SSO redirect URL ([#23061](https://github.com/twentyhq/twenty/pull/23061)) by @bosiraphael - key-value storage for applications ([#23089](https://github.com/twentyhq/twenty/pull/23089)) by @abdulrahmancodes - Make solo tabs first-class: derived presentation, native editing, unified widget header ([#23109](https://github.com/twentyhq/twenty/pull/23109)) by @FelixMalfait - Add post-onboarding AI chat setup behind a feature flag ([#23120](https://github.com/twentyhq/twenty/pull/23120)) by @bosiraphael - chore: bump version to 2.24.0 ([#23152](https://github.com/twentyhq/twenty/pull/23152)) by @twenty-pr - twenty-sdk env var to disable prov check ([#23155](https://github.com/twentyhq/twenty/pull/23155)) by @prastoin - feat(connections): run a logic function on connection provider connect ([#23167](https://github.com/twentyhq/twenty/pull/23167)) by @abdulrahmancodes - Feat/email settings v2 ([#23180](https://github.com/twentyhq/twenty/pull/23180)) by @neo773 - Feat/email composer improvements ([#23188](https://github.com/twentyhq/twenty/pull/23188)) by @neo773 - Deprecate workspace metadataVersion and stop consuming it in the frontend ([#23189](https://github.com/twentyhq/twenty/pull/23189)) by @Weiko - Enrich workspace company via People Data Labs during onboarding ([#23199](https://github.com/twentyhq/twenty/pull/23199)) by @bosiraphael - feat: agent roleUniversalIdentifier for manifest-driven role assignment ([#23206](https://github.com/twentyhq/twenty/pull/23206)) by @abdulrahmancodes - Replace admin app rollout buttons with upgrade-application CLI command ([#23212](https://github.com/twentyhq/twenty/pull/23212)) by @martmull - chore: bump version to 2.25.0 ([#23221](https://github.com/twentyhq/twenty/pull/23221)) by @twenty-pr - Add defineUninstallLogicFunction hook for applications ([#23227](https://github.com/twentyhq/twenty/pull/23227)) by @martmull - Let server route resolvers answer the caller synchronously ([#23233](https://github.com/twentyhq/twenty/pull/23233)) by @abdulrahmancodes - feat(applications): restore the application custom settings tab ([#23256](https://github.com/twentyhq/twenty/pull/23256)) by @martmull - fix(applications): display the installed application icon ([#23411](https://github.com/twentyhq/twenty/pull/23411)) by @martmull - Replace the onboarding AI chat feature flag with an environment variable ([#23439](https://github.com/twentyhq/twenty/pull/23439)) by @bosiraphael </details> **Full Changelog**: https://github.com/twentyhq/twenty/compare/sdk/v2.23.0...sdk/v2.25.0