sdk/v2.25.0

ibnaleem/gosearchsdk/v2.25.0Jul 29, 2026by prastoin

AI Summary

This SDK release introduces key-value storage for applications, new logic functions for cleanup and OAuth connections, and allows server route resolvers to return synchronous responses. It also restores application custom settings tabs and deprecates the workspace metadataVersion field.

Key Highlights

  • Add kv.get, kv.set, and kv.delete to store per-app key-value data scoped to the installing workspace.
  • Add defineUninstallLogicFunction to run cleanup logic before app entities are deleted.
  • Server route resolvers can now return values synchronously to unblock webhook handshakes.
  • Set roleUniversalIdentifier on AgentManifest to assign a role at install time.
  • Restore settingsCustomTabFrontComponentUniversalIdentifier for custom settings tabs.

New Features

  • Key-value storage for applications using twenty-sdk/logic-function.
  • onConnectLogicFunctionUniversalIdentifier to trigger logic functions after OAuth connection.
  • roleUniversalIdentifier for declarative agent role assignment.
  • defineUninstallLogicFunction hook for cleanup before uninstall.
  • Synchronous responses from server route resolvers.
  • settingsCustomTabFrontComponentUniversalIdentifier restored.

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