Self-hosted Retool Edge release 4.51
Release notes for the Self-hosted Retool 4.51 edge release.
Releases on the Edge channel occur weekly. Each release occurs one week after the equivalent release for cloud-hosted Retool.
Edge releases are available for organizations that want the latest features or to use private beta functionality. Retool recommends most organizations use Stable releases unless you have a specific need for Edge releases and can keep your deployment up-to-date.
Retool supports only the most recent release on the Edge channel. As Edge releases are weekly, bug fixes and improvements are included in the next release. All previous releases are then considered deprecated.
Retool's main documentation site reflects the latest Edge release. Since Edge updates weekly and only the most recent release is supported, the docs you're already browsing apply to this release — there's no separate version to switch to.
Self-hosted Retool 4.51
Latest releaseCurrently supported
Edge release notes
Bug fixes, improvements, and changes in this release.
| Type ↑ | Description ↕ |
|---|---|
| 4.51.0138 changes↑ | |
| added | Added a warning dialog that lists which workflows will stop running before you enable data access enforcement on a resource. [#83385] |
| added | Added a human-in-the-loop authentication flow so the app builder agent can prompt for OAuth when an MCP resource's tools require it. [#83606] |
| added | Added a dismissible banner on the Resources list page to help admins discover data access policies. [#83587] |
| added | Enabled multi-instance releases by default for apps built with the new app builder. [#83941] |
| added | Added a distinct unrestricted access outcome to audit trail logs so organization admins can see when a query ran without data security policy restrictions applied. [#83898] |
| added | Added Azure Cosmos DB as a supported resource in the new app builder, so agents can query and write documents and browse containers and partition keys in the schema browser. [#83663] |
| added | Added a What's New card promoting data access policies to the home page. [#83589] |
| added | Added the ability to delete a folder and its contents from the new app builder's editor, and fixed two bugs where a refused delete could leave files incorrectly hidden or a deleted file could reappear moments later. [#83364] |
| added | Added an Always show scrollbars option to the appearance settings of the Table and legacy Table components. [#83738] |
| added | Added the ability to rename a git branch from the Version History panel in the new app builder. [#82875] |
| added | Added a warning to the RetoolDB connection string modal about configuring session-level options through external clients. [#84214] |
| added | Added the branch author's name to each branch in the new app builder's Version History panel. [#84163] |
| added | Added support for the Authorization Code Grant with PKCE OAuth2 flow on GraphQL resources. [#84242] |
| added | Added a Test connection button to Notion resources. [#84241] |
| added | Added a read-timeout backstop for streamed query responses so a hung connector stream can no longer leave a query waiting indefinitely. [#84230] |
| added | Added a Build/Plan mode toggle to the app builder's agent chat and enabled the Markdown file preview view in the code editor for all users. [#84195] |
| added | Added the ability for the AI agent to delete folders in a single step, not just individual files. [#83996] |
| added | Added a /api/v2/usage/ai_credits public API endpoint that returns AI credit usage broken down by day, root organization, model, provider, user, and credit pool. [#83737] |
| fixed | Fixed low AI credits email notifications so an org receives at most one per billing period instead of one after every credit top-up. [#83484] |
| fixed | Fixed an issue where embedded apps could get stuck on the loading spinner and never finish loading. [#83290] |
| fixed | Fixed adaptive thinking not being enabled for claude-sonnet-5 requests in the new app builder. [#82038] |
| fixed | Fixed the bundled AI model registry so google/gemini-3.6-flash correctly exposes its reasoning effort levels and token budgets. [#83571] |
| fixed | Fixed the AI agent's theme-switching instructions so it stops trying to read a nonexistent /frontend/orgTheme.css file. [#83516] |
| fixed | Fixed OpenAPI server variables to accept template strings and dynamic values such as config variables and current_user references. [#83515] |
| fixed | Fixed uploaded chat attachments to be deleted from the sandbox when removed before the prompt runs. [#83219] |
| fixed | Fixed the Check out branch control to stay disabled while the agent is working, preventing a branch switch mid-turn. [#83197] |
| fixed | Replaced the auto-dismissing CSP update notification in the app builder preview with a persistent banner that stays until the preview is reloaded or the banner is dismissed. [#82852] |
| fixed | Fixed the resource access policy editor so that refreshing the page no longer discards an in-progress draft, and added a confirmation prompt before navigating away with unsaved changes. [#82697] |
| fixed | Fixed an issue where app builder agent requests using a model outside the built-in set could be silently dropped instead of completing. [#82656] |
| fixed | Fixed spec-backed REST API queries against OpenAPI 3.0 specs that declare relative server URLs. [#83675] |
| fixed | Fixed source control protection status not being fully removed when renamed apps with naming conflicts are unprotected. [#83660] |
| fixed | Fixed queries against Jira and other OpenAPI resources that omit a server URL to use the resource's configured server instead of failing. [#83645] |
| fixed | Fixed new dependencies of baseline system packages being blocked by the package age gate, which had been causing the app builder sandbox to fail to start. [#83624] |
| fixed | Fixed MCP OAuth discovery URLs to stay on the requested host instead of pointing at an internal address. [#83574] |
| fixed | Fixed the app builder AI agent to persist prompt context between turns so its prompt cache is reused instead of missed on every turn. [#83551] |
| fixed | Fixed Action Center pagination so requesting the next page returns only that page instead of the rest of the list. [#83537] |
| fixed | Fixed the app builder to fall back to a default value instead of showing an error when an agent's tool description omits a required field, and corrected the edit label shown for plan-only changes. [#83529] |
| fixed | Fixed OAuth token exchange, refresh, and authentication checks to ignore a resource's configured SSL and mTLS client certificates for any host other than the base URL. [#83066] |
| fixed | Fixed the new app builder's AI agent sometimes hardcoding colors or giving up instead of applying app-level theme overrides, by pointing it at appTheme.css. [#82694] |
| fixed | Fixed workflow triggers failing with a path not allowed error when run, queried for schema, or checked for status from a sandboxed workflow. [#83918] |
| fixed | Fixed a bug where stopping an agent turn immediately after sending a message could fail to cancel it, leaving the agent running while the UI showed it as stopped. [#83847] |
| fixed | Fixed the integrate changes banner staying visible in protected apps after merging in the latest changes, and fixed useIntegrateChanges sometimes choosing the wrong sync method. [#83828] |
| fixed | Fixed long-running JavaScript code executions being killed by a deployment restart before they could finish within the expected 5 minute window. [#83807] |
| fixed | Fixed an issue where unrecognized or live-only AI models could run in the app builder agent on a managed key that should have been blocked for the organization's plan. [#83766] |
| fixed | Fixed source control content fetching to return empty lists instead of errors for missing paths in Bitbucket, Azure Repos, and CodeCommit. [#83743] |
| fixed | Fixed source control deployment creating duplicate release manifests when the manifest fetch fails. [#83733] |
| fixed | Fixed source control deployment failing when duplicate app UUIDs exist in the external repository. [#83685] |
| fixed | Fixed the native dropdown arrow rendering off-theme and pinned too far to the right on <select> controls in the new app builder. [#83650] |
| fixed | Fixed transient connection errors during source control sync with Azure Repos, adding automatic retries instead of failing the sync outright. [#83622] |
| fixed | Fixed protected app preview links not showing a stale warning after new sandbox edits, and added a syncing state when rebuilding a stale preview from the version history panel. [#83597] |
| fixed | Fixed headless workflow runs, including child workflow runs and re-minted sandbox tokens, losing the signal that lets data access policies block queries against protected resources. [#83523] |
| fixed | Fixed the release manifest pull request flow getting stuck in a loading state on source control providers that don't support pull request status polling, such as Azure DevOps, and added a fallback to view the pull request directly. [#83493] |
| fixed | Fixed published Retool React apps sometimes resolving to the wrong resource environment during the OAuth connect flow, which could cause an Invalid oauth2_auth_url error. [#83400] |
| fixed | Fixed the mobile app's DatePicker component clipping the last character of the selected date on Android. [#83380] |
| fixed | Fixed new agent conversation threads that could be created without a linked app repository, which caused the sandbox to fail to start with a server error. [#83132] |
| fixed | Fixed PATCH /api/scim/v2/Groups/:groupId returning a 500 error instead of skipping a user sid that belongs to a different organization. [#84013] |
| fixed | Fixed POST and DELETE /api/pages/:pageId/favorite returning a 500 error instead of a 422 error for a non-integer pageId. [#84002] |
| fixed | Fixed POST /api/folders/trash, POST /api/folders/:folderId/contents, and POST /api/folders/trash/bulkDelete returning a 500 error instead of a 422 error when the request body was missing or had invalid folderIds or pageIds. [#83995] |
| fixed | Fixed MCP API calls losing the forwarded Space host when RETOOL_BACKEND_URL is configured, which could reject valid Space requests with an unauthorized_domain error. [#83980] |
| fixed | Fixed a bug where POST /api/sendVerificationEmail returned an HTTP 500 error instead of an HTTP 400 error when no firstName was available. [#83971] |
| fixed | Fixed the app library breadcrumb to always show the current folder as a non-clickable label, so folders with duplicate names in a nested path are distinguishable. [#83926] |
| fixed | Fixed an issue where renaming a branch during a source control sync could cause the sync to be silently skipped instead of retried under the new name. [#83761] |
| fixed | Fixed low-contrast dropdown text in dark mode by deriving popover and accent text color from WCAG contrast instead of a fixed luminance cutoff. [#83166] |
| fixed | Fixed a console error that could appear when a Retool React app's sandbox was not yet ready to report remote ref status. [#84114] |
| fixed | Fixed a Retool React agent session that could hang instead of recovering after repeated sandbox authorization errors. [#84092] |
| fixed | Fixed an issue where agent sessions could get stuck reconnecting to their sandbox and never finish loading. [#84077] |
| fixed | Excluded users in an org's External Users group from the in-product NPS survey. [#84064] |
| fixed | Fixed the /api/checkReadiness endpoint to return a 503 status code instead of 500 when the instance is not ready. [#84031] |
| fixed | Fixed an unclear error when renaming an app while a previous rename was still syncing to source control; the error now names the app that could not be found. [#84019] |
| fixed | Fixed the new app builder's resource queries to pass through SSO tokens, so REST resources that rely on %USER_OAUTH2_ACCESS_TOKEN% no longer fail with a 401. [#83485] |
| fixed | Fixed a race condition in the new app builder where a push under a just-renamed branch name could create a duplicate branch instead of updating the renamed one. [#83476] |
| fixed | Fixed several database connector streaming paths that had no maximum response size enforcement. [#84231] |
| fixed | Fixed a 500 error that could occur when opening a public app. [#84227] |
| fixed | Fixed a delay before a queued message appeared in the new app builder's chat when starting a new project. [#84222] |
| fixed | Fixed the new app builder's third-party license check to accept license names written in prose form. [#84215] |
| fixed | Fixed Permissions v1 so one group's environment-level resource grant no longer overrides another group's grant. [#84087] |
| fixed | Fixed ResourceDao.getByNames so it always scopes results to the requesting organization, preventing a code path from returning another organization's resources. [#84030] |
| fixed | Fixed AI usage tracking in the new app builder to report OpenAI cache-write tokens instead of always recording zero, correcting a cost undercount. [#84025] |
| fixed | Fixed the publish button in the new app builder to stay disabled for protected apps when a new branch has no unpublished changes. [#83987] |
| fixed | Fixed the new app builder's chat threads to tolerate a mismatch between the live AI model registry and the backend's bundled snapshot, so thread creation and model selection no longer break when a model exists on only one side. [#83815] |
| fixed | Fixed full source-control deploys writing an empty publish commit and advancing main for apps in the new app builder whose files had not changed, which needlessly staled every active agent thread for that app. [#84413] |
| fixed | Fixed chat file uploads and downloads in the new app builder failing after a sandbox reconnect, by refreshing the upload access token alongside the sandbox token. [#84397] |
| fixed | Fixed the new app builder's chat composer to show the correct height and placeholder while it loads, preventing content from jumping when the composer appears. [#84388] |
| fixed | Fixed the v3 MSSQL connector to accept array query parameters again by restoring array-to-string coercion, and improved the error message when an object is passed instead. [#84379] |
| fixed | Fixed the new app builder's new-file name-collision check to compare names case-insensitively, so two backend files or folders differing only in case can no longer be created side by side. [#84335] |
| fixed | Fixed a server error when running workflow REST API query blocks on resources that require a custom-auth login. [#84327] |
| fixed | Fixed JSON user attribute values overlapping adjacent rows in Settings and displaying as [object Object] in a user's attribute assignments. [#84303] |
| fixed | Fixed the in-app support breakage report form pointing to an outdated URL. [#84295] |
| fixed | Fixed branch renaming in the new app builder to fall back to the server when the sandbox is disconnected or the rename times out, instead of failing outright. [#84273] |
| fixed | Fixed links and redirects in the new app builder failing to open in the top browser frame on self-hosted and custom domain deployments. [#84265] |
| fixed | Fixed the new app builder's preview and publish jobs being keyed on a legacy thread identifier instead of the app's branch, which could misroute preview builds. [#84264] |
| fixed | Fixed duplicate role-grant requests returning a 400 validation error instead of a 409 conflict with a clear message. [#84238] |
| fixed | Fixed a bug where a malformed screen ID in a role-grant API request returned a 500 error instead of a 404. [#84218] |
| fixed | Fixed the code editor not reflecting backend function changes after a git merge or pull, and fixed folder deletions being reported as failed even when most files were removed. [#84148] |
| fixed | Fixed a bug where dropping a List View component inside another List View could throw an error and fail to render. [#83123] |
| improved | Improved the agent to process every queued prompt in a single turn instead of one at a time. [#83188] |
| improved | Improved the rename modal for protected apps and resources so leading or trailing whitespace in the name only shows an error on submission, not while typing. [#83992] |
| improved | Improved the error message shown when a pinned release in a git-based release manifest references a Retool React app that cannot be found or is unprotected. [#84136] |
| improved | Reduced startup latency overhead for JavaScript query execution by polling more frequently for the sandbox memory monitor to attach. [#84111] |
| improved | Improved new branches in the new app builder to default their description to "New branch" instead of appearing blank. [#84162] |
| improved | Improved the governance policy editor to make Create the primary action for a new policy. [#84137] |
| improved | Improved the new-file dropdown menu in the Code tab of the new app builder, grouping options into folder, frontend, and backend sections with dividers and color-coded icons. [#84291] |
| improved | Improved the permission-denied message on the new resource page so the toast persists through the redirect to the resources list. [#84210] |
| improved | Improved the rename and move app modals with tighter spacing and a note that the change appears after the source control deployment finishes. [#84142] |
| improved | Improved the new app builder's Version History diff viewer to load a working-branch commit's files one at a time from the sandbox instead of fetching the whole commit at once. [#84049] |
| improved | Improved the Version History panel's working-branch tab in the new app builder to load commits directly from the sandbox instead of the server, including live diffs for unpublished changes. [#83269] |
| improved | Improved how the app editor tracks a working branch's latest commit so it updates immediately from the sandbox instead of waiting on a separate request. [#83268] |
| changed | Changed how the agent handles chat file attachments so uploaded files always go through the sandbox's /uploads/ folder instead of being sent inline to the model. [#83351] |
| changed | Changed on-premises telemetry to report only whether REDIS_HOST, REDIS_PORT, REDIS_PASSWORD, and their Redis User Cache and RPC Redis equivalents are set, without exposing their values. [#83552] |
| changed | Disabled legacy MSSQL connector versions by default for self-hosted. [#83728] |
| changed | Changed NPS survey eligibility to require real build activity, such as page saves, agent threads, or workflow saves, instead of admin or editor permissions alone. [#84054] |
| changed | Updated the publish modal's error message to say backend function instead of serverless function, matching the rest of the IDE. [#84357] |
| changed | Changed the MSSQL connector deprecation banner to past tense now that the deprecation date has passed. [#84302] |
| removed | Removed the Custom API Endpoint field for BigQuery resource connections, previously used to route traffic through a Private Service Connect endpoint. [#83456] |
| removed | Removed the Submit a prompt item from the Help menu. [#84283] |
| removed | Removed the ability to create or duplicate Vertica resources. [#84234] |
| deprecated | Deprecated BigID resources: organizations can no longer create or duplicate a BigID resource, though existing ones can still be edited or deleted. [#84048] |
| security fix | Patched the code execution sandbox environment to address six security vulnerabilities (CVE-2026-69244, CVE-2026-69243, CVE-2026-59881, CVE-2026-59885, CVE-2026-59884, CVE-2026-59886). [#83457] |
| security fix | Patched a Java database connector dependency to address CVE-2026-49844. [#83454] |
| security fix | Fixed a security vulnerability in a third-party networking dependency used for proxy connections (CVE-2026-69192, CVE-2026-42338). [#83198] |
| security fix | Fixed a security vulnerability in the Java database connector (CVE-2025-3588). [#83196] |
| security fix | Fixed a security vulnerability in the DOMPurify sanitization library. Resolves GHSA-55q2-fjhq-7xh7. [#82897] |
| security fix | Fixed a security vulnerability in the Databricks JDBC connector. [#83568] |
| security fix | Fixed a vulnerability that could let a crafted query bypass data access policy enforcement on certain resources. [#83535] |
| security fix | Patched Apache HttpComponents libraries used by the Java database connector to address multiple vulnerabilities (CVE-2026-54399, CVE-2026-54428, CVE-2026-64607). [#83220] |
| security fix | Fixed a security vulnerability in outbound request filtering used by the image proxy (CVE-2025-57814). [#83203] |
| security fix | Patched a third-party web framework dependency to address four vulnerabilities. Resolves CVE-2026-69207, CVE-2026-71848, CVE-2026-71849, and CVE-2026-71850. [#82898] |
| security fix | Patched a third-party ID-generation dependency to address three vulnerabilities. Resolves CVE-2026-67213, CVE-2026-67214, and CVE-2026-73086. [#82896] |
| security fix | Patched BouncyCastle used by the Java database connector to address three critical vulnerabilities. [#83450] |
| security fix | Fixed source control credentials being exposed in error logs during git clone and fetch operations. [#83916] |
| security fix | Fixed an authorization issue that could allow a user without the required workflow permissions to view workflow run logs or export a workflow. [#83885] |
| security fix | Fixed a Postgres integration issue that could leak information through SQL error details when data access enforcement restricted a query. [#83842] |
| security fix | Fixed unauthorized access to app source code through git server endpoints for users with only read access. [#84089] |
| security fix | Fixed a vulnerability where the Presto and Vertica connectors could be used to reach unintended JDBC drivers on the shared classpath. [#84232] |
| security fix | Fixed a security vulnerability related to workflow run identity handling. [#83524] |
| security fix | Fixed an authorization check that could let an unauthorized request begin app or agent thread provisioning in the new app builder before being rejected. [#84252] |
| security fix | Fixed a security vulnerability related to draft folder permissions. [#84246] |
| security fix | Fixed a bug where a failed data-security policy rewrite could return internal error details to the client instead of a generic message. [#84032] |
| 138 changes | |