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