sdk/v2.25.0
pola-rs/polarssdk/v2.25.0Jul 29, 2026by prastoin
AI Summary
Adds key-value storage for logic functions, new uninstall hooks, and synchronous server route resolvers. It also restores custom settings tabs for applications.
Key Highlights
- Call kv.get, kv.set, and kv.delete in logic functions to store per-app data.
- defineUninstallLogicFunction runs cleanup before app entities are deleted.
- Server route resolvers can return values synchronously to unblock webhooks.
- onConnectLogicFunctionUniversalIdentifier triggers logic after OAuth connection.
- roleUniversalIdentifier assigns roles to agents at install time.
New Features
- Key-value storage API (kv.get, kv.set, kv.delete) scoped to app and workspace.
- Uninstall logic function hook for cleanup.
- Synchronous response support for server route resolvers.
- OAuth connection logic triggers.
- Manifest-driven agent role assignment.
- Restored custom settings tab (settingsCustomTabFrontComponentUniversalIdentifier).
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