<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Retool Changelog</title>
        <link>https://docs.retool.com/changelog</link>
        <description>Updates, changes, and improvements at Retool.</description>
        <lastBuildDate>Wed, 11 Nov 2026 15:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Copyright © 2026 Retool, Inc.</copyright>
        <item>
            <title><![CDATA[Web search in apps]]></title>
            <link>https://docs.retool.com/changelog/app-web-search</link>
            <guid>https://docs.retool.com/changelog/app-web-search</guid>
            <pubDate>Wed, 11 Nov 2026 15:00:00 GMT</pubDate>
            <description><![CDATA[Retool supports web search while app building and from functions.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary all-plans" target="_blank" rel="noopener noreferrer">All plans</a></span></span></div><p>Retool now supports performing web searches from the <strong>Chat</strong> tab of the app builder and from functions in draft or published apps. While building apps, the agent can access the internet to answer questions or provide more context. Web searches use a Tavily account that Retool manages for you.</p>
<div class="assist-prompts"><button class="assist-prompts__header" aria-expanded="true" aria-label="Collapse Sample prompts"><span class="assist-prompts__header-icon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256" aria-label="App"><path d="M196.12,128c24.65-34.61,37.22-70.38,19.74-87.86S162.61,35.23,128,59.88C93.39,35.23,57.62,22.66,40.14,40.14S35.23,93.39,59.88,128c-24.65,34.61-37.22,70.38-19.74,87.86h0c5.63,5.63,13.15,8.14,21.91,8.14,18.48,0,42.48-11.17,66-27.88C151.47,212.83,175.47,224,194,224c8.76,0,16.29-2.52,21.91-8.14h0C233.34,198.38,220.77,162.61,196.12,128Zm8.43-76.55c7.64,7.64,2.48,32.4-18.52,63.28a300.33,300.33,0,0,0-21.19-23.57A300.33,300.33,0,0,0,141.27,70C172.15,49,196.91,43.8,204.55,51.45ZM176.29,128a289.14,289.14,0,0,1-22.76,25.53A289.14,289.14,0,0,1,128,176.29a289.14,289.14,0,0,1-25.53-22.76A289.14,289.14,0,0,1,79.71,128,298.62,298.62,0,0,1,128,79.71a289.14,289.14,0,0,1,25.53,22.76A289.14,289.14,0,0,1,176.29,128ZM51.45,51.45c2.2-2.21,5.83-3.35,10.62-3.35C73.89,48.1,92.76,55,114.72,70A304,304,0,0,0,91.16,91.16,300.33,300.33,0,0,0,70,114.73C49,83.85,43.81,59.09,51.45,51.45Zm0,153.1C43.81,196.91,49,172.15,70,141.27a300.33,300.33,0,0,0,21.19,23.57A304.18,304.18,0,0,0,114.73,186C83.85,207,59.09,212.2,51.45,204.55Zm153.1,0c-7.64,7.65-32.4,2.48-63.28-18.52a304.18,304.18,0,0,0,23.57-21.19A300.33,300.33,0,0,0,186,141.27C207,172.15,212.19,196.91,204.55,204.55ZM140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128Z"></path></svg></span><span class="react-app-prompts-title assist-prompts__header-title">Sample prompts</span><span class="assist-prompts__spacer"></span><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 256 256" class="assist-prompts__caret"><path d="M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z"></path></svg></button><div class="assist-prompts__list"><div class="assist-prompts__item"><span class="assist-prompts__item-text">Help me find a public npm package to display an interactive map on the page.</span><button class="assist-prompts__copy" aria-label="Copy prompt: Help me find a public npm package to display an interactive map on the page."><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 256 256"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg>Copy</button></div><div class="assist-prompts__item"><span class="assist-prompts__item-text">Tell me what kinds of things I can do with the latest update to the Linear API.</span><button class="assist-prompts__copy" aria-label="Copy prompt: Tell me what kinds of things I can do with the latest update to the Linear API."><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 256 256"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg>Copy</button></div></div></div>
<p>Your apps can also use functions to perform web searches. Prompt the agent to include the search functionality that the users will need.</p>
<div class="assist-prompts"><button class="assist-prompts__header" aria-expanded="true" aria-label="Collapse Sample prompt"><span class="assist-prompts__header-icon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256" aria-label="App"><path d="M196.12,128c24.65-34.61,37.22-70.38,19.74-87.86S162.61,35.23,128,59.88C93.39,35.23,57.62,22.66,40.14,40.14S35.23,93.39,59.88,128c-24.65,34.61-37.22,70.38-19.74,87.86h0c5.63,5.63,13.15,8.14,21.91,8.14,18.48,0,42.48-11.17,66-27.88C151.47,212.83,175.47,224,194,224c8.76,0,16.29-2.52,21.91-8.14h0C233.34,198.38,220.77,162.61,196.12,128Zm8.43-76.55c7.64,7.64,2.48,32.4-18.52,63.28a300.33,300.33,0,0,0-21.19-23.57A300.33,300.33,0,0,0,141.27,70C172.15,49,196.91,43.8,204.55,51.45ZM176.29,128a289.14,289.14,0,0,1-22.76,25.53A289.14,289.14,0,0,1,128,176.29a289.14,289.14,0,0,1-25.53-22.76A289.14,289.14,0,0,1,79.71,128,298.62,298.62,0,0,1,128,79.71a289.14,289.14,0,0,1,25.53,22.76A289.14,289.14,0,0,1,176.29,128ZM51.45,51.45c2.2-2.21,5.83-3.35,10.62-3.35C73.89,48.1,92.76,55,114.72,70A304,304,0,0,0,91.16,91.16,300.33,300.33,0,0,0,70,114.73C49,83.85,43.81,59.09,51.45,51.45Zm0,153.1C43.81,196.91,49,172.15,70,141.27a300.33,300.33,0,0,0,21.19,23.57A304.18,304.18,0,0,0,114.73,186C83.85,207,59.09,212.2,51.45,204.55Zm153.1,0c-7.64,7.65-32.4,2.48-63.28-18.52a304.18,304.18,0,0,0,23.57-21.19A300.33,300.33,0,0,0,186,141.27C207,172.15,212.19,196.91,204.55,204.55ZM140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128Z"></path></svg></span><span class="react-app-prompts-title assist-prompts__header-title">Sample prompt</span><span class="assist-prompts__spacer"></span><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 256 256" class="assist-prompts__caret"><path d="M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z"></path></svg></button><div class="assist-prompts__list"><div class="assist-prompts__item"><span class="assist-prompts__item-text">When the user clicks the Search button, search the internet and return the top three results for the user's query.</span><button class="assist-prompts__copy" aria-label="Copy prompt: When the user clicks the Search button, search the internet and return the top three results for the user's query."><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 256 256"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg>Copy</button></div></div></div>
<p>Web search is on by default. Admins can disable this feature by toggling off <strong>Web search</strong> in <strong>Settings</strong> &gt; <strong>AI</strong>.</p>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>This feature is not available to self-hosted instances.</p></div></div>]]></content:encoded>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Service users for workflows]]></title>
            <link>https://docs.retool.com/changelog/service-users-workflows</link>
            <guid>https://docs.retool.com/changelog/service-users-workflows</guid>
            <pubDate>Thu, 05 Nov 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Choose a permission group as a workflow's run identity so scheduled, webhook-triggered, and query-triggered runs use that group's access.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.88 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary business-plan" target="_blank" rel="noopener noreferrer">Business</a> <span class="docs-inline-sep" aria-hidden="true">•</span> <a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">4.34.16 Stable</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary all-plans" target="_blank" rel="noopener noreferrer">All plans</a></span></span></div><p>Workflows triggered by a schedule, a webhook, or a query, can now run as a <a class="glossary service-user" target="_blank" rel="noopener noreferrer">service user</a>. Service users for workflows are available on Business and Enterprise plans. Previously these runs defaulted to running as the first admin in your organization.</p>
<p>Select a permission group in the <strong>Triggers</strong> panel of the workflow IDE. Retool creates a service user for the group, and triggered workflows run as that service user. Only members of the group and admins can edit workflows running as a service user, and run logs are limited to people in the service user group.</p>
<p>Key features of this release include:</p>
<ul>
<li class="">Service users allow workflows run against resources with <a class="" href="https://docs.retool.com/data-sources/concepts/data-access-enforcement">data access enforcement</a> turned on. Scheduled and webhook-triggered workflows no longer need a separate unenforced resource. Grant the service user group access in your <a class="" href="https://docs.retool.com/data-sources/concepts/access-policies">access policies</a>.</li>
<li class="">Service users do not count toward your user seats.</li>
<li class="">Audit logs record actions that a service user performs under the existing event types, with the service user's ID as the actor.</li>
<li class="">Source control includes a workflow's run identity in its YAML file. On deploy, Retool matches the service user by ID, then by group name.</li>
</ul>
<!-- -->
<div style="position:relative;padding-bottom:calc(70.87781731909845% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/weCmHkV06zVqs1kerV4W?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Service User Docs Demo | Retool" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>
<p>If an admin deletes a service user group, workflows set to run as that group will fail until you choose a new group.</p>
<p>To get started, refer to <a class="" href="https://docs.retool.com/workflows/guides/run-as-service-user">Run a workflow as a service user</a>. For details on how run identities work, refer to <a class="" href="https://docs.retool.com/workflows/concepts/service-users">Service users for workflows</a>.</p>]]></content:encoded>
            <category>New</category>
            <category>Workflows</category>
            <category>Cloud</category>
            <category>Self-hosted</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261105</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261105</guid>
            <pubDate>Thu, 05 Nov 2026 02:50:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates: November 5, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34.16">Retool 4.34.16</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0.28">Retool 4.0.28</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Microsoft SQL integration versions 1.0 and 2.0 removed]]></title>
            <link>https://docs.retool.com/changelog/mssql-v1-v2-removal</link>
            <guid>https://docs.retool.com/changelog/mssql-v1-v2-removal</guid>
            <pubDate>Wed, 04 Nov 2026 19:29:00 GMT</pubDate>
            <description><![CDATA[Retool removed versions 1.0 and 2.0 of the Microsoft SQL integration. Resources must use version 3.0.]]></description>
            <content:encoded><![CDATA[<p>Retool removed versions 1.0 and 2.0 of the Microsoft SQL integration. The removal is live on cloud instances. It reaches self-hosted instances in <a class="" href="https://docs.retool.com/releases/edge/2026#4.88">Retool 4.88 Edge</a> and the first release of the next stable cut.</p>
<p>Apps, workflows, and queries that depend on Microsoft SQL resources still using version 1.0 or 2.0 stop working. This follows the <a class="" href="https://docs.retool.com/changelog/mssql-v1-v2-deprecation">deprecation announced in July</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-to-do">What to do<a href="https://docs.retool.com/changelog/mssql-v1-v2-removal#what-to-do" class="hash-link" aria-label="Direct link to What to do" title="Direct link to What to do">​</a></h2>
<p>Update each affected resource to version 3.0:</p>
<ol>
<li class="">Open the resource from the <strong>Resources</strong> page.</li>
<li class="">Change <strong>Connector version</strong> to <strong>Version 3.0</strong>.</li>
<li class="">Save your changes.</li>
</ol>
<p>Version 3.0 <a class="" href="https://docs.retool.com/changelog/mssql-v3-array-params">accepts array values in query parameters</a>, so you don't need to rewrite existing queries. If you haven't intentionally created a resource on an older integration version, your resource is likely already on version 3.0.</p>]]></content:encoded>
            <category>Deprecation</category>
            <category>Action required</category>
            <category>Resources</category>
            <category>Self-hosted</category>
            <category>Cloud</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.88 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-488-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-488-edge</guid>
            <pubDate>Wed, 04 Nov 2026 19:29:00 GMT</pubDate>
            <description><![CDATA[Retool 4.88 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.88">Retool 4.88</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[App testing]]></title>
            <link>https://docs.retool.com/changelog/app-testing</link>
            <guid>https://docs.retool.com/changelog/app-testing</guid>
            <pubDate>Tue, 03 Nov 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Testing for apps is now in public beta.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary all-plans" target="_blank" rel="noopener noreferrer">All plans</a></span><span class="docs-info-bar__pill"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="docs-info-bar__icon" aria-hidden="true"><path d="M208,144a15.78,15.78,0,0,1-10.42,14.94L146,178l-19,51.62a15.92,15.92,0,0,1-29.88,0L78,178l-51.62-19a15.92,15.92,0,0,1,0-29.88L78,110l19-51.62a15.92,15.92,0,0,1,29.88,0L146,110l51.62,19A15.78,15.78,0,0,1,208,144ZM152,48h16V64a8,8,0,0,0,16,0V48h16a8,8,0,0,0,0-16H184V16a8,8,0,0,0-16,0V32H152a8,8,0,0,0,0,16Zm88,32h-8V72a8,8,0,0,0-16,0v8h-8a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0V96h8a8,8,0,0,0,0-16Z"></path></svg><a class="glossary public-beta" target="_blank" rel="noopener noreferrer">Public beta</a></span></span></div><p>You can now use the <strong>Build with tests</strong> setting to validate that your app is functioning as expected and catch unintended changes before you publish your app to end users. Toggle this setting on from the <a class="" href="https://docs.retool.com/build/apps/concepts/app-builder#chat-tab">chat settings</a> or from the <a class="" href="https://docs.retool.com/build/apps/concepts/app-builder#debug-console">debug console</a>.</p>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>App testing is currently rolling out to cloud organizations. It is not yet available to self-hosted organizations.</p></div></div>
<!-- -->
<div style="position:relative;padding-bottom:calc(50.66666666666667% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/qRQb9JRI1GP4IFNgYMBU?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Build tests" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>
<p>When app testing is enabled, the agent writes or updates tests whenever it adds or changes behavior in your app. By default, the agent writes a small set of behavioral tests. After the agent makes any changes to your app, Retool runs the tests related to those changes. If any of them fail, Retool sends the failures to the agent, which continues working to fix them.</p>]]></content:encoded>
            <category>Apps</category>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[Retool on Google Cloud Marketplace]]></title>
            <link>https://docs.retool.com/changelog/google-cloud-marketplace</link>
            <guid>https://docs.retool.com/changelog/google-cloud-marketplace</guid>
            <pubDate>Tue, 03 Nov 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Deploy a self-hosted Retool instance to Google Kubernetes Engine and pay for your Enterprise plan through Google Cloud billing.]]></description>
            <content:encoded><![CDATA[<p>Retool is now available on <a href="https://console.cloud.google.com/marketplace/product/retool-public/retool" target="_blank" rel="noopener noreferrer" class="">Google Cloud Marketplace</a>. Work with your Retool account team to set up a private offer. After you accept it in your Google Cloud console, Retool is billed through your Google Cloud account. To learn more, read the <a href="https://retool.com/blog/retool-google-cloud-marketplace-announcement" target="_blank" rel="noopener noreferrer" class="">announcement blog post</a>.</p>
<p>The <a href="https://console.cloud.google.com/marketplace/product/retool-public/retool-blueprints" target="_blank" rel="noopener noreferrer" class="">Retool Blueprints listing</a> enables you to deploy self-hosted Retool to Google Kubernetes Engine (GKE) as a prepackaged Kubernetes app. Deploying Blueprints requires a Retool license key. Blueprints has no usage fee, but Google Cloud charges for the GKE resources you run.</p>]]></content:encoded>
            <category>New</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261030</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261030</guid>
            <pubDate>Fri, 30 Oct 2026 21:34:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates: October 30, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34.15">Retool 4.34.15</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0.27">Retool 4.0.27</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[GPT 6.1 Terra available in Retool]]></title>
            <link>https://docs.retool.com/changelog/gpt-6.1-terra</link>
            <guid>https://docs.retool.com/changelog/gpt-6.1-terra</guid>
            <pubDate>Thu, 29 Oct 2026 14:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports GPT 6.1 Terra.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#openai">GPT 6.1 Terra</a> is now available in Retool through OpenAI. It can be used with <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a> and <a class="" href="https://docs.retool.com/build/apps/reference/models">building apps</a>.</p>]]></content:encoded>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 stable update]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261028-2</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261028-2</guid>
            <pubDate>Wed, 28 Oct 2026 23:00:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 stable update: October 28, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patch is now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34.14">Retool 4.34.14</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Private npm registries for apps]]></title>
            <link>https://docs.retool.com/changelog/private-registries</link>
            <guid>https://docs.retool.com/changelog/private-registries</guid>
            <pubDate>Wed, 28 Oct 2026 13:30:00 GMT</pubDate>
            <description><![CDATA[Enterprise organizations can now install npm packages from private registries in Retool apps.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.88 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span><span class="docs-info-bar__pill"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="docs-info-bar__icon" aria-hidden="true"><path d="M208,144a15.78,15.78,0,0,1-10.42,14.94L146,178l-19,51.62a15.92,15.92,0,0,1-29.88,0L78,178l-51.62-19a15.92,15.92,0,0,1,0-29.88L78,110l19-51.62a15.92,15.92,0,0,1,29.88,0L146,110l51.62,19A15.78,15.78,0,0,1,208,144ZM152,48h16V64a8,8,0,0,0,16,0V48h16a8,8,0,0,0,0-16H184V16a8,8,0,0,0-16,0V32H152a8,8,0,0,0,0,16Zm88,32h-8V72a8,8,0,0,0-16,0v8h-8a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0V96h8a8,8,0,0,0,0-16Z"></path></svg><a class="glossary public-beta" target="_blank" rel="noopener noreferrer">Public beta</a></span></span></div><p>Retool now supports the use of <a href="https://docs.npmjs.com/creating-and-publishing-private-packages" target="_blank" rel="noopener noreferrer" class="">private npm registries</a> for apps. Enterprise organization admins can add registries in <strong>Settings</strong> &gt; <strong>App Security</strong>, and builders can then ask the agent to install packages from them. Use private registries to:</p>
<ul>
<li class=""><strong>Download a specific package from a private registry.</strong> For example, pull a design system that you host on your own servers into your apps.</li>
<li class=""><strong>Download all packages from a specific registry.</strong> Add a registry as the default, or route entire npm scopes (such as <code>@acme</code>) to it. Registries can require authentication with a bearer token or basic auth, or allow anonymous access.</li>
<li class=""><strong>Control which packages are allowed.</strong> Build your own registry with rules about what it permits users to download. For example, enforce a minimum package age that you configure yourself.</li>
</ul>
<p>Private registries must be npm-compatible and use HTTPS.</p>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.87830687830689% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/B0fpYGkwurl0tksL77rg?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Add a Private NPM Registry" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>]]></content:encoded>
            <category>Apps</category>
            <category>Security</category>
            <category>Beta</category>
        </item>
        <item>
            <title><![CDATA[Spend controls for AI usage]]></title>
            <link>https://docs.retool.com/changelog/ai-spend-controls</link>
            <guid>https://docs.retool.com/changelog/ai-spend-controls</guid>
            <pubDate>Wed, 28 Oct 2026 09:30:00 GMT</pubDate>
            <description><![CDATA[Set limits on AI credit and token usage for users, groups, and models.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span></span></div><p>Admins for cloud-hosted instances on Enterprise plans can now set spend limits on AI usage using the new <strong>Spend Controls</strong> tab in the <strong>AI monitoring</strong> settings.</p>
<p>Limits work for both Retool-managed keys (credits) and bring your own key (tokens). Set an organization-wide default user limit, then override it for specific users or groups. You can also set a limit on a model to cap its total usage across your organization. For each, you can set a <strong>Notify at</strong> limit, which sends notifications and lets usage continue, and a <strong>Block at</strong> limit, which blocks further usage. A user's effective limit is their own limit, then the highest limit among their groups, then the default. Model limits apply separately from user and group limits.</p>
<div class="margin-bottom--md"><figure class="screenshot"><img class="doc-image" src="https://docs.retool.com/assets/images/ai-spend-controls-users-02483b759772e2469b0d976af7aa111e.png" alt="The Spend Controls tab in AI monitoring settings, showing the Users table with Notify at and Block at limits."><figcaption class="caption"><span>The Spend Controls tab in AI monitoring settings, showing the Users table with Notify at and Block at limits.</span></figcaption></figure></div>
<p>When a builder reaches a block limit, AI app building pauses and they can send a limit increase request to admins. Admins can review requests in the <strong>Spend Controls</strong> tab or from the <strong>Action center</strong> on the <strong>Overview</strong> page, then approve a higher limit or deny the request. Retool also sends email notifications when limits are reached.</p>]]></content:encoded>
            <category>AI</category>
            <category>Administration</category>
        </item>
        <item>
            <title><![CDATA[Buy additional AI credits]]></title>
            <link>https://docs.retool.com/changelog/ai-usage-credits</link>
            <guid>https://docs.retool.com/changelog/ai-usage-credits</guid>
            <pubDate>Wed, 28 Oct 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Buying additional AI credit packs by card is now available on all paid plans.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary team-plan" target="_blank" rel="noopener noreferrer">Team</a> <span class="docs-inline-sep" aria-hidden="true">•</span> <a class="glossary business-plan" target="_blank" rel="noopener noreferrer">Business</a> <span class="docs-inline-sep" aria-hidden="true">•</span> <a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span></span></div><p>Buying additional AI credit packs by card is now available on all paid plans. Admins can buy a pack directly in Retool if their monthly allocation is running low.</p>
<p>To buy credits, go to <strong>Settings &gt; Plans &amp; Billing</strong>, select the <strong>AI Credits</strong> tab, then click <strong>Buy credits</strong>. Credits are available as soon as payment succeeds.</p>
<div class="margin-bottom--md"><figure class="screenshot"><img class="doc-image" src="https://docs.retool.com/assets/images/ai-buy-credits-modal-f9f5167aefb8ee55309831220ed0bcde.png" alt="The Buy more credits dialog showing current credits, the credit pack selector, and the amount due today."><figcaption class="caption"><span>The Buy more credits dialog showing current credits, the credit pack selector, and the amount due today.</span></figcaption></figure></div>
<p>Purchased credits expire at the end of the next calendar month. For example, if you buy credits on October 20, they expire on November 30. On Enterprise plans with named seats, credits included with builder seats are used first. Then Retool uses your organization's monthly credits, then purchased credits.</p>
<p>The <strong>AI Credits</strong> tab also shows your additional AI credit history, including when each pack was added, how many credits remain, and when they expire.</p>]]></content:encoded>
            <category>AI</category>
            <category>Administration</category>
            <category>Pricing</category>
        </item>
        <item>
            <title><![CDATA[General availability of app builder]]></title>
            <link>https://docs.retool.com/changelog/app-builder-ga</link>
            <guid>https://docs.retool.com/changelog/app-builder-ga</guid>
            <pubDate>Wed, 28 Oct 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Build production-ready React apps using natural language, MCP-compatible coding agents, or imported React code.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.88 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary all-plans" target="_blank" rel="noopener noreferrer">All plans</a></span><span class="docs-info-bar__pill"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="docs-info-bar__icon" aria-hidden="true"><path d="M208,144a15.78,15.78,0,0,1-10.42,14.94L146,178l-19,51.62a15.92,15.92,0,0,1-29.88,0L78,178l-51.62-19a15.92,15.92,0,0,1,0-29.88L78,110l19-51.62a15.92,15.92,0,0,1,29.88,0L146,110l51.62,19A15.78,15.78,0,0,1,208,144ZM152,48h16V64a8,8,0,0,0,16,0V48h16a8,8,0,0,0,0-16H184V16a8,8,0,0,0-16,0V32H152a8,8,0,0,0,0,16Zm88,32h-8V72a8,8,0,0,0-16,0v8h-8a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0V96h8a8,8,0,0,0,0-16Z"></path></svg><a class="glossary general-availability" target="_blank" rel="noopener noreferrer">GA</a></span></span></div><p>Retool's AI-powered app builder is now generally available. Since <a class="" href="https://docs.retool.com/changelog/app-builder">first releasing the app builder in May 2026</a>, Retool has continually expanded its capabilities to include:</p>
<ul>
<li class="">The ability to build from anywhere using the <a class="" href="https://docs.retool.com/build/apps/guides/create/mcp">MCP server</a> or <a class="" href="https://docs.retool.com/build/apps/guides/create/cli">CLI</a>. <a class="" href="https://docs.retool.com/build/apps/concepts/build-from-anywhere">Learn more about the difference.</a></li>
<li class="">Flexible prompts that enable <a class="" href="https://docs.retool.com/build/apps/guides/create/prompt#plan-changes">planning changes</a>, <a class="" href="https://docs.retool.com/build/apps/guides/create/prompt#create-resources">creating new resources</a>, or <a class="" href="https://docs.retool.com/build/apps/guides/create/prompt#queue-messages">queueing messages</a>.</li>
<li class="">Comprehensive support for all <a class="" href="https://docs.retool.com/data-sources/guides/integrations">resources</a> available in Retool.</li>
<li class="">Full source control support, including <a class="" href="https://docs.retool.com/build/apps/guides/source-control/protect-app">protecting apps</a>, <a class="" href="https://docs.retool.com/build/apps/guides/source-control/local">transitioning between development environments</a>, and <a class="" href="https://docs.retool.com/source-control/guides/multi-instance-releases/apps">multi-instance releases</a>.</li>
<li class="">Expanded management tools, including <a class="" href="https://docs.retool.com/build/apps/guides/manage/custom-csp">custom Content Security Policies</a>, <a class="" href="https://docs.retool.com/build/apps/guides/manage/building-context">org-wide agent context</a>, and <a class="" href="https://docs.retool.com/build/apps/guides/manage/embed">the ability to embed apps</a>.</li>
</ul>
<p>Whatever or however you build, your apps inherit the <a class="" href="https://docs.retool.com/permissions">security standards</a> your organization has already approved and implemented.</p>
<p>To get started, admins can use the <a class="" href="https://docs.retool.com/build/apps/guides/configuration">configuration guide</a> to set up their organization to use the app builder.</p>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p><a class="glossary classic-app" target="_blank" rel="noopener noreferrer">Classic apps</a> created with Retool's drag-and-drop IDE are still supported. While this experience continues to be maintained, Retool is focusing new feature development on the AI app builder.</p></div></div>]]></content:encoded>
            <category>AI</category>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261028</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261028</guid>
            <pubDate>Wed, 28 Oct 2026 06:25:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates: October 28, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34.13">Retool 4.34.13</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0.26">Retool 4.0.26</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.83 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-483-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-483-edge</guid>
            <pubDate>Mon, 26 Oct 2026 20:55:00 GMT</pubDate>
            <description><![CDATA[Retool 4.83 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.83">Retool 4.83</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Compromised eMudhra/emSign intermediate CAs trusted by bundled certificate stores]]></title>
            <link>https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise</link>
            <guid>https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise</guid>
            <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Compromised eMudhra emSign intermediate CAs (CVE-2026-91403 and CVE-2026-111943) were trusted by certificate stores bundled in Retool. Self-hosted customers should upgrade.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_loeA" id="summary">Summary<a href="https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary">​</a></h2>
<ul>
<li class="">Several of eMudhra's emSign intermediate certificate authorities were compromised and revoked upstream. Components bundled in Retool trusted certificates signed by those intermediates.</li>
<li class="">This created a man-in-the-middle risk for self-hosted instances on affected versions: an attacker would need both a certificate from the compromised intermediates and a network position between your instance and an external endpoint.</li>
<li class="">Cloud was patched centrally. Self-hosted customers should upgrade.</li>
<li class="">IOCs: None. No exploitation observed, and no indication any maliciously signed package was pulled in.</li>
<li class="">Maintained stable releases contain a full fix (v4.0 and newer), version 3.334 received a partial fix for the Node, Python, and PIP systems, Java was not patched due to no upstream patch available.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-happened">What happened<a href="https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise#what-happened" class="hash-link" aria-label="Direct link to What happened" title="Direct link to What happened">​</a></h2>
<p>eMudhra's emSign intermediate CAs were compromised and revoked, and upstream projects (OS ca-certificates, Node.js, Java, and Python certifi/pip) distrusted them. Retool components ship their own bundled CA lists, so older Retool versions continued to trust the compromised chain even on a patched host OS.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="affected-components">Affected components<a href="https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise#affected-components" class="hash-link" aria-label="Direct link to Affected components" title="Direct link to Affected components">​</a></h2>
<p>The upstream issue is the compromised emSign intermediate CAs (emSign ECC Root CA - G3 and the Comodo AAA Services cross-sign root). Retool components that validated certificates against a bundled CA list were affected:</p>
<ul>
<li class="">Node.js.</li>
<li class="">The database connector's Java runtime.</li>
<li class="">The OS CA bundle.</li>
<li class="">The code executor's Python (requests/pip), custom Python environments, and drivers such as @sap/hana-client and oracledb (thick mode).</li>
<li class="">The telemetry sidecar and the fluent-bit image.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="affected-versions">Affected versions<a href="https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise#affected-versions" class="hash-link" aria-label="Direct link to Affected versions" title="Direct link to Affected versions">​</a></h2>
<table><thead><tr><th>Deployment</th><th>Affected</th></tr></thead><tbody><tr><td>Cloud</td><td>Affected before 2026-10-21; patched centrally</td></tr><tr><td>Self-hosted stable 4.0 line</td><td>4.0.x up to and including 4.0.23</td></tr><tr><td>Self-hosted stable 4.34 line</td><td>4.34.x up to and including 4.34.10</td></tr><tr><td>Self-hosted edge</td><td>4.78.0 and earlier</td></tr><tr><td>Self-hosted legacy</td><td>3.334.x</td></tr></tbody></table>
<p>Note: 4.0.23 and 4.34.10 do not contain the fix. Do not treat them as patched.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="fixed-versions">Fixed versions<a href="https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise#fixed-versions" class="hash-link" aria-label="Direct link to Fixed versions" title="Direct link to Fixed versions">​</a></h2>
<table><thead><tr><th>Deployment</th><th>Fixed version</th><th>Published</th></tr></thead><tbody><tr><td>Cloud</td><td>Patched in production</td><td>2026-10-21</td></tr><tr><td>Self-hosted 4.0 line</td><td>4.0.25</td><td>2026-10-23</td></tr><tr><td>Self-hosted 4.34 line</td><td>4.34.12</td><td>2026-10-23</td></tr><tr><td>Self-hosted edge</td><td>4.81.0</td><td>2026-10-23</td></tr><tr><td>Self-hosted legacy 3.334</td><td>Partial patch (Node fixed; Java and host-level items not)</td><td>2026-10-24</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="am-i-affected">Am I affected?<a href="https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise#am-i-affected" class="hash-link" aria-label="Direct link to Am I affected?" title="Direct link to Am I affected?">​</a></h2>
<p>If you run a self-hosted instance on an affected version, it continues to trust the compromised chain. Exploitation would require an attacker to hold a certificate from the compromised intermediates and to sit in the network path between your instance and an external endpoint. There is no indication of actual exploitation. Customer-provided CA certificates attached to a resource apply only to that resource's connections and are never added to a shared or system trust store.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-you-should-do">What you should do<a href="https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise#what-you-should-do" class="hash-link" aria-label="Direct link to What you should do" title="Direct link to What you should do">​</a></h2>
<ul>
<li class="">Cloud: No action. Patched centrally on 2026-10-21.</li>
<li class="">Self-hosted 4.0 line: Upgrade to 4.0.25.</li>
<li class="">Self-hosted 4.34 line: Upgrade to 4.34.12.</li>
<li class="">Self-hosted edge: Upgrade to 4.81.0.</li>
<li class="">Self-hosted legacy 3.334: Upgrade to the 3.334 patch or move to v4. The 3.334 patch is partial — it fixes Node but not Java or host-level items.</li>
</ul>
<p>Do not rely on 4.0.23 or 4.34.10; they do not contain the fix.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="cve-details">CVE details<a href="https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise#cve-details" class="hash-link" aria-label="Direct link to CVE details" title="Direct link to CVE details">​</a></h2>
<table><thead><tr><th>Field</th><th>Value</th></tr></thead><tbody><tr><td>CVE</td><td>CVE-2026-91403, CVE-2026-111943</td></tr><tr><td>Upstream component</td><td>eMudhra emSign intermediate CAs (via ca-certificates, Node.js, Java, Python certifi/pip)</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="revision-history">Revision history<a href="https://docs.retool.com/changelog/disclosures/emudhra-ca-compromise#revision-history" class="hash-link" aria-label="Direct link to Revision history" title="Direct link to Revision history">​</a></h2>
<ul>
<li class="">2026-10-26 — Initial publication.</li>
</ul>]]></content:encoded>
            <category>Disclosures</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 3.334 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261024</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261024</guid>
            <pubDate>Sat, 24 Oct 2026 00:39:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 3.334 stable updates: October 24, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#3.334.32">Retool 3.334.32</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.81 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-481-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-481-edge</guid>
            <pubDate>Fri, 23 Oct 2026 22:56:00 GMT</pubDate>
            <description><![CDATA[Retool 4.81 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.81">Retool 4.81</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Node.js October 2026 security vulnerabilities (CVE-2026-111497)]]></title>
            <link>https://docs.retool.com/changelog/disclosures/cve-2026-111497</link>
            <guid>https://docs.retool.com/changelog/disclosures/cve-2026-111497</guid>
            <pubDate>Fri, 23 Oct 2026 18:05:50 GMT</pubDate>
            <description><![CDATA[Disclosure for the Node.js October 2026 security vulnerabilities and their impact on Retool, including CVE-2026-111497, a remote code execution vulnerability that affects Retool services that send HTTP requests to user-configured URLs.]]></description>
            <content:encoded><![CDATA[<p>A vulnerability in <a href="https://nodejs.org/" target="_blank" rel="noopener noreferrer" class="">Node.js</a>, the runtime that Retool runs on, can allow remote code execution. An out-of-bounds write in the Node.js Brotli decoder can be triggered by a crafted, Brotli-compressed HTTP response. Many of the HTTP clients that Retool uses decompress Brotli responses automatically. An attacker who can make a Retool instance send an HTTP request to a server they control, such as through a <a class="" href="https://docs.retool.com/data-sources/guides/connect/rest">REST API</a> resource, could use this to run code on that instance.</p>
<p>Retool Cloud was patched on October 21, 2026, at 4:44 PM PDT, 13 hours and 6 minutes after public disclosure. No action is required for Cloud customers. Self-hosted customers should upgrade to a <a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#what-versions-contain-the-fix" class="">fixed version</a>.</p>
<p>The same Node.js release fixes other vulnerabilities that have a lower impact on Retool. Upgrading to a fixed version addresses all of them. For details on each one, refer to <a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#vulnerabilities-in-this-release" class="">Vulnerabilities in this release</a>.</p>
<p>We have no indications of malicious activity using this vulnerability against Retool. The vulnerability was disclosed publicly by the Node.js project on October 21, 2026, at 3:38 AM PDT, as part of its <a href="https://nodejs.org/en/blog/vulnerability/october-2026-security-releases" target="_blank" rel="noopener noreferrer" class="">October 2026 security releases</a>.</p>
<p>We will communicate further updates here, should such become necessary.</p>
<table><thead><tr><th>Disclosure</th><th>Details</th></tr></thead><tbody><tr><td>Vulnerability Type</td><td>CWE-787: Out-of-bounds Write</td></tr><tr><td>Package</td><td>Node.js, and the system Brotli libraries shipped in Retool images</td></tr><tr><td>Fixed Version</td><td>Node.js 22.23.4. Retool: Edge 4.81.0+, Stable 4.34.12+, 4.0.25+, 3.334.32+</td></tr><tr><td>Affected Component</td><td><code>MAIN_BACKEND</code> and <code>DB_CONNECTOR</code> services, through HTTP responses from user-configured URLs</td></tr><tr><td>Attack Type</td><td>Remote</td></tr><tr><td>Impact</td><td>Remote code execution</td></tr><tr><td>CVSS 3.x Base Score</td><td>8.5</td></tr><tr><td>CVSS 3.x Vector</td><td>CVSS:3.1/AV<!-- -->:N<!-- -->/AC<!-- -->:H<!-- -->/PR<!-- -->:L<!-- -->/UI<!-- -->:N<!-- -->/S<!-- -->:C<!-- -->/C<!-- -->:H<!-- -->/I<!-- -->:H<!-- -->/A<!-- -->:H</td></tr><tr><td>CVSS 4.x Base Score</td><td>9.0</td></tr><tr><td>CVSS 4.x Vector</td><td>CVSS:4.0/AV<!-- -->:N<!-- -->/AC<!-- -->:H<!-- -->/AT<!-- -->:N<!-- -->/PR<!-- -->:L<!-- -->/UI<!-- -->:N<!-- -->/VC<!-- -->:H<!-- -->/VI<!-- -->:H<!-- -->/VA<!-- -->:H<!-- -->/SC<!-- -->:H<!-- -->/SI<!-- -->:H<!-- -->/SA<!-- -->:H</td></tr><tr><td>Reference</td><td><a href="https://nodejs.org/en/blog/vulnerability/october-2026-security-releases" target="_blank" rel="noopener noreferrer" class="">https://nodejs.org/en/blog/vulnerability/october-2026-security-releases</a></td></tr></tbody></table>
<p>The CVSS scores above are specific to Retool. They reflect how an attacker reaches this vulnerability through Retool, which in most cases requires a user with permission to create or edit resources or queries that send requests to URLs they choose. NVD hasn't scored CVE-2026-111497 at the time of writing. Google, the CVE Numbering Authority for this vulnerability, scored the underlying Node.js issue 9.2 (<code>CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N</code>).</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="am-i-affected">Am I affected?<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#am-i-affected" class="hash-link" aria-label="Direct link to Am I affected?" title="Direct link to Am I affected?">​</a></h2>
<p>Retool Cloud has been patched, and Cloud customers don't need to take any action.</p>
<p>Self-hosted instances running a version earlier than the <a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#what-versions-contain-the-fix" class="">fixed versions</a> are affected. To exploit this vulnerability, an attacker needs to make your instance send an HTTP request to a server they control and receive its response. Retool sends HTTP requests to user-configured URLs in several places, including:</p>
<ul>
<li class="">REST API, GraphQL, OpenAPI, and MCP resources.</li>
<li class="">OAuth 2.0 authentication, which sends token requests to the access token URL configured on a resource.</li>
<li class="">Custom AI providers configured with a custom base URL.</li>
</ul>
<p>This is possible for:</p>
<ul>
<li class="">Users with permission to create or edit these resources or AI providers, or to edit apps or workflows that contain their queries.</li>
<li class="">Anyone who controls, or has compromised, a server that one of these resources already sends requests to.</li>
<li class="">App users who can supply a request URL, if an app builds request URLs from user input.</li>
<li class="">Anyone who can intercept and modify unencrypted HTTP traffic between your instance and a server.</li>
</ul>
<p>Integrations that only connect to a fixed vendor endpoint, such as Stripe or Google Sheets, are lower risk. Exploiting them would require compromising the vendor or intercepting encrypted HTTPS traffic.</p>
<p>Retool images also ship a separate system Brotli library that curl and git use. Refer to <a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#system-brotli-libraries" class="">System Brotli libraries</a> for that narrower path.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-are-the-mitigations-or-remediations">What are the mitigations or remediations?<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#what-are-the-mitigations-or-remediations" class="hash-link" aria-label="Direct link to What are the mitigations or remediations?" title="Direct link to What are the mitigations or remediations?">​</a></h2>
<p>The only complete fix is to upgrade your instance to a <a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#what-versions-contain-the-fix" class="">fixed version</a>.</p>
<p>Until you can upgrade, mitigate your exposure by doing the following:</p>
<ul>
<li class="">Review which users can create or edit resources, AI providers, apps, and workflows, and limit these permissions to users who need them.</li>
<li class="">Review your resources and queries for request URLs and OAuth 2.0 access token URLs on hosts you don't recognize.</li>
<li class="">Use HTTPS for resources that send HTTP requests so that responses can't be modified in transit.</li>
<li class="">Review which Source Control remotes your instance connects to, and prefer HTTPS remotes you control.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-is-the-impact">What is the impact?<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#what-is-the-impact" class="hash-link" aria-label="Direct link to What is the impact?" title="Direct link to What is the impact?">​</a></h2>
<p>An attacker who exploits this vulnerability can run code in the Retool service that received the malicious response. This is the <code>DB_CONNECTOR</code> service for resource queries, and the <code>MAIN_BACKEND</code> service for OAuth 2.0 token requests and custom AI providers. From there, they could access the resource credentials and query data that pass through the service, and reach any internal systems that the service has network access to.</p>
<p><code>MAIN_BACKEND</code> runs in the <code>api</code> container. By default, <code>DB_CONNECTOR</code> also runs inside the <code>api</code> and <code>workflows-backend</code> containers, as described in <a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/architecture">System architecture</a>. Code running in these containers has access to everything they can access, including your encryption key and the Retool database.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="system-brotli-libraries">System Brotli libraries<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#system-brotli-libraries" class="hash-link" aria-label="Direct link to System Brotli libraries" title="Direct link to System Brotli libraries">​</a></h2>
<p>Retool images also ship a system Brotli library that is separate from the decoder bundled in Node.js:</p>
<ul>
<li class="">On Debian-based images, this is the Debian <code>libbrotli1</code> package, pulled in because <code>git</code> and <code>curl</code> depend on libcurl.</li>
<li class="">On hardened Chainguard/Wolfi images, this is <code>libbrotlidec</code> and related packages.</li>
</ul>
<p>Git uses that library when it fetches over HTTP. An attacker who can make your instance's git client fetch from a server they control, and who returns a crafted Brotli-compressed response, could trigger the vulnerability in the system library. <a class="" href="https://docs.retool.com/source-control">Source Control</a> clone and fetch operations use this path when they talk to an HTTP or HTTPS remote.</p>
<p>This path is narrower than the Node.js path described above. It isn't reachable through a REST API resource query. It requires control of, or a compromise of, a Git remote that Source Control connects to, or the ability to intercept that Git traffic. Upgrading to a <a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#what-versions-contain-the-fix" class="">fixed version</a> updates both the Node.js runtime and the system Brotli libraries.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-are-indicators-of-compromise-iocs">What are indicators of compromise (IOCs)?<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#what-are-indicators-of-compromise-iocs" class="hash-link" aria-label="Direct link to What are indicators of compromise (IOCs)?" title="Direct link to What are indicators of compromise (IOCs)?">​</a></h2>
<p>A failed attempt to exploit this vulnerability is likely to crash the process. A successful attempt can lead to activity that Retool services don't normally perform. Check the <code>api</code> and <code>workflows-backend</code> containers, and any separate <code>DB_CONNECTOR</code> containers, for:</p>
<ul>
<li class="">Unexpected crashes or restarts, especially processes that end with a <code>SIGSEGV</code> signal.</li>
<li class="">Unexpected processes started inside those containers.</li>
<li class="">Outbound connections to internal systems those containers don't normally contact, such as your cloud provider's metadata service.</li>
</ul>
<p>Also check for resources or queries that point to unfamiliar hosts, including OAuth 2.0 access token URLs, and for recent changes to them in your audit logs. For the system Brotli path, also check Source Control remotes and recent git clone or fetch activity.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="vulnerabilities-in-this-release">Vulnerabilities in this release<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#vulnerabilities-in-this-release" class="hash-link" aria-label="Direct link to Vulnerabilities in this release" title="Direct link to Vulnerabilities in this release">​</a></h2>
<p>The Node.js October 2026 security release fixes the following vulnerabilities in Node.js 22, the version Retool uses. The severity is the rating from the Node.js project. The impact describes Retool's assessment of how each vulnerability affects Retool.</p>
<table><thead><tr><th>CVE</th><th>Node.js severity</th><th>Impact on Retool</th></tr></thead><tbody><tr><td><a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#am-i-affected" class="">CVE-2026-111497</a></td><td>High</td><td>Remote code execution</td></tr><tr><td><a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#cve-2026-106069-and-cve-2026-106072-tls-certificate-hostname-validation" class="">CVE-2026-106069</a></td><td>High</td><td>Affected, requires network interception</td></tr><tr><td><a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#cve-2026-106069-and-cve-2026-106072-tls-certificate-hostname-validation" class="">CVE-2026-106072</a></td><td>Medium</td><td>Affected, requires network interception</td></tr><tr><td><a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#cve-2026-105482-dns-resolution-of-names-with-nul-characters" class="">CVE-2026-105482</a></td><td>High</td><td>Not exploitable in Retool, based on our assessment</td></tr><tr><td><a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#cve-2026-105481-http-keep-alive-responses" class="">CVE-2026-105481</a></td><td>Medium</td><td>Low</td></tr><tr><td><a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#cve-2026-106073-permission-model-bypass" class="">CVE-2026-106073</a></td><td>Low</td><td>Low</td></tr><tr><td><a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#vulnerabilities-that-dont-affect-retool" class="">CVE-2026-106074</a></td><td>Medium</td><td>Not affected</td></tr></tbody></table>
<p>The sections above describe CVE-2026-111497 in detail. The release also updates the versions of c-ares, OpenSSL, SQLite, undici, and the root certificates bundled with Node.js.</p>
<h3 class="anchor anchorWithStickyNavbar_loeA" id="cve-2026-106069-and-cve-2026-106072-tls-certificate-hostname-validation">CVE-2026-106069 and CVE-2026-106072: TLS certificate hostname validation<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#cve-2026-106069-and-cve-2026-106072-tls-certificate-hostname-validation" class="hash-link" aria-label="Direct link to CVE-2026-106069 and CVE-2026-106072: TLS certificate hostname validation" title="Direct link to CVE-2026-106069 and CVE-2026-106072: TLS certificate hostname validation">​</a></h3>
<p>In some cases, Node.js could accept a TLS certificate that doesn't match the host it connects to. CVE-2026-106069 applies when a hostname loosely resolves to an IP address. CVE-2026-106072 applies when a host is an IPv4 address written in a non-canonical form, such as <code>127.1</code> or <code>0x7f.0.0.1</code>, which lets a certificate issued for a DNS name authenticate an IP address.</p>
<p>Retool relies on Node.js to validate certificates when it connects to resources over HTTPS or TLS. An attacker who can intercept traffic between Retool and a resource could use these vulnerabilities to impersonate that resource. This could expose the credentials and query data that Retool sends to it. Resources configured with an IP address as their host are the most exposed. Until you upgrade, prefer DNS hostnames over IP addresses in resource configurations.</p>
<h3 class="anchor anchorWithStickyNavbar_loeA" id="cve-2026-105482-dns-resolution-of-names-with-nul-characters">CVE-2026-105482: DNS resolution of names with NUL characters<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#cve-2026-105482-dns-resolution-of-names-with-nul-characters" class="hash-link" aria-label="Direct link to CVE-2026-105482: DNS resolution of names with NUL characters" title="Direct link to CVE-2026-105482: DNS resolution of names with NUL characters">​</a></h3>
<p>The Node.js <code>dns.resolve</code> functions truncate a hostname at the first NUL character, so they can resolve a different name than the one requested. Retool uses these functions in checks that block requests to private IP addresses. In those checks, Retool reads the hostname from a parsed URL, which can't contain a NUL character. Based on our assessment, this vulnerability isn't exploitable in Retool.</p>
<h3 class="anchor anchorWithStickyNavbar_loeA" id="cve-2026-105481-http-keep-alive-responses">CVE-2026-105481: HTTP keep-alive responses<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#cve-2026-105481-http-keep-alive-responses" class="hash-link" aria-label="Direct link to CVE-2026-105481: HTTP keep-alive responses" title="Direct link to CVE-2026-105481: HTTP keep-alive responses">​</a></h3>
<p>When Node.js reuses a connection for more than one HTTP request, it could treat data that a server sent before a request as the response to that request. Retool reuses connections for outbound HTTP requests, including resource queries. Retool only reuses a connection for requests to the same server, so a malicious server can only affect responses that already come from that server. We assess the impact on Retool as low.</p>
<h3 class="anchor anchorWithStickyNavbar_loeA" id="cve-2026-106073-permission-model-bypass">CVE-2026-106073: Permission model bypass<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#cve-2026-106073-permission-model-bypass" class="hash-link" aria-label="Direct link to CVE-2026-106073: Permission model bypass" title="Direct link to CVE-2026-106073: Permission model bypass">​</a></h3>
<p>The Node.js <a href="https://nodejs.org/api/permissions.html" target="_blank" rel="noopener noreferrer" class="">permission model</a> restricts which files a process can access, and <code>fs.realpathSync</code> could bypass these restrictions. When AI App Builder runs tests for an app inside its sandbox, Retool uses the permission model as an extra restriction on which files the tests can read. A bypass could let test code read other files inside the sandbox. The sandbox's own isolation still applies, so we assess the impact on Retool as low.</p>
<h3 class="anchor anchorWithStickyNavbar_loeA" id="vulnerabilities-that-dont-affect-retool">Vulnerabilities that don't affect Retool<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#vulnerabilities-that-dont-affect-retool" class="hash-link" aria-label="Direct link to Vulnerabilities that don't affect Retool" title="Direct link to Vulnerabilities that don't affect Retool">​</a></h3>
<p>Some vulnerabilities in the release don't affect Retool:</p>
<ul>
<li class="">CVE-2026-106074 causes values from <code>crypto.randomUUID()</code> and <code>crypto.randomInt()</code> to repeat across processes started from a user-land startup snapshot or a single executable application. Retool doesn't use either feature.</li>
<li class="">CVE-2026-105483, CVE-2026-106070, and CVE-2026-106071 only affect Node.js 24 or Node.js 26. Retool uses Node.js 22.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-versions-are-affected">What versions are affected?<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#what-versions-are-affected" class="hash-link" aria-label="Direct link to What versions are affected?" title="Direct link to What versions are affected?">​</a></h2>
<p>Self-hosted Retool only.</p>
<table><thead><tr><th>Release branch</th><th>Release versions</th></tr></thead><tbody><tr><td>Edge</td><td>Before 4.81.0</td></tr><tr><td>4.34-stable</td><td>4.34.0 to 4.34.10</td></tr><tr><td>4.0-stable</td><td>4.0.0 to 4.0.23</td></tr><tr><td>3.334-stable</td><td>3.334.0 to 3.334.31</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-versions-contain-the-fix">What versions contain the fix?<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#what-versions-contain-the-fix" class="hash-link" aria-label="Direct link to What versions contain the fix?" title="Direct link to What versions contain the fix?">​</a></h2>
<p>Self-hosted Retool only.</p>
<table><thead><tr><th>Branch</th><th>Versions</th><th>Released</th></tr></thead><tbody><tr><td>Edge</td><td><a href="https://hub.docker.com/r/tryretool/backend/tags?name=4.81.0-edge" target="_blank" rel="noopener noreferrer" class="">4.81.0+</a></td><td>October 23, 2026, at 3:56 PM PDT</td></tr><tr><td>4.34-stable</td><td><a href="https://hub.docker.com/r/tryretool/backend/tags?name=4.34.12-stable" target="_blank" rel="noopener noreferrer" class="">4.34.12+</a></td><td>October 23, 2026, at 7:48 AM PDT</td></tr><tr><td>4.0-stable</td><td><a href="https://hub.docker.com/r/tryretool/backend/tags?name=4.0.25-stable" target="_blank" rel="noopener noreferrer" class="">4.0.25+</a></td><td>October 23, 2026, at 7:51 AM PDT</td></tr><tr><td>3.334-stable</td><td><a href="https://hub.docker.com/r/tryretool/backend/tags?name=3.334.32-stable" target="_blank" rel="noopener noreferrer" class="">3.334.32+</a></td><td>October 23, 2026, at 5:39 PM PDT</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="revision-history">Revision history<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#revision-history" class="hash-link" aria-label="Direct link to Revision history" title="Direct link to Revision history">​</a></h2>
<ul>
<li class="">October 23, 2026: Initial publication with fixed Stable versions 4.34.12 and 4.0.25.</li>
<li class="">October 29, 2026: Added Edge 4.81.0 and Stable 3.334.32. Documented the separate system Brotli library path (Debian <code>libbrotli1</code> and Wolfi <code>libbrotlidec</code>).</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="questions">Questions<a href="https://docs.retool.com/changelog/disclosures/cve-2026-111497#questions" class="hash-link" aria-label="Direct link to Questions" title="Direct link to Questions">​</a></h2>
<p>For the full Node.js advisory, refer to the <a href="https://nodejs.org/en/blog/vulnerability/october-2026-security-releases" target="_blank" rel="noopener noreferrer" class="">Node.js October 2026 security releases</a>. If you have any questions or concerns, contact <a href="mailto:security@retool.com?subject=CVE-2026-111497" target="_blank" rel="noopener noreferrer" class="">security@retool.com</a>.</p>]]></content:encoded>
            <category>Disclosures</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261023</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261023</guid>
            <pubDate>Fri, 23 Oct 2026 14:51:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates: October 23, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34.12">Retool 4.34.12</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0.25">Retool 4.0.25</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261022</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261022</guid>
            <pubDate>Thu, 22 Oct 2026 00:18:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates: October 22, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34">Retool 4.34.10</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.23</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.78 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-478-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-478-edge</guid>
            <pubDate>Thu, 22 Oct 2026 00:08:00 GMT</pubDate>
            <description><![CDATA[Retool 4.78 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.78">Retool 4.78</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[CVE-2026-109618 and CVE-2026-109619 (PHP2Shell)]]></title>
            <link>https://docs.retool.com/changelog/disclosures/php2shell</link>
            <guid>https://docs.retool.com/changelog/disclosures/php2shell</guid>
            <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Retool is not affected by CVE-2026-109618 and CVE-2026-109619 (PHP2Shell).]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_loeA" id="summary">Summary<a href="https://docs.retool.com/changelog/disclosures/php2shell#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary">​</a></h2>
<ul>
<li class="">PHP2Shell (CVE-2026-109618 and CVE-2026-109619) is an upstream PHP vulnerability.</li>
<li class="">Retool is not affected. PHP does not run on anything internet-facing, nor does it run in our production environments.</li>
<li class="">No action required.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-happened">What Happened<a href="https://docs.retool.com/changelog/disclosures/php2shell#what-happened" class="hash-link" aria-label="Direct link to What Happened" title="Direct link to What Happened">​</a></h2>
<p>PHP2Shell (CVE-2026-109618 and CVE-2026-109619) is a set of vulnerabilities in PHP. Retool became aware of them and opened an investigation on October 21, 2026.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="customer-guidance">Customer Guidance<a href="https://docs.retool.com/changelog/disclosures/php2shell#customer-guidance" class="hash-link" aria-label="Direct link to Customer Guidance" title="Direct link to Customer Guidance">​</a></h2>
<p>Retool is not affected, no customer action is required.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="impact">Impact<a href="https://docs.retool.com/changelog/disclosures/php2shell#impact" class="hash-link" aria-label="Direct link to Impact" title="Direct link to Impact">​</a></h2>
<p>PHP does not run on anything internet-facing, nor does it run in production or on anything connected to production. Retool is still reviewing third-party vendors for exposure and will update this page when we have completed our investigation.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="revision-history">Revision History<a href="https://docs.retool.com/changelog/disclosures/php2shell#revision-history" class="hash-link" aria-label="Direct link to Revision History" title="Direct link to Revision History">​</a></h2>
<ul>
<li class="">2026-10-21 — Initial publication.</li>
</ul>]]></content:encoded>
            <category>Disclosures</category>
        </item>
        <item>
            <title><![CDATA[Gemini 4 Argon available in Retool]]></title>
            <link>https://docs.retool.com/changelog/gemini-4-argon</link>
            <guid>https://docs.retool.com/changelog/gemini-4-argon</guid>
            <pubDate>Mon, 19 Oct 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports Gemini 4 Argon.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.78.0 and later</span></span></div><p><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#google-gemini">Gemini 4 Argon</a> is now available in Retool through Google and Google Vertex AI. It is available to Enterprise organizations that <a class="glossary bring-your-own-key" target="_blank" rel="noopener noreferrer">bring their own key</a>.</p>
<p>Use Gemini 4 Argon with <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a> and <a class="" href="https://docs.retool.com/build/apps/reference/models">building apps</a>.</p>]]></content:encoded>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[Expanded source control managers for multi-instance releases]]></title>
            <link>https://docs.retool.com/changelog/multi-instance-releases-all-scm</link>
            <guid>https://docs.retool.com/changelog/multi-instance-releases-all-scm</guid>
            <pubDate>Mon, 19 Oct 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports more source control managers for app multi-instance releases.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p>Enterprise organizations can now implement multi-instance releases for apps using any supported SCM provider: AWS CodeCommit, Azure Repos, BitBucket, GitHub, and GitLab.</p>
<p>To enable multi-instance releases, navigate to <strong>Settings</strong> &gt; <strong>Source control</strong> &gt; <strong>Edit settings</strong> and turn on <strong>Enable multi-instance releases</strong>.</p>
<p>This feature enables you to publish different release versions across instances, making it possible to test a newer version on staging or development instances before promoting to production. <a class="" href="https://docs.retool.com/source-control/guides/multi-instance-releases/apps">Get started with multi-instance releases for apps</a>.</p>]]></content:encoded>
            <category>Source Control</category>
            <category>Enterprise</category>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261014</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261014</guid>
            <pubDate>Wed, 14 Oct 2026 16:42:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 stable updates: October 14, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34.9">Retool 4.34.9</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.74 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-474-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-474-edge</guid>
            <pubDate>Wed, 14 Oct 2026 16:38:00 GMT</pubDate>
            <description><![CDATA[Retool 4.74 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.74">Retool 4.74</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[New AI models available in Retool]]></title>
            <link>https://docs.retool.com/changelog/2026/10/14/new-ai-models-</link>
            <guid>https://docs.retool.com/changelog/2026/10/14/new-ai-models-</guid>
            <pubDate>Wed, 14 Oct 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports GPT 6.1 Sol and Claude Sonnet 5.5.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p>Retool now supports the following new AI models:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#openai">GPT 6.1 Sol</a> through OpenAI for <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a> and <a class="" href="https://docs.retool.com/build/apps/reference/models">building apps</a>.</li>
<li class=""><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#anthropic">Claude Sonnet 5.5</a> through Anthropic and Amazon Bedrock for <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a> and <a class="" href="https://docs.retool.com/build/apps/reference/models">building apps</a>.</li>
</ul>]]></content:encoded>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[Build resource environment switching for published apps]]></title>
            <link>https://docs.retool.com/changelog/resource-environments-published-apps</link>
            <guid>https://docs.retool.com/changelog/resource-environments-published-apps</guid>
            <pubDate>Wed, 14 Oct 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Retool supports configurable resource environments in published apps.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.78 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary team-plan" target="_blank" rel="noopener noreferrer">Team</a> <span class="docs-inline-sep" aria-hidden="true">•</span> <a class="glossary business-plan" target="_blank" rel="noopener noreferrer">Business</a> <span class="docs-inline-sep" aria-hidden="true">•</span> <a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span></span></div><p>Organizations on paid plans can prompt the app building agent to use <a class="glossary resource-environment" target="_blank" rel="noopener noreferrer">resource environments</a> in published apps. Resource environments enable you to run a function against different configurations of the same resource, such as staging and production, and were previously only available in <strong>Edit</strong> mode for apps.</p>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>Published apps do not include an environment toggle by default.</p></div></div>
<p>Optionally, prompt the agent to add a UI element that allows app users to switch between resource environments.</p>
<div class="assist-prompts"><button class="assist-prompts__header" aria-expanded="true" aria-label="Collapse Sample prompts"><span class="assist-prompts__header-icon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256" aria-label="App"><path d="M196.12,128c24.65-34.61,37.22-70.38,19.74-87.86S162.61,35.23,128,59.88C93.39,35.23,57.62,22.66,40.14,40.14S35.23,93.39,59.88,128c-24.65,34.61-37.22,70.38-19.74,87.86h0c5.63,5.63,13.15,8.14,21.91,8.14,18.48,0,42.48-11.17,66-27.88C151.47,212.83,175.47,224,194,224c8.76,0,16.29-2.52,21.91-8.14h0C233.34,198.38,220.77,162.61,196.12,128Zm8.43-76.55c7.64,7.64,2.48,32.4-18.52,63.28a300.33,300.33,0,0,0-21.19-23.57A300.33,300.33,0,0,0,141.27,70C172.15,49,196.91,43.8,204.55,51.45ZM176.29,128a289.14,289.14,0,0,1-22.76,25.53A289.14,289.14,0,0,1,128,176.29a289.14,289.14,0,0,1-25.53-22.76A289.14,289.14,0,0,1,79.71,128,298.62,298.62,0,0,1,128,79.71a289.14,289.14,0,0,1,25.53,22.76A289.14,289.14,0,0,1,176.29,128ZM51.45,51.45c2.2-2.21,5.83-3.35,10.62-3.35C73.89,48.1,92.76,55,114.72,70A304,304,0,0,0,91.16,91.16,300.33,300.33,0,0,0,70,114.73C49,83.85,43.81,59.09,51.45,51.45Zm0,153.1C43.81,196.91,49,172.15,70,141.27a300.33,300.33,0,0,0,21.19,23.57A304.18,304.18,0,0,0,114.73,186C83.85,207,59.09,212.2,51.45,204.55Zm153.1,0c-7.64,7.65-32.4,2.48-63.28-18.52a304.18,304.18,0,0,0,23.57-21.19A300.33,300.33,0,0,0,186,141.27C207,172.15,212.19,196.91,204.55,204.55ZM140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128Z"></path></svg></span><span class="react-app-prompts-title assist-prompts__header-title">Sample prompts</span><span class="assist-prompts__spacer"></span><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 256 256" class="assist-prompts__caret"><path d="M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z"></path></svg></button><div class="assist-prompts__list"><div class="assist-prompts__item"><span class="assist-prompts__item-text">When the user is not in the Finance Admin group, use the staging resource environment.</span><button class="assist-prompts__copy" aria-label="Copy prompt: When the user is not in the Finance Admin group, use the staging resource environment."><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 256 256"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg>Copy</button></div><div class="assist-prompts__item"><span class="assist-prompts__item-text">I want to use this app across resource environments. Add a dropdown in the top right corner.</span><button class="assist-prompts__copy" aria-label="Copy prompt: I want to use this app across resource environments. Add a dropdown in the top right corner."><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 256 256"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg>Copy</button></div></div></div>
<p>In addition, you can use the <code>_environment</code> URL query parameter to open an app in a different environment, such as <code>?_environment=staging</code>. This URL parameter works automatically and does not require prompting.</p>]]></content:encoded>
            <category>Resources</category>
            <category>Apps</category>
            <category>Business</category>
            <category>Enterprise</category>
        </item>
        <item>
            <title><![CDATA[Retool-provided AI models on the Business plan]]></title>
            <link>https://docs.retool.com/changelog/business-retool-models</link>
            <guid>https://docs.retool.com/changelog/business-retool-models</guid>
            <pubDate>Tue, 13 Oct 2026 13:00:00 GMT</pubDate>
            <description><![CDATA[Organizations on the Business plan can now optionally use Retool-provided AI models for app building.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p>Organizations on the Business plan now have access to Retool-provided AI models for app building. These models, prefixed with <code>Retool</code>, have been tuned by Retool for enhanced performance and speed for app building.</p>
<p>The following Retool-provided models are supported:</p>
<ul>
<li class=""><strong>Retool Mini</strong></li>
<li class=""><strong>Retool Power</strong></li>
</ul>]]></content:encoded>
            <category>Apps</category>
            <category>AI</category>
            <category>Beta</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261008</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261008</guid>
            <pubDate>Thu, 08 Oct 2026 17:29:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates: October 8, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34.8">Retool 4.34.8</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0.21">Retool 4.0.21</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261007</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261007</guid>
            <pubDate>Wed, 07 Oct 2026 16:42:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 stable updates: October 7, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34">Retool 4.34.7</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.70 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-470-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-470-edge</guid>
            <pubDate>Wed, 07 Oct 2026 16:38:00 GMT</pubDate>
            <description><![CDATA[Retool 4.70 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.70">Retool 4.70</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Custom authentication for embedded apps]]></title>
            <link>https://docs.retool.com/changelog/custom-authentication-embedded-apps</link>
            <guid>https://docs.retool.com/changelog/custom-authentication-embedded-apps</guid>
            <pubDate>Tue, 06 Oct 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Use the Retool API to authenticate apps embedded outside Retool.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.74.0 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary business-plan" target="_blank" rel="noopener noreferrer">Business</a> <span class="docs-inline-sep" aria-hidden="true">•</span> <a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span></span></div><p>Business and Enterprise organizations can now use the Retool API to authenticate apps that are embedded in an app or website external to Retool.</p>
<p>Once configured, the custom authentication flow exchanges an API token for an embed URL. When a parent app authenticates a user using your preferred authentication method, the parent app makes an API request to Retool to generate an embed URL. This embed URL is a secure, single-use link on the domain of your published app. Loading it in the iframe exchanges the link for a session, sets the cookies the app needs, and then displays the app.</p>
<p>Standard authentication through Retool remains supported.</p>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>This flow is available for apps published on a cloud instance that use the standard Retool domain (<code>example.retool.com</code>). It is not available to self-hosted instances or organizations that use a <a class="" href="https://docs.retool.com/org-users/guides/cloud/custom-domains">custom domain</a>.</p></div></div>]]></content:encoded>
            <category>Apps</category>
            <category>Business</category>
            <category>Enterprise</category>
        </item>
        <item>
            <title><![CDATA[Create PostgreSQL and REST API resources with natural language]]></title>
            <link>https://docs.retool.com/changelog/natural-language-postgres-rest</link>
            <guid>https://docs.retool.com/changelog/natural-language-postgres-rest</guid>
            <pubDate>Fri, 02 Oct 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Prompt the app building agent to create REST API and Postgres resources.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.88 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary all-plans" target="_blank" rel="noopener noreferrer">All plans</a></span><span class="docs-info-bar__pill"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="docs-info-bar__icon" aria-hidden="true"><path d="M208,144a15.78,15.78,0,0,1-10.42,14.94L146,178l-19,51.62a15.92,15.92,0,0,1-29.88,0L78,178l-51.62-19a15.92,15.92,0,0,1,0-29.88L78,110l19-51.62a15.92,15.92,0,0,1,29.88,0L146,110l51.62,19A15.78,15.78,0,0,1,208,144ZM152,48h16V64a8,8,0,0,0,16,0V48h16a8,8,0,0,0,0-16H184V16a8,8,0,0,0-16,0V32H152a8,8,0,0,0,0,16Zm88,32h-8V72a8,8,0,0,0-16,0v8h-8a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0V96h8a8,8,0,0,0,0-16Z"></path></svg><a class="glossary public-beta" target="_blank" rel="noopener noreferrer">Public beta</a></span></span></div><p>You can now prompt the app building agent to create <a class="" href="https://docs.retool.com/data-sources/guides/connect/rest">REST API</a> or <a class="" href="https://docs.retool.com/data-sources/guides/connect/postgresql">PostgreSQL</a> <a class="glossary resource" target="_blank" rel="noopener noreferrer">resources</a> directly from the app builder.</p>
<p>Describe the resource that you want to create, and the agent initiates the resource creation process. You'll be asked to provide credentials or more details where applicable.</p>
<div class="theme-admonition theme-admonition-tip admonition_Gfwi alert alert--success"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span><span class="admonitionTitle_Svyz">Best practice</span></div><div class="admonitionContent_UjKb"><p>Retool encrypts all resource credentials and never exposes them to the agent.</p></div></div>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.09919571045576% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/jcrcrJIYJrg364z79Q8A?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Natural Language Resource Connection" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>]]></content:encoded>
            <category>Apps</category>
            <category>Beta</category>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[New OpenAI models available in Retool]]></title>
            <link>https://docs.retool.com/changelog/2026/10/02/new-ai-models-</link>
            <guid>https://docs.retool.com/changelog/2026/10/02/new-ai-models-</guid>
            <pubDate>Fri, 02 Oct 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports GPT 6 Luna, GPT 6 Sol, GPT Image 2.5 Flare, and GPT Image 2.5 Sunburst for AI resource queries.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.70.0 and later</span></span></div><p>Retool now supports the following new AI models for <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a>:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#openai">GPT 6 Luna</a>.</li>
<li class=""><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#openai">GPT 6 Sol</a>.</li>
<li class="">Enterprise only: <a class="" href="https://docs.retool.com/data-sources/reference/ai-models#openai">GPT Image 2.5 Flare</a>. Must bring your own key.</li>
<li class="">Enterprise only: <a class="" href="https://docs.retool.com/data-sources/reference/ai-models#openai">GPT Image 2.5 Sunburst</a>. Must bring your own key.</li>
</ul>]]></content:encoded>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34, 4.0, and 3.334 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20261001</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20261001</guid>
            <pubDate>Thu, 01 Oct 2026 21:56:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34, 4.0, and 3.334 stable updates: October 1, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34.6">Retool 4.34.6</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0.19">Retool 4.0.19</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#3.334.31">Retool 3.334.31</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool-provided AI models on the Team plan]]></title>
            <link>https://docs.retool.com/changelog/team-retool-models</link>
            <guid>https://docs.retool.com/changelog/team-retool-models</guid>
            <pubDate>Thu, 01 Oct 2026 13:00:00 GMT</pubDate>
            <description><![CDATA[The Team plan can now optionally use Retool-provided AI models for app building.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p>Organizations on the Team plan can now use Retool-provided AI models for app building, in addition to the full catalog of supported models. These models, prefixed with <code>Retool</code>, have been tuned by Retool for enhanced performance and speed for app building.</p>
<p>The following Retool-provided models are supported:</p>
<ul>
<li class=""><strong>Retool Mini</strong></li>
<li class=""><strong>Retool Power</strong></li>
</ul>]]></content:encoded>
            <category>Apps</category>
            <category>AI</category>
            <category>Beta</category>
        </item>
        <item>
            <title><![CDATA[Claude Opus 5.5 available in Retool]]></title>
            <link>https://docs.retool.com/changelog/claude-opus-5-5</link>
            <guid>https://docs.retool.com/changelog/claude-opus-5-5</guid>
            <pubDate>Thu, 01 Oct 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports Claude Opus 5.5.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.70.0 and later</span></span></div><p><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#anthropic">Claude Opus 5.5</a> is now available in Retool through Anthropic for all paid plans and through Amazon Bedrock for Enterprise plans. It can be used in the following ways:</p>
<ul>
<li class="">For <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a> <a class="glossary bring-your-own-key" target="_blank" rel="noopener noreferrer">with your own key</a>.</li>
<li class="">For <a class="" href="https://docs.retool.com/build/apps">app building</a> with a <a class="glossary retool-managed-key" target="_blank" rel="noopener noreferrer">Retool-managed key</a> or <a class="glossary bring-your-own-key" target="_blank" rel="noopener noreferrer">with your own key</a>.</li>
</ul>]]></content:encoded>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260930</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260930</guid>
            <pubDate>Wed, 30 Sep 2026 19:09:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates: September 30, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34">Retool 4.34.5</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.18</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.66 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-466-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-466-edge</guid>
            <pubDate>Wed, 30 Sep 2026 16:38:00 GMT</pubDate>
            <description><![CDATA[Retool 4.66 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.66">Retool 4.66</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Conclusion of public beta for Assist]]></title>
            <link>https://docs.retool.com/changelog/assist-removal</link>
            <guid>https://docs.retool.com/changelog/assist-removal</guid>
            <pubDate>Wed, 30 Sep 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Assist is no longer available in the classic app builder.]]></description>
            <content:encoded><![CDATA[<p>Retool has concluded the public beta period for Assist, and Assist is no longer available in the classic app builder for most cloud or self-hosted instances. Certain customers retained access until December 31, 2026, in order to migrate off the tool. If your organization retained access, see <a class="" href="https://docs.retool.com/classic-apps/guides/assist-deprecated">Assist</a> for supported models and setup instructions.</p>
<p>The drag-and-drop experience for building and maintaining classic apps is still available. For an AI-powered building experience, Retool recommends using the <a class="" href="https://docs.retool.com/changelog/app-builder">new app builder</a>. <a class="" href="https://docs.retool.com/build/apps/guides/create/convert-classic-apps">Converting your classic apps to the new app builder</a> is free for Team, Business, and Enterprise organizations.</p>
<p>If you have any questions, reach out to the <a href="https://community.retool.com/" target="_blank" rel="noopener noreferrer" class="">Community Forum</a> or your account manager.</p>]]></content:encoded>
            <category>Classic Apps</category>
            <category>Assist</category>
        </item>
        <item>
            <title><![CDATA[Deprecation of Retool Email for organizations on the Free plan]]></title>
            <link>https://docs.retool.com/changelog/retool-email-free-plan-deprecation</link>
            <guid>https://docs.retool.com/changelog/retool-email-free-plan-deprecation</guid>
            <pubDate>Wed, 30 Sep 2026 09:33:00 GMT</pubDate>
            <description><![CDATA[Retool Email will no longer be available to Retool organizations on the Free plan starting January 1, 2027.]]></description>
            <content:encoded><![CDATA[<p>Starting <strong>January 1, 2027</strong>, Retool is deprecating <a class="" href="https://docs.retool.com/data-sources/concepts/intro/retool-email">Retool Email</a> for organizations on the <strong>Free</strong> plan. After this date, Free plan organizations can no longer use Retool Email to send emails from apps, workflows, or other automations.</p>
<p>Retool Email remains available to organizations on the <strong>Team</strong>, <strong>Business</strong>, and <strong>Enterprise</strong> plans.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="who-is-affected">Who is affected<a href="https://docs.retool.com/changelog/retool-email-free-plan-deprecation#who-is-affected" class="hash-link" aria-label="Direct link to Who is affected" title="Direct link to Who is affected">​</a></h2>
<p>This change affects cloud-hosted organizations on the <strong>Free</strong> plan that use Retool Email. Organizations on paid plans are not affected.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-to-do">What to do<a href="https://docs.retool.com/changelog/retool-email-free-plan-deprecation#what-to-do" class="hash-link" aria-label="Direct link to What to do" title="Direct link to What to do">​</a></h2>
<p>To avoid disruption to apps and automations that depend on Retool Email, either upgrade your organization to a paid plan or switch to another email resource before January 1, 2027.</p>
<p>Retool supports several other ways to send emails:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/data-sources/guides/connect/sendgrid">SendGrid</a>.</li>
<li class=""><a class="" href="https://docs.retool.com/data-sources/guides/connect/gmail">Gmail</a>.</li>
<li class=""><a class="" href="https://docs.retool.com/data-sources/guides/connect/smtp">SMTP</a>.</li>
<li class="">Your email service provider's API, using a <a class="" href="https://docs.retool.com/data-sources/guides/connect/rest">REST API</a> resource.</li>
</ul>
<p>After you configure a new resource, update any queries that use Retool Email to use the new resource instead.</p>]]></content:encoded>
            <category>Deprecation</category>
            <category>Action required</category>
            <category>Cloud</category>
            <category>Resources</category>
            <category>Pricing</category>
        </item>
        <item>
            <title><![CDATA[Deprecation of preinstalled libraries in custom authentication JavaScript steps]]></title>
            <link>https://docs.retool.com/changelog/custom-auth-libraries-deprecation</link>
            <guid>https://docs.retool.com/changelog/custom-auth-libraries-deprecation</guid>
            <pubDate>Wed, 30 Sep 2026 09:32:00 GMT</pubDate>
            <description><![CDATA[The preinstalled third-party libraries available in custom authentication JavaScript steps are deprecated. Migrate affected steps to use Node.js built-in modules.]]></description>
            <content:encoded><![CDATA[<p>As part of our continued efforts to keep Retool secure and reduce vulnerabilities, Retool is deprecating several preinstalled third-party libraries, such as <code>jsonwebtoken</code>, <code>crypto-js</code>, <code>moment</code>, and <code>uuid</code>, currently available in <a class="" href="https://docs.retool.com/data-sources/guides/authentication/custom">custom authentication</a> JavaScript steps. Retool plans to remove these libraries from cloud and self-hosted instances in Q2 2027.</p>
<p>If your custom authentication steps use any of these libraries, you can migrate to Node.js built-in equivalents, such as <code>crypto</code> and <code>Buffer</code>, well ahead of the removal date. Migrating before then avoids any disruption to your authentication flows.</p>
<p>Only REST API, GraphQL, OpenAPI, and gRPC resources that use <strong>Custom Auth</strong> with a <strong>JavaScript</strong> step that loads a preinstalled library are affected. JavaScript steps that use Node.js built-in modules, such as <code>crypto</code>, continue to work without changes.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="who-is-affected">Who is affected<a href="https://docs.retool.com/changelog/custom-auth-libraries-deprecation#who-is-affected" class="hash-link" aria-label="Direct link to Who is affected" title="Direct link to Who is affected">​</a></h2>
<p>Any customers who have resources that use <strong>Custom Auth</strong> as its authentication method <em>and</em> one of its <strong>JavaScript</strong> steps loads a preinstalled library. Custom authentication steps that only use <strong>Form (modal)</strong>, <strong>API Request</strong>, or <strong>Define a variable</strong> steps aren't affected, and neither are JavaScript steps that don't call <code>require()</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-to-do">What to do<a href="https://docs.retool.com/changelog/custom-auth-libraries-deprecation#what-to-do" class="hash-link" aria-label="Direct link to What to do" title="Direct link to What to do">​</a></h2>
<p>To check whether a resource is affected:</p>
<ol>
<li class="">On the <strong>Resources</strong> page, open a REST API, GraphQL, OpenAPI, or gRPC resource that uses <strong>Custom Auth</strong>.</li>
<li class="">Review the code in each <strong>JavaScript</strong> step of the authentication flow.</li>
<li class="">Look for <code>require()</code> calls that load a preinstalled library, for example <code>require('jsonwebtoken')</code>.</li>
</ol>
<p>Calls that load Node.js built-in modules, such as <code>require('crypto')</code>, don't need any changes. For the full list of preinstalled libraries, refer to <a class="" href="https://docs.retool.com/data-sources/guides/authentication/custom-auth-libraries">Custom authentication JavaScript libraries</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="migrate-to-a-supported-replacement-library">Migrate to a supported replacement library<a href="https://docs.retool.com/changelog/custom-auth-libraries-deprecation#migrate-to-a-supported-replacement-library" class="hash-link" aria-label="Direct link to Migrate to a supported replacement library" title="Direct link to Migrate to a supported replacement library">​</a></h2>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>The following migration guide only applies when using inline custom authentication steps.</p></div></div>
<p>Each library that custom authentication JavaScript steps commonly load has a replacement that is built in to Node.js or JavaScript. The following table lists the recommended replacement for each.</p>
<table><thead><tr><th>Library</th><th>Replacement</th></tr></thead><tbody><tr><td><code>jsonwebtoken</code></td><td><code>crypto.sign()</code> or <code>crypto.createHmac()</code> with <code>Buffer</code></td></tr><tr><td><code>jose</code></td><td><code>crypto.sign()</code> or <code>crypto.createHmac()</code> with <code>Buffer</code></td></tr><tr><td><code>crypto-js</code></td><td><code>crypto.createHmac()</code>, <code>crypto.createHash()</code>, and <code>Buffer</code></td></tr><tr><td><code>moment</code> and <code>moment-timezone</code></td><td><code>Date</code> and <code>Intl.DateTimeFormat</code></td></tr><tr><td><code>uuid</code></td><td><code>crypto.randomUUID()</code></td></tr><tr><td><code>atob</code></td><td><code>Buffer.from(value, 'base64').toString('latin1')</code></td></tr><tr><td><code>request</code> and <code>axios</code></td><td>The <code>https</code> module, or an <strong>API Request</strong> step in the authentication flow</td></tr></tbody></table>
<p>JavaScript steps don't have access to the global <code>fetch()</code> function. To make HTTP requests, use the <code>https</code> module or add a separate <strong>API Request</strong> step. For more information, refer to <a href="https://docs.retool.com/changelog/custom-auth-libraries-deprecation#replace-request-and-axios" class="">"Replace request and axios"</a> below.</p>
<p>If your step uses a library that isn't listed here, <a class="" href="https://docs.retool.com/support">contact Retool Support</a> for help identifying a replacement.</p>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Replace jsonwebtoken</summary><div><div class="collapsibleContent_i85q"><p>Most custom authentication flows use <code>jsonwebtoken</code> to sign a JSON Web Token (JWT) with <code>jwt.sign()</code>. A JWT is three base64url-encoded segments joined with periods: a header, a payload, and a signature. You can build it with the <code>crypto</code> module and <code>Buffer</code>.</p><p>The following examples use <code>userId</code>, <code>jwtPrivateKey</code>, and <code>jwtSecret</code> as placeholders. Replace them with the variables, form values, or configuration variables that your flow already uses.</p><p><strong>Sign a token with RS256</strong></p><p>The following step signs a token with an RSA private key using <code>jsonwebtoken</code>:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>Before</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> jwt </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'jsonwebtoken'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> jwt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">sign</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">sub</span><span class="token operator">:</span><span class="token plain"> userId </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> jwtPrivateKey</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token literal-property property">algorithm</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'RS256'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token literal-property property">expiresIn</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'1h'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><p>The following step produces the same token using <code>crypto.sign()</code>. <code>jwtPrivateKey</code> must be a PEM-encoded private key, the same format that <code>jsonwebtoken</code> accepts.</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>After</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> crypto </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'crypto'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(80, 250, 123)">base64url</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">obj</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token maybe-class-name">Buffer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token keyword module" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">stringify</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">obj</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'base64url'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> now </span><span class="token operator">=</span><span class="token plain"> </span><span class="token known-class-name class-name">Math</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">floor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token known-class-name class-name">Date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">now</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">/</span><span class="token plain"> </span><span class="token number">1000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> header </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">base64url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">alg</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'RS256'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">typ</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'JWT'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> payload </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">base64url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">sub</span><span class="token operator">:</span><span class="token plain"> userId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">iat</span><span class="token operator">:</span><span class="token plain"> now</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">exp</span><span class="token operator">:</span><span class="token plain"> now </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">3600</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> signingInput </span><span class="token operator">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">header</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">.</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">payload</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> signature </span><span class="token operator">=</span><span class="token plain"> crypto</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">sign</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'sha256'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token maybe-class-name">Buffer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token keyword module" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">signingInput</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> jwtPrivateKey</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'base64url'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">signingInput</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">.</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">signature</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><p><code>jsonwebtoken</code> automatically adds an <code>iat</code> (issued at) claim and converts <code>expiresIn</code> into an <code>exp</code> claim. When you build the token yourself, set both claims explicitly in seconds since the Unix epoch. In the example, <code>now + 3600</code> matches <code>expiresIn: '1h'</code>. Add any other claims your API requires, such as <code>iss</code> or <code>aud</code>, to the payload object.</p><p>To use RS384 or RS512, change <code>alg</code> in the header and replace <code>sha256</code> with <code>sha384</code> or <code>sha512</code>.</p><p>To use PS256, set <code>alg</code> to <code>PS256</code> and pass Probabilistic Signature Scheme (PSS) padding options with the key:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> signature </span><span class="token operator">=</span><span class="token plain"> crypto</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">sign</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'sha256'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token maybe-class-name">Buffer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token keyword module" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">signingInput</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">key</span><span class="token operator">:</span><span class="token plain"> jwtPrivateKey</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">padding</span><span class="token operator">:</span><span class="token plain"> crypto</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">constants</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">RSA_PKCS1_PSS_PADDING</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">saltLength</span><span class="token operator">:</span><span class="token plain"> crypto</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">constants</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">RSA_PSS_SALTLEN_DIGEST</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'base64url'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><p>To use EdDSA with an Ed25519 key, set <code>alg</code> to <code>EdDSA</code> and pass <code>null</code> as the algorithm: <code>crypto.sign(null, Buffer.from(signingInput), jwtPrivateKey)</code>.</p><p><strong>Sign a token with HS256</strong></p><p>If your step signs tokens with a shared secret, use <code>crypto.createHmac()</code>:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>Before</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> jwt </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'jsonwebtoken'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> jwt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">sign</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">sub</span><span class="token operator">:</span><span class="token plain"> userId </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> jwtSecret</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">expiresIn</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'1h'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>After</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> crypto </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'crypto'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(80, 250, 123)">base64url</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">obj</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token maybe-class-name">Buffer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token keyword module" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">stringify</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">obj</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'base64url'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> now </span><span class="token operator">=</span><span class="token plain"> </span><span class="token known-class-name class-name">Math</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">floor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token known-class-name class-name">Date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">now</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">/</span><span class="token plain"> </span><span class="token number">1000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> header </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">base64url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">alg</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'HS256'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">typ</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'JWT'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> payload </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">base64url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">sub</span><span class="token operator">:</span><span class="token plain"> userId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">iat</span><span class="token operator">:</span><span class="token plain"> now</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">exp</span><span class="token operator">:</span><span class="token plain"> now </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">3600</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> signingInput </span><span class="token operator">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">header</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">.</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">payload</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> signature </span><span class="token operator">=</span><span class="token plain"> crypto</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">createHmac</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'sha256'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> jwtSecret</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">update</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">signingInput</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">digest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'base64url'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">signingInput</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">.</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">signature</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><p><strong>Sign a token with ES256</strong></p><p>For elliptic curve keys, pass <code>dsaEncoding: 'ieee-p1363'</code> to <code>crypto.sign()</code>. JWTs require this signature format, and Node.js uses a different format by default.</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>After</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> crypto </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'crypto'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(80, 250, 123)">base64url</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">obj</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token maybe-class-name">Buffer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token keyword module" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">stringify</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">obj</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'base64url'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> now </span><span class="token operator">=</span><span class="token plain"> </span><span class="token known-class-name class-name">Math</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">floor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token known-class-name class-name">Date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">now</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">/</span><span class="token plain"> </span><span class="token number">1000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> header </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">base64url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">alg</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'ES256'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">typ</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'JWT'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> payload </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">base64url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">sub</span><span class="token operator">:</span><span class="token plain"> userId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">iat</span><span class="token operator">:</span><span class="token plain"> now</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">exp</span><span class="token operator">:</span><span class="token plain"> now </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">3600</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> signingInput </span><span class="token operator">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">header</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">.</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">payload</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> signature </span><span class="token operator">=</span><span class="token plain"> crypto</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">sign</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'sha256'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token maybe-class-name">Buffer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token keyword module" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">signingInput</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">key</span><span class="token operator">:</span><span class="token plain"> jwtPrivateKey</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">dsaEncoding</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'ieee-p1363'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'base64url'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">signingInput</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">.</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">signature</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><p><strong>Read the claims in a token</strong></p><p>If your step uses <code>jwt.decode()</code> to read the claims in a token returned by your API, decode the payload segment with <code>Buffer</code>:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>Before</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> jwt </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'jsonwebtoken'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> jwt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">decode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">token</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>After</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> payload</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> token</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">split</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'.'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">parse</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token maybe-class-name">Buffer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token keyword module" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">payload</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'base64url'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'utf8'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><p>Like <code>jwt.decode()</code>, this reads the claims without verifying the signature.</p></div></div></details>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Replace jose</summary><div><div class="collapsibleContent_i85q"><p><code>jose</code> builds the same tokens as <code>jsonwebtoken</code>. If your step passes an HS, RS, PS, ES, or EdDSA algorithm to <code>setProtectedHeader()</code>, replace calls such as <code>new SignJWT(...).sign(key)</code> with the matching example in "Replace jsonwebtoken" above. You don't need an equivalent of <code>importPKCS8()</code>, because <code>crypto.sign()</code> accepts a PEM-encoded key directly.</p><p>If your step uses other <code>jose</code> features, such as encrypted tokens (JWE), <a class="" href="https://docs.retool.com/support">contact Retool Support</a> for help identifying a replacement.</p></div></div></details>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Replace crypto-js</summary><div><div class="collapsibleContent_i85q"><p>Custom authentication flows typically use <code>crypto-js</code> to compute an HMAC signature or hash for a request, or to encode values as base64. The <code>crypto</code> module and <code>Buffer</code> produce identical output.</p><table><thead><tr><th>crypto-js</th><th>Node.js</th></tr></thead><tbody><tr><td><code>CryptoJS.HmacSHA256(message, secret).toString()</code></td><td><code>crypto.createHmac('sha256', secret).update(message).digest('hex')</code></td></tr><tr><td><code>CryptoJS.HmacSHA256(message, secret).toString(CryptoJS.enc.Base64)</code></td><td><code>crypto.createHmac('sha256', secret).update(message).digest('base64')</code></td></tr><tr><td><code>CryptoJS.SHA256(message).toString()</code></td><td><code>crypto.createHash('sha256').update(message).digest('hex')</code></td></tr><tr><td><code>CryptoJS.MD5(message).toString()</code></td><td><code>crypto.createHash('md5').update(message).digest('hex')</code></td></tr><tr><td><code>CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text))</code></td><td><code>Buffer.from(text).toString('base64')</code></td></tr><tr><td><code>CryptoJS.enc.Base64.parse(encoded).toString(CryptoJS.enc.Utf8)</code></td><td><code>Buffer.from(encoded, 'base64').toString('utf8')</code></td></tr></tbody></table><p>For other hash algorithms, replace <code>sha256</code> with the algorithm name, such as <code>sha1</code> or <code>sha512</code>. Add <code>const crypto = require('crypto');</code> at the start of any step that uses the <code>crypto</code> module.</p><p>If your step encrypts or decrypts data with <code>CryptoJS.AES</code>, use <code>crypto.createCipheriv()</code> and <code>crypto.createDecipheriv()</code> with an explicit key and initialization vector, as described in the <a href="https://nodejs.org/api/crypto.html#cryptocreatecipherivalgorithm-key-iv-options" target="_blank" rel="noopener noreferrer" class="">Node.js cipher documentation</a>. When you pass a passphrase string to <code>CryptoJS.AES</code>, it derives the key in a way that <code>crypto</code> doesn't replicate. Confirm the key, initialization vector, and cipher mode your API expects before you migrate.</p></div></div></details>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Replace moment</summary><div><div class="collapsibleContent_i85q"><p>Authentication flows typically use <code>moment</code> to generate timestamps. Native <code>Date</code> methods cover these cases.</p><table><thead><tr><th>moment</th><th>JavaScript</th></tr></thead><tbody><tr><td><code>moment().toISOString()</code></td><td><code>new Date().toISOString()</code></td></tr><tr><td><code>moment().unix()</code></td><td><code>Math.floor(Date.now() / 1000)</code></td></tr><tr><td><code>moment().valueOf()</code></td><td><code>Date.now()</code></td></tr><tr><td><code>moment().add(1, 'hour').toISOString()</code></td><td><code>new Date(Date.now() + 60 * 60 * 1000).toISOString()</code></td></tr><tr><td><code>moment.utc().format('YYYY-MM-DD')</code></td><td><code>new Date().toISOString().slice(0, 10)</code></td></tr><tr><td><code>moment.utc().format('YYYY-MM-DDTHH:mm:ss[Z]')</code></td><td><code>new Date().toISOString().split('.')[0] + 'Z'</code></td></tr></tbody></table><p>To format a date in a specific time zone, which <code>moment-timezone</code> provides, use <code>Intl.DateTimeFormat</code> with the <code>timeZone</code> option. For all formatting options, refer to the <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat" target="_blank" rel="noopener noreferrer" class="">MDN Intl.DateTimeFormat reference</a>.</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>After</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Intl</span><span class="token class-name punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token class-name">DateTimeFormat</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'en-US'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token literal-property property">timeZone</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'America/New_York'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token literal-property property">dateStyle</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'short'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token literal-property property">timeStyle</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'long'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">format</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div></div></div></details>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Replace uuid</summary><div><div class="collapsibleContent_i85q"><p>Replace <code>uuid</code> version 4 identifiers with <code>crypto.randomUUID()</code>:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>Before</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">v4</span><span class="token operator">:</span><span class="token plain"> uuidv4 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'uuid'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">uuidv4</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>After</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> crypto </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'crypto'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> crypto</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">randomUUID</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><p><code>crypto.randomUUID()</code> only generates version 4 identifiers. If your API requires another UUID version, <a class="" href="https://docs.retool.com/support">contact Retool Support</a>.</p></div></div></details>
<details id="replace-request-and-axios" class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Replace request and axios</summary><div><div class="collapsibleContent_i85q"><p>If your step makes an HTTP request with <code>request</code> or <code>axios</code>, you can move the request into a separate <strong>API Request</strong> step and reference its response in later steps. This keeps the request out of your JavaScript code.</p><p>If the request needs to stay in the JavaScript step, use the <code>https</code> module. The following example sends a JSON <code>POST</code> request and returns the status code and parsed response body:</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>Before</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> axios </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'axios'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> response </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> axios</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">post</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'https://example.com/oauth/token'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> userId </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">status</span><span class="token operator">:</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">status</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">body</span><span class="token operator">:</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">data</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_d3dP"><span class="codeBlockTitleIcon_LIUA"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256"><path d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"></path></svg></span>After</div><div class="codeBlockContent_bxn0"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> https </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'https'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> body </span><span class="token operator">=</span><span class="token plain"> </span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">stringify</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> userId </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Promise</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">resolve</span><span class="token parameter punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token parameter"> reject</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> req </span><span class="token operator">=</span><span class="token plain"> https</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">request</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token string" style="color:rgb(255, 121, 198)">'https://example.com/oauth/token'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token literal-property property">method</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'POST'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token literal-property property">headers</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string-property property">'Content-Type'</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'application/json'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string-property property">'Content-Length'</span><span class="token operator">:</span><span class="token plain"> </span><span class="token maybe-class-name">Buffer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">byteLength</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">body</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> chunks </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'data'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">chunk</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> chunks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">push</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">chunk</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'end'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> data </span><span class="token operator">=</span><span class="token plain"> </span><span class="token maybe-class-name">Buffer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">concat</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">chunks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'utf8'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">try</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token function" style="color:rgb(80, 250, 123)">resolve</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">status</span><span class="token operator">:</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">statusCode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token literal-property property">body</span><span class="token operator">:</span><span class="token plain"> data </span><span class="token operator">?</span><span class="token plain"> </span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">parse</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">:</span><span class="token plain"> </span><span class="token keyword null nil" style="color:rgb(189, 147, 249);font-style:italic">null</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">err</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token function" style="color:rgb(80, 250, 123)">reject</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">err</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  req</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'error'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> reject</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  req</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">write</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">body</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  req</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">end</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div><p>The <code>https</code> module behaves differently from <code>axios</code> in two ways:</p><ul>
<li class="">It doesn't reject the promise for error status codes such as <code>401</code> or <code>500</code>. Check <code>status</code> in your step, or in a later step, before you use the response body.</li>
<li class="">It doesn't follow redirects. If your endpoint responds with a <code>3xx</code> status, <code>res.headers.location</code> contains the redirect URL. Send the request to the final URL instead of the one that redirects.</li>
</ul><p>If the response isn't JSON, return <code>data</code> instead of <code>JSON.parse(data)</code>.</p><p>The code executor blocks requests from JavaScript steps to link-local addresses and some private network ranges. To call an internal service, use an <strong>API Request</strong> step instead.</p></div></div></details>
<h3 class="anchor anchorWithStickyNavbar_loeA" id="test-your-migrated-flow">Test your migrated flow<a href="https://docs.retool.com/changelog/custom-auth-libraries-deprecation#test-your-migrated-flow" class="hash-link" aria-label="Direct link to Test your migrated flow" title="Direct link to Test your migrated flow">​</a></h3>
<p>After you update each JavaScript step, confirm that the authentication flow still works:</p>
<ol>
<li class="">Click <strong>Save changes</strong>.</li>
<li class="">Click <strong>Test auth workflow</strong> and complete any form steps.</li>
<li class="">Review the JavaScript step output in the log and confirm that it returns the value your API expects. For a JWT, you can decode the token to compare its header and claims with the token the previous step produced.</li>
<li class="">Run a query that uses the resource to confirm that your API accepts the new credentials.</li>
</ol>
<p>If a step fails with an error such as <code>Cannot find module 'jsonwebtoken'</code>, the step still loads a preinstalled library. Replace the remaining <code>require()</code> call using the examples in this post.</p>]]></content:encoded>
            <category>Deprecation</category>
            <category>Action required</category>
            <category>Resources</category>
            <category>Security</category>
            <category>Cloud</category>
            <category>Self-hosted</category>
            <category>Hardened images</category>
        </item>
        <item>
            <title><![CDATA[Deprecation of Windows Authentication for Microsoft SQL Server resources]]></title>
            <link>https://docs.retool.com/changelog/mssql-windows-auth-deprecation</link>
            <guid>https://docs.retool.com/changelog/mssql-windows-auth-deprecation</guid>
            <pubDate>Wed, 30 Sep 2026 09:31:00 GMT</pubDate>
            <description><![CDATA[Retool is deprecating Windows Authentication for Microsoft SQL Server resources on self-hosted instances.]]></description>
            <content:encoded><![CDATA[<p>As part of our continued efforts to keep Retool secure and reduce vulnerabilities, <a class="" href="https://docs.retool.com/changelog/continued-hardening">hardened images</a> become the default for self-hosted images starting in Q2 2027. As a result, Retool is deprecating <strong>Windows Authentication</strong> for <a class="" href="https://docs.retool.com/data-sources/guides/connect/microsoft-sql-server">Microsoft SQL Server</a> resources. This deprecation also applies to <a class="" href="https://docs.retool.com/data-sources/guides/authentication/mssql-kerberos">Kerberos authentication for Microsoft SQL Server</a>, which relies on Windows Authentication.</p>
<p>Hardened images are intentionally minimal and don't include the additional third-party libraries and utilities that Windows Authentication relies on. Microsoft SQL Server resources with <strong>Connect using Windows Auth</strong> enabled will eventually stop working, so plan to migrate before your resources are affected.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="who-is-affected">Who is affected<a href="https://docs.retool.com/changelog/mssql-windows-auth-deprecation#who-is-affected" class="hash-link" aria-label="Direct link to Who is affected" title="Direct link to Who is affected">​</a></h2>
<p>This change only affects self-hosted organizations with Microsoft SQL Server resources that have <strong>Connect using Windows Auth</strong> enabled.</p>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="what-to-do">What to do<a href="https://docs.retool.com/changelog/mssql-windows-auth-deprecation#what-to-do" class="hash-link" aria-label="Direct link to What to do" title="Direct link to What to do">​</a></h2>
<p>Update each affected Microsoft SQL Server resource to use <strong>Username and password</strong> authentication with a SQL Server login:</p>
<ol>
<li class="">Create a SQL Server login with the permissions your apps and workflows need.</li>
<li class="">Open the resource from the <strong>Resources</strong> page.</li>
<li class="">Disable <strong>Connect using Windows Auth</strong>.</li>
<li class="">Enter the SQL Server login in <strong>Database username</strong> and <strong>Database password</strong>. Use <a class="" href="https://docs.retool.com/org-users/guides/configuration/config-vars">configuration variables</a> or Retool secrets to store the credentials.</li>
<li class="">Click <strong>Test connection</strong>, then save your changes.</li>
</ol>]]></content:encoded>
            <category>Deprecation</category>
            <category>Action required</category>
            <category>Self-hosted</category>
            <category>Resources</category>
            <category>Hardened images</category>
        </item>
        <item>
            <title><![CDATA[Continued hardening of Retool's infrastructure]]></title>
            <link>https://docs.retool.com/changelog/continued-hardening</link>
            <guid>https://docs.retool.com/changelog/continued-hardening</guid>
            <pubDate>Wed, 30 Sep 2026 09:30:00 GMT</pubDate>
            <description><![CDATA[Retool is continuing to harden deployment images, which may affect the availability of certain features and built-in libraries.]]></description>
            <content:encoded><![CDATA[<p>Retool previously announced the adoption of <a class="" href="https://docs.retool.com/changelog/hardened-images-stable">hardened deployment images</a>, starting with the backend service. A hardened code-executor image is now available, built in the same manner as the backend image. The hardened code-executor image is still in testing and its default packages are subject to change.</p>
<p>These images are used by Retool for its cloud-hosted platform and are available for self-hosted organizations to adopt. Eventually, all images used by Retool will be hardened.</p>
<p><a class="glossary hardened-images" href="https://docs.retool.com/self-hosted/self-managed/concepts/hardened-images" target="_blank" rel="noopener noreferrer">Hardened images</a> are built on a minimal, tightly controlled base to improve supply-chain security and reduce the attack surface. They also benefit from a smaller, more tightly curated set of included software, which reduces the risk of security vulnerabilities.</p>
<p>Retool is continuing to work on new and existing hardened images. Over time, this means some existing features and bundled libraries will no longer be supported in their current form. If a feature or library will no longer be available, or if a change requires updates to your current configuration, Retool will share this information in a changelog post with specific information and any relevant migration guidance.</p>
<p>Each changelog post will provide as much advance notice as possible so that you have time to review and implement any changes that may be needed.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Cloud channel</category>
            <category>Hardened images</category>
        </item>
        <item>
            <title><![CDATA[Changes to available AI models on the Free plan]]></title>
            <link>https://docs.retool.com/changelog/free-retool-models</link>
            <guid>https://docs.retool.com/changelog/free-retool-models</guid>
            <pubDate>Mon, 28 Sep 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[The Free plan now uses Retool-provided AI models for app building.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p>Organizations on the Free plan now use Retool-provided AI models for app building. These models, prefixed with <code>Retool</code>, have been tuned by Retool for enhanced performance and speed for app building. Access to models from other providers is now only available on paid plans.</p>
<p>Builders using these models will notice comparable quality and faster speeds when compared with other models previously available on the Free plan.</p>
<p>The following Retool-provided models are supported:</p>
<ul>
<li class=""><strong>Retool Mini</strong></li>
<li class=""><strong>Retool Power</strong></li>
</ul>]]></content:encoded>
            <category>Apps</category>
            <category>AI</category>
            <category>Beta</category>
        </item>
        <item>
            <title><![CDATA[Use external MCPs in app builder]]></title>
            <link>https://docs.retool.com/changelog/mcp-in-app-builder</link>
            <guid>https://docs.retool.com/changelog/mcp-in-app-builder</guid>
            <pubDate>Mon, 28 Sep 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[You can now call MCP servers as a resource in the app builder.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.78 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary all-plans" target="_blank" rel="noopener noreferrer">All plans</a></span></span></div><p>Retool now supports using <a class="" href="https://docs.retool.com/data-sources/guides/connect/mcp">external MCPs</a> as resources in the <a class="" href="https://docs.retool.com/build/apps">app builder</a>. The app building agent creates function calls to utilize tools from your connected MCP servers, which can be used while building or at app runtime. For example:</p>
<div class="assist-prompts"><button class="assist-prompts__header" aria-expanded="true" aria-label="Collapse Sample prompts"><span class="assist-prompts__header-icon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256" aria-label="App"><path d="M196.12,128c24.65-34.61,37.22-70.38,19.74-87.86S162.61,35.23,128,59.88C93.39,35.23,57.62,22.66,40.14,40.14S35.23,93.39,59.88,128c-24.65,34.61-37.22,70.38-19.74,87.86h0c5.63,5.63,13.15,8.14,21.91,8.14,18.48,0,42.48-11.17,66-27.88C151.47,212.83,175.47,224,194,224c8.76,0,16.29-2.52,21.91-8.14h0C233.34,198.38,220.77,162.61,196.12,128Zm8.43-76.55c7.64,7.64,2.48,32.4-18.52,63.28a300.33,300.33,0,0,0-21.19-23.57A300.33,300.33,0,0,0,141.27,70C172.15,49,196.91,43.8,204.55,51.45ZM176.29,128a289.14,289.14,0,0,1-22.76,25.53A289.14,289.14,0,0,1,128,176.29a289.14,289.14,0,0,1-25.53-22.76A289.14,289.14,0,0,1,79.71,128,298.62,298.62,0,0,1,128,79.71a289.14,289.14,0,0,1,25.53,22.76A289.14,289.14,0,0,1,176.29,128ZM51.45,51.45c2.2-2.21,5.83-3.35,10.62-3.35C73.89,48.1,92.76,55,114.72,70A304,304,0,0,0,91.16,91.16,300.33,300.33,0,0,0,70,114.73C49,83.85,43.81,59.09,51.45,51.45Zm0,153.1C43.81,196.91,49,172.15,70,141.27a300.33,300.33,0,0,0,21.19,23.57A304.18,304.18,0,0,0,114.73,186C83.85,207,59.09,212.2,51.45,204.55Zm153.1,0c-7.64,7.65-32.4,2.48-63.28-18.52a304.18,304.18,0,0,0,23.57-21.19A300.33,300.33,0,0,0,186,141.27C207,172.15,212.19,196.91,204.55,204.55ZM140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128Z"></path></svg></span><span class="react-app-prompts-title assist-prompts__header-title">Sample prompts</span><span class="assist-prompts__spacer"></span><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 256 256" class="assist-prompts__caret"><path d="M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z"></path></svg></button><div class="assist-prompts__list"><div class="assist-prompts__item"><span class="assist-prompts__item-text">Use the @Genie OneMCP resource in a chat component so that my app users can ask natural language questions about data</span><button class="assist-prompts__copy" aria-label="Copy prompt: Use the @Genie OneMCP resource in a chat component so that my app users can ask natural language questions about data"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 256 256"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg>Copy</button></div><div class="assist-prompts__item"><span class="assist-prompts__item-text">Use @Linear MCP and make changes described on ticket TOOL-1203</span><button class="assist-prompts__copy" aria-label="Copy prompt: Use @Linear MCP and make changes described on ticket TOOL-1203"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 256 256"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg>Copy</button></div></div></div>
<p>Users of the published app can only trigger MCP tools for which they have permission.</p>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>This functionality enables you to use MCP servers from other companies or services in your app. Retool also provides an <a class="" href="https://docs.retool.com/build/apps/guides/create/mcp">MCP server</a> with which you can manage your organization and build apps.</p></div></div>]]></content:encoded>
            <category>AI</category>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Retool CLI]]></title>
            <link>https://docs.retool.com/changelog/cli</link>
            <guid>https://docs.retool.com/changelog/cli</guid>
            <pubDate>Thu, 24 Sep 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Use the Retool CLI to build Retool apps from the command line.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.62 Edge<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.34.16 Stable</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary team-plan" target="_blank" rel="noopener noreferrer">Team</a> <span class="docs-inline-sep" aria-hidden="true">•</span> <a class="glossary business-plan" target="_blank" rel="noopener noreferrer">Business</a> <span class="docs-inline-sep" aria-hidden="true">•</span> <a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span><span class="docs-info-bar__pill"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="docs-info-bar__icon" aria-hidden="true"><path d="M208,144a15.78,15.78,0,0,1-10.42,14.94L146,178l-19,51.62a15.92,15.92,0,0,1-29.88,0L78,178l-51.62-19a15.92,15.92,0,0,1,0-29.88L78,110l19-51.62a15.92,15.92,0,0,1,29.88,0L146,110l51.62,19A15.78,15.78,0,0,1,208,144ZM152,48h16V64a8,8,0,0,0,16,0V48h16a8,8,0,0,0,0-16H184V16a8,8,0,0,0-16,0V32H152a8,8,0,0,0,0,16Zm88,32h-8V72a8,8,0,0,0-16,0v8h-8a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0V96h8a8,8,0,0,0,0-16Z"></path></svg><a class="glossary public-beta" target="_blank" rel="noopener noreferrer">Public beta</a></span></span></div><p>The Retool CLI is now available in public beta. It enables you to build, manage, and publish Retool-native React apps from the command line and with the help of your chosen code development agent harness, like Claude Code or Codex.</p>
<p>With this tool, you can write and validate app code directly on your machine. You can use the CLI independently or pair it with a local development agent. Follow the <a class="" href="https://docs.retool.com/build/apps/guides/create/cli">installation instructions</a> to get started, <a class="" href="https://docs.retool.com/build/apps/concepts/cli">learn how the CLI works</a>, or <a class="" href="https://docs.retool.com/build/apps/concepts/build-from-anywhere">compare the CLI to the MCP</a>.</p>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>Retool supports an <a class="" href="https://docs.retool.com/classic-apps/reference/retool-cli">existing CLI</a> that is used exclusively for classic apps. This CLI is now deprecated. It will be removed from cloud instances on March 1, 2027, and from stable instances in the Q2 2027 stable release.</p></div></div>]]></content:encoded>
            <category>New</category>
            <category>Apps</category>
            <category>Beta</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.62 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-462-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-462-edge</guid>
            <pubDate>Wed, 23 Sep 2026 22:44:00 GMT</pubDate>
            <description><![CDATA[Retool 4.62 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.62">Retool 4.62</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260923</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260923</guid>
            <pubDate>Wed, 23 Sep 2026 16:46:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34 and 4.0 stable updates: September 23, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34">Retool 4.34.4</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.17</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Embed apps in iframes]]></title>
            <link>https://docs.retool.com/changelog/embedded-apps-iframe</link>
            <guid>https://docs.retool.com/changelog/embedded-apps-iframe</guid>
            <pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Embed apps in iframes to display them in apps, classic apps, and places outside Retool.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.74.0 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary all-plans" target="_blank" rel="noopener noreferrer">All plans</a></span></span></div><p>You can now embed apps in other apps, in classic apps, and in apps or websites outside Retool using an iframe. To enable app embedding, an organization admin adds <a class="glossary csp-directive" target="_blank" rel="noopener noreferrer">Content Security Policy directive</a> rules that name the pages that are allowed to frame your app.</p>
<p>Refer to the <a class="" href="https://docs.retool.com/build/apps/guides/manage/embed">Embed apps</a> guide to learn how.</p>]]></content:encoded>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34, 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260916</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260916</guid>
            <pubDate>Wed, 16 Sep 2026 19:44:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34, 4.0 stable updates: September 16, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34">Retool 4.34.3</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.16</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.58 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-458-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-458-edge</guid>
            <pubDate>Wed, 16 Sep 2026 19:36:00 GMT</pubDate>
            <description><![CDATA[Retool 4.58 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.58">Retool 4.58</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Azure Key Vault Secrets Manager]]></title>
            <link>https://docs.retool.com/changelog/azure-key-vault-secrets-manager</link>
            <guid>https://docs.retool.com/changelog/azure-key-vault-secrets-manager</guid>
            <pubDate>Mon, 14 Sep 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Self-hosted organizations can retrieve secrets from Azure Key Vault.]]></description>
            <content:encoded><![CDATA[<p>Self-hosted organizations can store and retrieve <a class="glossary secrets" target="_blank" rel="noopener noreferrer">secrets</a> from Azure Key Vault. Configure a vault in <strong>Settings</strong> &gt; <strong>Secrets Manager</strong>.</p>]]></content:encoded>
            <category>Self-hosted</category>
        </item>
        <item>
            <title><![CDATA[New AI models available in Retool]]></title>
            <link>https://docs.retool.com/changelog/2026/09/17/new-ai-models-</link>
            <guid>https://docs.retool.com/changelog/2026/09/17/new-ai-models-</guid>
            <pubDate>Thu, 10 Sep 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports GPT 5.4 Mini, GPT 5.4 Nano, GPT 6 Astra, Claude Fable 5.1, and Gemini 3.8 Flash.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p>Retool now supports the following new AI models:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#openai">GPT 5.4 Mini</a> through OpenAI for <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a>.</li>
<li class=""><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#openai">GPT 5.4 Nano</a> through OpenAI for <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a>.</li>
<li class=""><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#openai">GPT 6 Astra</a> through OpenAI for <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a>.</li>
<li class=""><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#anthropic">Claude Fable 5.1</a> through Anthropic and Amazon Bedrock for <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a>.</li>
<li class=""><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#google-gemini">Gemini 3.8 Flash</a> through Google and Google Vertex AI for <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a>.</li>
</ul>]]></content:encoded>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34, 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260909</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260909</guid>
            <pubDate>Wed, 09 Sep 2026 18:16:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34, 4.0 stable updates: September 9, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34">Retool 4.34.2</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.15</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.54 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-454-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-454-edge</guid>
            <pubDate>Wed, 09 Sep 2026 16:37:00 GMT</pubDate>
            <description><![CDATA[Retool 4.54 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.54">Retool 4.54</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Microsoft SQL integration version 3.0 restores support for array values]]></title>
            <link>https://docs.retool.com/changelog/mssql-v3-array-params</link>
            <guid>https://docs.retool.com/changelog/mssql-v3-array-params</guid>
            <pubDate>Wed, 09 Sep 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Version 3.0 of the Microsoft SQL integration accepts array values in query parameters, removing the only known breaking change between version 1.0 and version 3.0.]]></description>
            <content:encoded><![CDATA[<p>Version 3.0 of the <a class="" href="https://docs.retool.com/data-sources/guides/connect/microsoft-sql-server">Microsoft SQL integration</a> accepts array values in query parameters. Retool converts an array to a comma-separated string before passing it to SQL Server, which matches the behavior of version 1.0.</p>
<p>Retool previously documented this as a breaking change and recommended converting array values with <code>.join(',')</code> before using them with <code>STRING_SPLIT</code>. The restriction was broader than documented: it applied to any query parameter set to an array value, whether or not the query used <code>STRING_SPLIT</code>. Version 3.0 removes the restriction entirely, so queries that pass array values no longer need to be rewritten. Queries that already use <code>.join(',')</code> produce the same value and continue to work without changes.</p>
<p>This was the only known breaking change between version 1.0 and version 3.0. You can now update an existing Microsoft SQL resource from version 1.0 or version 2.0 to version 3.0 without changing your queries. Versions 1.0 and 2.0 <a class="" href="https://docs.retool.com/changelog/mssql-v1-v2-deprecation">are deprecated</a> and will be removed, so Retool recommends updating any resource still using them.</p>
<p>Query parameters set to an object are not supported and cause the query to fail. Convert an object to a string before using it in a query, for example with <code>JSON.stringify</code>.</p>]]></content:encoded>
            <category>Resources</category>
            <category>Cloud</category>
            <category>Self-hosted</category>
        </item>
        <item>
            <title><![CDATA[AI visibility for Enterprise]]></title>
            <link>https://docs.retool.com/changelog/credit-monitoring</link>
            <guid>https://docs.retool.com/changelog/credit-monitoring</guid>
            <pubDate>Thu, 03 Sep 2026 16:00:00 GMT</pubDate>
            <description><![CDATA[Use the AI visibility page and API endpoints to monitor credit and token usage.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p>Retool introduced several features to help Enterprise organizations manage AI usage.</p>
<p>Use the new centralized settings page, <strong>AI visibility</strong>, to view AI credit usage and BYOK AI token usage. Navigate to <strong>Settings</strong>, and select <strong>Retool managed keys</strong> or <strong>Bring your own key</strong> from the dropdown at the top of the page. You can filter AI usage by instance, model, user, and feature.</p>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>This page is available on Enterprise plans. Admins can access it, and other users can access it with <a class="" href="https://docs.retool.com/permissions/concepts/admin-granularity">delegated</a> <strong>Manage billing</strong> and <strong>Manage usage analytics</strong> permissions. Available views depend on the user’s permissions.</p></div></div>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.501340482573724% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/JddARQJoq2iB5qLCqrgT?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="AI Visibility" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>
<p>Enterprise organizations can also use the new <a class="" href="https://docs.retool.com/api#get-/usage/ai_credits">Get AI credit usage</a> endpoint to measure the number of credits consumed for each AI resource that uses a <a class="glossary retool-managed-key" target="_blank" rel="noopener noreferrer">Retool-managed key</a>. You can view the number of credits consumed by resource, user, and surface area.</p>
<p>Learn more about <a class="" href="https://docs.retool.com/build/apps/concepts/best-practices/token-management#monitor-credit-and-token-usage">credit and token monitoring</a>.</p>]]></content:encoded>
            <category>AI</category>
            <category>API</category>
            <category>Enterprise</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34, 3.334, and 4.0 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260902</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260902</guid>
            <pubDate>Wed, 02 Sep 2026 17:24:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool 4.34, 3.334, and 4.0 stable updates: September 2, 2026 | Retool Changelog]]></description>
            <content:encoded><![CDATA[
<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.34">Retool 4.34.1</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#3.334">Retool 3.334.30</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.14</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.51 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-4510-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-4510-edge</guid>
            <pubDate>Wed, 02 Sep 2026 16:38:00 GMT</pubDate>
            <description><![CDATA[Retool 4.51 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.51">Retool 4.51</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Gmail resource integration available on Cloud]]></title>
            <link>https://docs.retool.com/changelog/gmail-integration-cloud</link>
            <guid>https://docs.retool.com/changelog/gmail-integration-cloud</guid>
            <pubDate>Wed, 02 Sep 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Cloud Retool organizations can now create Gmail resources.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p>Cloud Retool organizations can now connect to <a class="" href="https://docs.retool.com/data-sources/guides/connect/gmail">Gmail</a> as a resource to read, send, and manage email using the Gmail API.</p>
<p>Cloud organizations can authenticate using Retool's hosted OAuth app.</p>]]></content:encoded>
            <category>New</category>
            <category>Integrations</category>
        </item>
        <item>
            <title><![CDATA[Manual file management for app building]]></title>
            <link>https://docs.retool.com/changelog/manual-file-management</link>
            <guid>https://docs.retool.com/changelog/manual-file-management</guid>
            <pubDate>Wed, 02 Sep 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Manually add and delete files in the app builder.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.78.0 and later</span></span></div><p>Retool now supports <a class="" href="https://docs.retool.com/build/apps/guides/create/code#file-management">manual file management</a> of apps from the <strong>Code</strong> tab of the <a class="" href="https://docs.retool.com/build/apps/concepts/app-builder">app builder</a>. This enables builders to exercise finer-grained control over code files without needing to prompt the agent and consume credits.</p>
<p>Builders can manually add:</p>
<ul>
<li class=""><strong>Folder</strong>: A new empty folder inside the <code>frontend</code> or <code>backend</code> directory of your app.</li>
<li class=""><strong>Frontend component</strong>: A new TypeScript file that represents a React component, which Retool populates with a basic structure of the component.</li>
<li class=""><strong>Frontend file</strong>: A new generic frontend file. Provide the full file name, including the file extension.</li>
<li class=""><strong>Backend function</strong>: A new TypeScript file that represents a <a class="glossary function" target="_blank" rel="noopener noreferrer">function</a>, which Retool populates with the basic structure of a function.</li>
<li class=""><strong>Backend file:</strong> A new generic backend file. Provide the full file name, including the file extension.</li>
</ul>
<p>Builders can also delete certain files or folders, including those that define components and backend functions, or other temporary or user-written files.</p>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.30026809651475% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/d4rIMW6yjA5EdK4Q5ZGP?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Manually add files" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>]]></content:encoded>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Message queueing]]></title>
            <link>https://docs.retool.com/changelog/message-queueing</link>
            <guid>https://docs.retool.com/changelog/message-queueing</guid>
            <pubDate>Thu, 27 Aug 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Queue messages in the app builder while the agent works.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.78.0 and later</span></span></div><p>You can now queue messages in <strong>Chat</strong> tab of the app builder. While the agent is working, you can send up to five messages, which will be automatically sent in a batch once the agent responds.</p>
<p>You can edit or remove messages from the queue before they are sent, or clear the queue of all messages.</p>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.30026809651475% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/AsvYUbuxtlgHrMyYbgsg?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Message Queueing" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>]]></content:encoded>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.0 stable update]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260827</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260827</guid>
            <pubDate>Thu, 27 Aug 2026 00:41:00 GMT</pubDate>
            <description><![CDATA[The following patch is now available on the Stable release channel:]]></description>
            <content:encoded><![CDATA[<p>The following patch is now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.13</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Improved app development branch controls]]></title>
            <link>https://docs.retool.com/changelog/branch-management</link>
            <guid>https://docs.retool.com/changelog/branch-management</guid>
            <pubDate>Wed, 26 Aug 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[You can now rename branches and copy branch names.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p>Retool introduced finer controls on <a class="" href="https://docs.retool.com/build/apps/concepts/threads-branches">branches</a> in the <a class="" href="https://docs.retool.com/build/apps">app builder</a>. You can now rename branches from the <strong>Change History</strong> panel by hovering over a branch name and clicking the <span class="phosphor-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="phosphor"><path d="M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192ZM200,80a16,16,0,1,1,16-16A16,16,0,0,1,200,80Z"></path></svg> </span> icon.</p>
<p>You can also copy the branch name, which enables builders using <a class="" href="https://docs.retool.com/build/apps/guides/source-control">Source Control</a> to transition between development in the app builder and development locally. <a class="" href="https://docs.retool.com/build/apps/guides/source-control/local">Learn more about switching development environments</a>.</p>]]></content:encoded>
            <category>AI</category>
            <category>Apps</category>
            <category>Beta</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.34 Stable]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-434-stable</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-434-stable</guid>
            <pubDate>Wed, 26 Aug 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[For full release notes, see Self-hosted Retool 4.34 release notes.]]></description>
            <content:encoded><![CDATA[<p>Self-hosted Retool <!-- -->4.34.0<!-- --> is now available on the <a class="" href="https://docs.retool.com/releases/stable">Stable release</a> channel.</p>
<!-- -->
<p>Retool releases a version on the <a class="" href="https://docs.retool.com/releases/stable/">stable</a> channel each quarter. A stable release is generally four versions behind the cloud-hosted version at the time.</p>
<p>Preparation and testing of a stable version occurs approximately four weeks prior to its release. Stable releases are rigorously tested before they are published. As the release cycle is less frequent, administrators can more easily maintain and upgrade deployments.</p>
<p>Retool supports each stable release for six months. During this time, Retool will release patch updates that contain bug fixes or security updates. Patch updates do not contain functionality changes and can be applied more quickly than performing a full version upgrade.</p>
<p>After six months, a stable release is considered <a class="glossary deprecated" target="_blank" rel="noopener noreferrer">deprecated</a>. You can continue using a deprecated release but it will no longer receive updates. At this time, you should upgrade to the latest stable release.</p>
<p>For full release notes, see <a class="" href="https://docs.retool.com/releases/stable/2026#4.34">Self-hosted Retool 4.34 release notes</a>.</p>]]></content:encoded>
            <category>Self-hosted</category>
        </item>
        <item>
            <title><![CDATA[Improved performance of app building agent]]></title>
            <link>https://docs.retool.com/changelog/app-agent-efficiency</link>
            <guid>https://docs.retool.com/changelog/app-agent-efficiency</guid>
            <pubDate>Tue, 25 Aug 2026 14:00:00 GMT</pubDate>
            <description><![CDATA[Retool made improvements to the performance and efficiency of the app building agent, lowering AI credit consumption.]]></description>
            <content:encoded><![CDATA[<p>Retool made signficant improvements to the efficiency and performance of the app building agent. Builders will notice faster agent responses and lower AI credit consumption, especially on long-running building sessions. These improvements can result in up to 50% fewer credits consumed.</p>]]></content:encoded>
            <category>AI</category>
            <category>Apps</category>
            <category>Beta</category>
        </item>
        <item>
            <title><![CDATA[Deprecation of the BigID resource type]]></title>
            <link>https://docs.retool.com/changelog/bigid-deprecation</link>
            <guid>https://docs.retool.com/changelog/bigid-deprecation</guid>
            <pubDate>Mon, 24 Aug 2026 17:45:00 GMT</pubDate>
            <description><![CDATA[Retool is deprecating the BigID resource type.]]></description>
            <content:encoded><![CDATA[<p>Retool is deprecating the dedicated BigID resource type.</p>
<p>Retool will remove the resource type in Q1 2027, after two quarterly Stable releases. After removal, BigID resources will stop working. Queries in apps and workflows that still point at those resources will fail. Cloud and self-hosted organizations will not have a BigID connection option after removal.</p>
<p>Organizations can keep querying BigID after removal by creating a <a class="" href="https://docs.retool.com/data-sources/guides/connect/rest">REST API</a> resource. Retool will not migrate BigID resources or their query references automatically.</p>
<ol>
<li class="">Create a REST API resource. To use guided query creation, select <strong>Use an API spec</strong> and enter the specification URL <code>https://sandbox.apps.mybigid.com/BigAPI.yaml</code> or the <code>BigAPI.yaml</code> URL for your BigID instance, with the <code>environment</code> server variable set to your BigID hostname. Otherwise, select <strong>Manual queries</strong> and set the base URL to <code>https://HOSTNAME/api/v1</code>.</li>
<li class="">Set <strong>Authentication</strong> to <strong>Custom Auth</strong>. Add an <strong>API Request</strong> step that sends <code>POST /api/v1/refresh-access-token</code> with your BigID user token in the <code>Authorization</code> header. Add a <strong>Define a variable</strong> step named <code>SYSTEM_TOKEN</code> with value <code>{{ http1.body.systemToken }}</code>. Add an <code>Authorization</code> header on the resource that uses <code>{{ SYSTEM_TOKEN }}</code>. Enable <strong>Run this custom auth workflow without prompting the user</strong>. Configure a refresh auth workflow that repeats the exchange after a non-200 response. Generate the user token in the BigID UI and exchange it as described in <a href="https://developer.bigid.com/api/bigid-api-token-authentication/" target="_blank" rel="noopener noreferrer" class="">BigID's token authentication</a>.</li>
<li class="">Open each app, workflow, and Query Library query that uses the BigID resource. Change the query to use the new resource, then test it. If you used an API spec, select the same operation. Otherwise, recreate the request as method and path, such as <code>GET /ds-connections</code>. If the query editor shows an <code>Authorization</code> parameter, leave it empty.</li>
</ol>
<p>Custom authentication is not supported in public apps. If you have a large number of BigID queries and need help finding them, contact <a class="" href="https://docs.retool.com/support">Retool Support</a>.</p>]]></content:encoded>
            <category>Deprecation</category>
            <category>Resources</category>
            <category>Self-hosted</category>
            <category>Cloud</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.0 stable update]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260820</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260820</guid>
            <pubDate>Thu, 20 Aug 2026 20:47:00 GMT</pubDate>
            <description><![CDATA[The following patch is now available on the Stable release channel:]]></description>
            <content:encoded><![CDATA[<p>The following patch is now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.12</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Debug console for the app builder]]></title>
            <link>https://docs.retool.com/changelog/debug-console</link>
            <guid>https://docs.retool.com/changelog/debug-console</guid>
            <pubDate>Thu, 20 Aug 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Use the app builder's new debug console to inspect apps, surface errors and logs, and resolve issues with the agent.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.74.0 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary all-plans" target="_blank" rel="noopener noreferrer">All plans</a></span></span></div><p>The app builder now includes a <a class="" href="https://docs.retool.com/build/apps/concepts/debug">debug console</a> to help you inspect your app, surface issues, and resolve them with the agent. Open it from the <strong>status bar</strong> at the bottom of the app builder.</p>
<p>The console has three tabs:</p>
<ul>
<li class=""><strong>Errors</strong>: Function, build, and frontend errors. Hover a row to add its context to the chat or ask the agent to fix it, or click <strong>Fix all</strong> to resolve every error at once.</li>
<li class=""><strong>Logs</strong>: Logs emitted by the app or the agent, including function, build, frontend, sandbox, agent, and git events.</li>
<li class=""><strong>Timeline</strong>: A record of function runs with the elapsed time and the success of each, useful for diagnosing performance issues.</li>
</ul>
<p>The agent has access to the same information available to builders in the debug console. This enables the agent to disagnose and address issues more quickly, and it can write more performant functions.</p>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.501340482573724% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/JQec4hQSzD4uefP5xbHM?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Debug console" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>]]></content:encoded>
            <category>Apps</category>
            <category>Beta</category>
        </item>
        <item>
            <title><![CDATA[Multi-instance releases for apps]]></title>
            <link>https://docs.retool.com/changelog/multi-instance-releases-apps</link>
            <guid>https://docs.retool.com/changelog/multi-instance-releases-apps</guid>
            <pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Multi-instance releases are now supported for apps built in the new app builder, in addition to classic apps and workflows. To enable multi-instance releases, navigate to Settings > Source control > Edit settings and turn on Enable multi-instance releases.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.41 Edge<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.34.16 Stable</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span></span></div><p>Multi-instance releases are now supported for apps built in the <a class="" href="https://docs.retool.com/changelog/app-builder">new app builder</a>, in addition to classic apps and workflows. To enable multi-instance releases, navigate to <strong>Settings</strong> &gt; <strong>Source control</strong> &gt; <strong>Edit settings</strong> and turn on <strong>Enable multi-instance releases</strong>.</p>
<p>Organizations using <a class="" href="https://docs.retool.com/source-control">Source Control</a> can manage releases of protected apps, classic apps, and workflows across multiple deployment instances. This feature enables you to publish different release versions across instances, making it possible to test a newer version on staging or development instances before promoting to production.</p>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>At this time, GitHub is the only Source Control Manager (SCM) that is supported for apps. Others are being added.</p></div></div>
<p>Multi-instance releases work slightly differently for apps and classic apps. <a class="" href="https://docs.retool.com/source-control/guides/multi-instance-releases">Learn more about the difference</a>, or <a class="" href="https://docs.retool.com/source-control/guides/multi-instance-releases/apps">get started with multi-instance releases for apps</a>.</p>]]></content:encoded>
            <category>Source Control</category>
            <category>Enterprise</category>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Upcoming conclusion of public beta for Assist]]></title>
            <link>https://docs.retool.com/changelog/upcoming-assist-removal</link>
            <guid>https://docs.retool.com/changelog/upcoming-assist-removal</guid>
            <pubDate>Tue, 18 Aug 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool will remove Assist on September 30, 2026.]]></description>
            <content:encoded><![CDATA[<p>On September 30, 2026, Retool will conclude the public beta period for <a class="" href="https://docs.retool.com/changelog/assist-removal">Assist</a> and remove Assist from the classic app builder. All cloud and self-hosted instances will no longer be able to use Assist in the product.</p>
<p>The drag-and-drop experience for building and maintaining classic apps is still available. For an AI-powered building experience, Retool recommends using the <a class="" href="https://docs.retool.com/changelog/app-builder">new app builder</a>. <a class="" href="https://docs.retool.com/build/apps/guides/create/convert-classic-apps">Converting your classic apps to the new app builder</a> is free for Team, Business, and Enterprise organizations.</p>
<p>If you have any questions, reach out to the <a href="https://community.retool.com/" target="_blank" rel="noopener noreferrer" class="">Community Forum</a> or your account manager.</p>]]></content:encoded>
            <category>Classic Apps</category>
            <category>Assist</category>
        </item>
        <item>
            <title><![CDATA[Access policies for PostgreSQL resources in public beta]]></title>
            <link>https://docs.retool.com/changelog/access-policies</link>
            <guid>https://docs.retool.com/changelog/access-policies</guid>
            <pubDate>Mon, 17 Aug 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Enforce table, column, and row-level data access policies on a resource.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.44.0 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span><span class="docs-info-bar__pill"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="docs-info-bar__icon" aria-hidden="true"><path d="M208,144a15.78,15.78,0,0,1-10.42,14.94L146,178l-19,51.62a15.92,15.92,0,0,1-29.88,0L78,178l-51.62-19a15.92,15.92,0,0,1,0-29.88L78,110l19-51.62a15.92,15.92,0,0,1,29.88,0L146,110l51.62,19A15.78,15.78,0,0,1,208,144ZM152,48h16V64a8,8,0,0,0,16,0V48h16a8,8,0,0,0,0-16H184V16a8,8,0,0,0-16,0V32H152a8,8,0,0,0,0,16Zm88,32h-8V72a8,8,0,0,0-16,0v8h-8a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0V96h8a8,8,0,0,0,0-16Z"></path></svg><a class="glossary beta" target="_blank" rel="noopener noreferrer">Beta</a></span></span></div><p>Enterprise organizations can use <a class="glossary access-policy" target="_blank" rel="noopener noreferrer">access policies</a> to define which data each group of users can read or write on a resource. Retool enforces access policies on every query that runs against the resource. A policy can grant access to whole tables, specific columns, or specific rows.</p>
<p>For example, you can use an access policy to restrict an EMEA group's access on a table to only the customer rows for their own region. Retool applies that restriction to every query the group runs against the resource, so it holds regardless of which app, query, or agent the request comes from.</p>
<p>One policy covers queries from apps, the query library, raw SQL, and agents. Workflow queries against an enforced resource are blocked, so account for any workflows using the resource before you turn enforcement on. Retool supports access policies on PostgreSQL resources.</p>
<p>Access policies are enabled by default on cloud instances. On self-hosted instances, navigate to <strong>Settings &gt; Beta</strong> and toggle on the feature flag for <strong>Enforce data security using access policies</strong>. To create a policy:</p>
<ol>
<li class="">Open a PostgreSQL resource and select the <strong>Access Enforcement</strong> tab.</li>
<li class="">Turn on <strong>Data access enforcement</strong>.</li>
<li class="">Create a policy, choose the groups and environments it covers, and define its rules.</li>
<li class="">Activate the policy, then click <strong>Save changes</strong>.</li>
</ol>
<!-- -->
<div style="position:relative;padding-bottom:calc(81.12813370473538% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/sv17JDrkwMtTHykAzIC2?embed&amp;embed_mobile=inline&amp;embed_desktop=inline&amp;show_copy_link=true" title="Access Policies | Full access" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>
<p>Turning on data access enforcement closes the resource by default in every <a class="glossary resource-environment" target="_blank" rel="noopener noreferrer">resource environment</a>. Access policies apply only to the resource environments you select, so grant broad access first and narrow it once your policies are in place. Refer to <a class="" href="https://docs.retool.com/data-sources/guides/access-policies/configure-access-policies">Configure access policies</a> for more details.</p>
<p>Access policies operate by granting access, not denying access. Refer to <a class="" href="https://docs.retool.com/data-sources/concepts/access-policies">Access policies</a> and <a class="" href="https://docs.retool.com/data-sources/concepts/data-access-enforcement">Data access enforcement</a> for more information.</p>]]></content:encoded>
            <category>Beta</category>
            <category>Security</category>
            <category>Resources</category>
            <category>Enterprise</category>
            <category>Cloud</category>
            <category>Self-hosted</category>
        </item>
        <item>
            <title><![CDATA[Plan mode for app building]]></title>
            <link>https://docs.retool.com/changelog/plan-mode</link>
            <guid>https://docs.retool.com/changelog/plan-mode</guid>
            <pubDate>Mon, 17 Aug 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Ask the app building agent to create a plan for its changes.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p>You can now use <strong>Plan</strong> mode for further control over the actions that the app building agent takes.</p>
<ol>
<li class="">Click <span class="phosphor-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="phosphor"><path d="M251.34,112,183.88,44.08a96.1,96.1,0,0,0-135.77,0l-.09.09L34.25,58.4A8,8,0,0,0,45.74,69.53L59.47,55.35a79.92,79.92,0,0,1,18.71-13.9L124.68,88l-96,96a16,16,0,0,0,0,22.63l20.69,20.69a16,16,0,0,0,22.63,0l96-96,14.34,14.34h0L200,163.3a16,16,0,0,0,22.63,0l28.69-28.69A16,16,0,0,0,251.34,112ZM60.68,216,40,195.31l68-68L128.68,148ZM162.34,114.32,140,136.67,119.31,116l22.35-22.35a8,8,0,0,0,0-11.32L94.32,35a80,80,0,0,1,78.23,20.41l44.22,44.51L188,128.66l-14.34-14.34A8,8,0,0,0,162.34,114.32Zm49,37.66-12-12L228,111.25l12,12Z"></path></svg> </span> to switch from <strong>Build</strong> mode to <strong>Plan</strong> mode and tell the agent what changes you want it to make.</li>
<li class="">The agent creates a comprehensive plan, which is written as a Markdown file in the <code>.plan</code> folder. Click <strong>Review</strong> <span class="phosphor-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="phosphor"><path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path></svg> </span> to view the file.</li>
<li class="">Review the plan, and switch to the <strong>Markdown</strong> tab to make any changes. You can also ask the agent to update the plan.</li>
<li class="">When you're ready, click <strong>Build plan</strong>.</li>
</ol>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.30026809651475% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/Vi1hWyZhDp1BWxaD8HGV?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Plan mode" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>]]></content:encoded>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Deprecation of the Vertica resource type]]></title>
            <link>https://docs.retool.com/changelog/vertica-deprecation</link>
            <guid>https://docs.retool.com/changelog/vertica-deprecation</guid>
            <pubDate>Fri, 14 Aug 2026 19:30:00 GMT</pubDate>
            <description><![CDATA[Retool is deprecating the Vertica resource type.]]></description>
            <content:encoded><![CDATA[<p>Retool is deprecating the dedicated Vertica resource type.</p>
<p>Retool will remove the resource type in Q1 2027, after two quarterly Stable releases. After removal, Vertica resources will stop working. Queries in apps and workflows that still point at those resources will fail. Retool will no longer ship the Vertica JDBC driver. Cloud organizations will not have a Vertica connection option after removal.</p>
<p>Self-hosted organizations can keep querying Vertica after removal by creating a <a class="" href="https://docs.retool.com/data-sources/guides/connect/jdbc?host=self-hosted">JDBC resource</a> and adding a Vertica JDBC driver that you provide. Retool will not migrate Vertica resources or their query references automatically.</p>
<ol>
<li class="">Download the Vertica JDBC driver from <a href="https://vertica.com/" target="_blank" rel="noopener noreferrer" class="">Vertica</a>.</li>
<li class="">Add the <code>.jar</code> file to your self-hosted instance. Follow the <a class="" href="https://docs.retool.com/data-sources/guides/connect/jdbc?host=self-hosted">JDBC configuration steps</a> for <code>JDBC_DIRECTORY_PATH</code>.</li>
<li class="">Create a JDBC resource with <strong>Driver name</strong> <code>com.vertica.jdbc.Driver</code>, connection string <code>jdbc:vertica://HOSTNAME:5433/DATABASE?user=USERNAME&amp;password=PASSWORD&amp;DisableCopyLocal=true</code>, and schema query <code>select table_name, column_name, data_type, table_schema from columns</code>. Include <code>DisableCopyLocal=true</code> on the connection string.</li>
<li class="">Open each app and workflow query that uses the Vertica resource. Change the query to use the new JDBC resource, then test it.</li>
</ol>
<p>JDBC resources do not support Retool-managed SSH tunnels. If your Vertica resource uses an SSH tunnel, or you have a large number of Vertica queries and need help finding them, contact <a class="" href="https://docs.retool.com/support">Retool Support</a>.</p>]]></content:encoded>
            <category>Deprecation</category>
            <category>Resources</category>
            <category>Self-hosted</category>
            <category>Cloud channel</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.0 and 3.334 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260813</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260813</guid>
            <pubDate>Thu, 13 Aug 2026 01:19:00 GMT</pubDate>
            <description><![CDATA[The following patches are now available on the Stable release channel:]]></description>
            <content:encoded><![CDATA[<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.10</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#3.334">Retool 3.334.28</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Gemini 3.6 Flash available in Retool]]></title>
            <link>https://docs.retool.com/changelog/gemini-3.6-flash</link>
            <guid>https://docs.retool.com/changelog/gemini-3.6-flash</guid>
            <pubDate>Tue, 11 Aug 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports Google's Gemini 3.6 Flash model.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#google-gemini">Gemini 3.6 Flash</a> is now available to cloud organizations through Google. It can be used with <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a> when you connect Google with <a class="glossary bring-your-own-key" target="_blank" rel="noopener noreferrer">your own API key</a>. Support for self-hosted Retool is coming in an upcoming release.</p>]]></content:encoded>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.35 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-4335-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-4335-edge</guid>
            <pubDate>Wed, 05 Aug 2026 18:55:00 GMT</pubDate>
            <description><![CDATA[Retool 4.35 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.35">Retool 4.35</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.0 and 3.334 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260805</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260805</guid>
            <pubDate>Wed, 05 Aug 2026 18:51:00 GMT</pubDate>
            <description><![CDATA[The following patches are now available on the Stable release channel:]]></description>
            <content:encoded><![CDATA[<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.9</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#3.334">Retool 3.334.27</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Manage app building agent context]]></title>
            <link>https://docs.retool.com/changelog/building-context</link>
            <guid>https://docs.retool.com/changelog/building-context</guid>
            <pubDate>Tue, 04 Aug 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Use the Building context setting to add instructions that apply across all apps.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary all-plans" target="_blank" rel="noopener noreferrer">All plans</a></span></span></div><p>Organization admins can now add shared building context that applies to all apps built with the <a class="" href="https://docs.retool.com/changelog/app-builder">new app builder</a>. Building context is applied as custom instructions in the system prompt when the user makes any changes via prompting in the <strong>Chat</strong> tab, similar to the way <code>AGENTS.md</code> files work. Building context is valuable for defining design practices, coding conventions, data usage recommendations, and other guidelines across your organization.</p>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.501340482573724% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/6bM9BOV8K8Wv9qw5Zus3?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Building Context" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>
<p>To add shared context, navigate to <strong>Settings</strong> &gt; <strong>Building context</strong>. Add your instructions in Markdown format, and click <strong>Publish</strong> to apply your changes to all apps.</p>
<p>Building context applies to all apps in your organization. If you have <a class="" href="https://docs.retool.com/org-users/tutorials/spaces">Spaces</a> enabled, it applies to all apps in your space.</p>]]></content:encoded>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Admin onboarding hub now available in the Settings Overview page]]></title>
            <link>https://docs.retool.com/changelog/admin-onboarding-hub</link>
            <guid>https://docs.retool.com/changelog/admin-onboarding-hub</guid>
            <pubDate>Thu, 30 Jul 2026 18:00:00 GMT</pubDate>
            <description><![CDATA[Admins can now complete organization configuration using guided wizards to get started, and track organization notifications from a new Action Center panel.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.27.0 Edge</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span></span></div><p>Admins on the Enterprise plan can now complete each step in the <a class="" href="https://docs.retool.com/org-users/concepts/settings-overview">Get started</a> section of the <strong>Overview</strong> page using guided step-by-step wizards instead of navigating through separate Settings pages to complete configuration.</p>
<div class="margin-bottom--md"><figure class="screenshot"><img class="doc-image" src="https://docs.retool.com/assets/images/overview-admin-setup-0b19e785311c0d94e2b586d05d7fe9c8.png" outline="border"><figcaption class="caption"><span><p>Overview page</p></span></figcaption></figure></div>
<p>You can now directly configure from the <strong>Overview</strong> page:</p>
<ul>
<li class="">SSO</li>
<li class="">Resources</li>
<li class="">Source control</li>
<li class="">Spaces</li>
<li class="">Permissions</li>
</ul>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>The Permissions setup step is only available to organizations with <a class="glossary object-role" target="_blank" rel="noopener noreferrer">object roles</a> enabled. If object roles are not enabled for your organization, this step will be hidden. Refer to <a class="" href="https://docs.retool.com/permissions/concepts/object-roles">Object roles</a> for more information.</p></div></div>
<p>The <strong>Get started</strong> section is aimed at providing a better onboarding experience for admins of new organizations, and will help identify what configurations still need to be set up for admins or existing organizations. For example, setting up spaces walks you through choosing custom spaces or a Dev/Staging/Prod environment split, naming and configuring each space, and optionally copying over your existing SSO settings, before creating every space at once.</p>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.059897051941974% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/6JQdsLGl9qUFoYm9HCmw?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Admin Onboarding Hub - Add Multiple Spaces" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>
<p>The <strong>Overview</strong> page also includes an <strong>Action center</strong> that contains important notifications and pending join requests, suggested users, and seat upgrade requests, so admins can act on what needs attention, as well an at-a-glance overview of your organization stats, such as total users, apps, workflows, and AI credit usage.</p>]]></content:encoded>
            <category>Administration</category>
            <category>Enterprise</category>
            <category>Cloud</category>
            <category>Self-hosted</category>
        </item>
        <item>
            <title><![CDATA[BYOK AI token management]]></title>
            <link>https://docs.retool.com/changelog/byok-token-monitoring</link>
            <guid>https://docs.retool.com/changelog/byok-token-monitoring</guid>
            <pubDate>Thu, 30 Jul 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Use the **Get BYOK AI token usage** endpoint and Usage Analytics page to monitor BYOK usage.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.35.0 and later</span></span></div><p>Retool introduced several features to help Enterprise organizations manage AI token spend when using their own API key for AI resources.</p>
<p>Use the new <a class="" href="https://docs.retool.com/api#get-/usage/ai_tokens/byok">Get BYOK AI token usage</a> endpoint to measure the number of tokens consumed for each AI resource that uses <a class="glossary bring-your-own-key" target="_blank" rel="noopener noreferrer">your own key</a>. You can view the number of tokens consumed by resource, user, and surface area.</p>
<p>In addition, you can also view BYOK AI token usage in <strong>Settings</strong>. Navigate to the <strong>Usage Analytics</strong> page, and click the <strong>AI</strong> tab. You can filter AI usage by model, user, and feature.</p>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.30026809651475% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/oGZ6F6mdn9jSFwcq7xyl?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="BYOK Usage Analytics" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>
<p><a class="" href="https://docs.retool.com/build/apps/concepts/best-practices/token-management#monitor-credit-and-token-usage">Learn more</a> about credit and token monitoring.</p>]]></content:encoded>
            <category>AI</category>
            <category>API</category>
            <category>Enterprise</category>
        </item>
        <item>
            <title><![CDATA[Gmail resource integration available for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/gmail-integration-self-hosted</link>
            <guid>https://docs.retool.com/changelog/gmail-integration-self-hosted</guid>
            <pubDate>Wed, 29 Jul 2026 16:38:00 GMT</pubDate>
            <description><![CDATA[Self-hosted Retool instances can now create Gmail resources.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.31.0 and later</span></span></div><p>Self-hosted Retool instances can now connect to <a class="" href="https://docs.retool.com/data-sources/guides/connect/gmail">Gmail</a> as a resource to read, send, and manage email using the Gmail API.</p>
<p>Self-hosted instances authenticate using your own Google Cloud OAuth client, so this integration is available now without waiting on Google's app-verification process for Retool's shared OAuth client.</p>]]></content:encoded>
            <category>New</category>
            <category>Integrations</category>
            <category>Self-hosted</category>
        </item>
        <item>
            <title><![CDATA[Multiple threads per branch in the app builder]]></title>
            <link>https://docs.retool.com/changelog/threads-branches</link>
            <guid>https://docs.retool.com/changelog/threads-branches</guid>
            <pubDate>Wed, 29 Jul 2026 13:00:00 GMT</pubDate>
            <description><![CDATA[Open several agent conversations on the same branch when building apps.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.35.0 Edge<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.35 Stable</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary all-plans" target="_blank" rel="noopener noreferrer">All plans</a></span></span></div><p>The app builder now supports multiple chat conversations (threads) working on the same branch rather than a single thread per branch.</p>
<p>A thread is a single chat conversation with the agent in the <strong>Chat</strong> tab. Threads are intended to help you keep your work organized by task or theme. For example, use one thread for updating your app theme, and another thread for editing a chart on that page. Manage threads from the <strong>Chat</strong> tab.</p>
<p>A branch is a set of changes to your app, associated with an app preview, and with its own change history. A branch is the unit of work that you publish, and you create a new branch to begin a distinct line of work. For example, create a new branch when you want to change the resources that your app uses, or when you want to overhaul a page. Manage branches from the <span class="phosphor-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="phosphor"><path d="M136,80v43.47l36.12,21.67a8,8,0,0,1-8.24,13.72l-40-24A8,8,0,0,1,120,128V80a8,8,0,0,1,16,0Zm-8-48A95.44,95.44,0,0,0,60.08,60.15C52.81,67.51,46.35,74.59,40,82V64a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16H49c7.15-8.42,14.27-16.35,22.39-24.57a80,80,0,1,1,1.66,114.75,8,8,0,1,0-11,11.64A96,96,0,1,0,128,32Z"></path></svg> </span> <strong>Change History</strong> tab in the navbar.</p>
<p>When using <a class="" href="https://docs.retool.com/build/apps/guides/source-control">Source Control</a>, branches in the <a class="glossary protect" target="_blank" rel="noopener noreferrer">protected</a> app builder map to branches in your external git repository.</p>]]></content:encoded>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Claude Opus 5 available in Retool]]></title>
            <link>https://docs.retool.com/changelog/claude-opus-5</link>
            <guid>https://docs.retool.com/changelog/claude-opus-5</guid>
            <pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports Anthropic's Claude Opus 5 model.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span></div><p><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#anthropic">Claude Opus 5</a> is now available to cloud organizations through Anthropic. It can be used with <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a> and with <a class="" href="https://docs.retool.com/agents">Retool Agents</a>. Opus 5 requires you to bring your own key for AI resource queries; Retool Agents can use Opus 5 with a Retool-managed key. Support for self-hosted Retool is coming in an upcoming release.</p>]]></content:encoded>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[Deprecation of Microsoft SQL integration versions 1.0 and 2.0]]></title>
            <link>https://docs.retool.com/changelog/mssql-v1-v2-deprecation</link>
            <guid>https://docs.retool.com/changelog/mssql-v1-v2-deprecation</guid>
            <pubDate>Tue, 28 Jul 2026 11:43:00 GMT</pubDate>
            <description><![CDATA[Retool is deprecating versions 1.0 and 2.0 of the Microsoft SQL integration. All organizations must upgrade to version 3.0.]]></description>
            <content:encoded><![CDATA[<p>Retool is deprecating versions 1.0 and 2.0 of the Microsoft SQL integration. Organizations with Microsoft SQL resources still using these versions must update their resource configuration to use version 3.0.</p>
<p>This deprecation will first take effect on cloud instances on August 24, 2026. It will then take effect in the next edge and stable releases that follow.</p>
<p>Version 3.0 has been available since February 2, 2026 for cloud instances and the 3.334 stable release. If you haven't intentionally created a resource on an older integration version, your resource is likely already on version 3.0 and requires no changes.</p>
<p>To upgrade an existing resource, open its settings from the <strong>Resources</strong> page, change <strong>Connector version</strong> to <strong>Version 3.0</strong>, and save your changes.</p>
<p>Versions 1.0 and 2.0 will be removed entirely from cloud instances in Q4 2026, followed by the subsequent edge and stable releases. After that, apps, workflows, and queries that depend on Microsoft SQL resources still using version 1.0 or 2.0 will stop working.</p>]]></content:encoded>
            <category>Deprecation</category>
            <category>Resources</category>
            <category>Self-hosted</category>
            <category>Cloud</category>
        </item>
        <item>
            <title><![CDATA[Check out local branches in app builder]]></title>
            <link>https://docs.retool.com/changelog/continue-local-development</link>
            <guid>https://docs.retool.com/changelog/continue-local-development</guid>
            <pubDate>Tue, 28 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[In protected apps, you can now check out branches created outside of Retool.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.35.0 Edge<span class="docs-info-bar__slot-label-sep" aria-hidden="true">•</span>4.35 Stable</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span></span></div><p>For Enterprise organizations that use <a class="" href="https://docs.retool.com/source-control">Source Control</a> to <a class="glossary protect" target="_blank" rel="noopener noreferrer">protect</a> apps, you can now use the app builder to check out a branch that you created outside of Retool. This enables you to transition your changes from a local development environment to the app builder. This can be useful for visually validating your changes in the preview canvas.</p>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.501340482573724% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/CH1jUcMEfrG2u14REywR?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Check out branch" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>]]></content:encoded>
            <category>Enterprise</category>
            <category>Source Control</category>
            <category>Apps</category>
        </item>
        <item>
            <title><![CDATA[Agent-generated questions to clarify user intent]]></title>
            <link>https://docs.retool.com/changelog/intent-clarification</link>
            <guid>https://docs.retool.com/changelog/intent-clarification</guid>
            <pubDate>Fri, 24 Jul 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[The app building agent asks clarifying questions when needed.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.35.0 and later</span></span></div><p>When prompting in the <strong>Chat</strong> tab of the app builder, the agent asks clarifying questions to better understand your intent and create your desired outcome. The agent can ask multiple-choice or open-ended questions.</p>
<!-- -->
<div style="position:relative;padding-bottom:calc(56.30026809651475% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/xopmYfEM9tHMhkUmhZXO?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Intent clarification" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write; autoplay" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[New models for building apps]]></title>
            <link>https://docs.retool.com/changelog/july-2026-app-building-models</link>
            <guid>https://docs.retool.com/changelog/july-2026-app-building-models</guid>
            <pubDate>Fri, 24 Jul 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports Claude Sonnet 5, the GPT-5.6 models, and Claude Fable 5 for building apps.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.31.0 and later</span></span></div><p>You can now build apps with more AI models: <a class="" href="https://docs.retool.com/build/apps/reference/models">Claude Sonnet 5, the GPT-5.6 models (Sol, Terra, and Luna), and Claude Fable 5</a>. Choose a model for each thread in the <a class="" href="https://docs.retool.com/build/apps/concepts/app-builder">app builder</a>'s <strong>Chat</strong> tab. Admins can set the organization's default app building provider and model in the <strong>AI</strong> settings.</p>
<p>Claude Sonnet 5 can be used on paid plans with a Retool-managed key or your own key. The GPT-5.6 models and Claude Fable 5 require you to bring your own key, which is available on the Enterprise plan.</p>]]></content:encoded>
            <category>Apps</category>
            <category>AI</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.27 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-427-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-427-edge</guid>
            <pubDate>Thu, 23 Jul 2026 01:18:00 GMT</pubDate>
            <description><![CDATA[Retool 4.27 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.27">Retool 4.27</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.0, 3.334, and 3.300 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260723</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260723</guid>
            <pubDate>Thu, 23 Jul 2026 00:43:00 GMT</pubDate>
            <description><![CDATA[The following patches are now available on the Stable release channel:]]></description>
            <content:encoded><![CDATA[<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.7</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#3.334">Retool 3.334.25</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#3.334">Retool 3.334.24</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2025#3.300">Retool 3.300.34</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Upload files as app assets]]></title>
            <link>https://docs.retool.com/changelog/improvements-to-file-upload</link>
            <guid>https://docs.retool.com/changelog/improvements-to-file-upload</guid>
            <pubDate>Wed, 22 Jul 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool supports using uploaded files as assets in your app.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.23.0 and later</span></span></div><p>You can now upload files to be used as assets in your app through the <strong>Chat</strong> tab in the app builder. Previously, uploaded files could only be used as context for the agent.</p>
<p>Common use cases for uploaded files as assets include:</p>
<ul>
<li class="">Embedding PDFs.</li>
<li class="">Adding a company logo to the app header.</li>
<li class="">Presenting images within the app.</li>
</ul>
<div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>This change applies only to apps built using the new app builder, not to classic apps.</p></div></div>]]></content:encoded>
            <category>AI</category>
            <category>Apps</category>
            <category>Beta</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.0 and 3.334 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260716</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260716</guid>
            <pubDate>Thu, 16 Jul 2026 03:28:00 GMT</pubDate>
            <description><![CDATA[The following patches are now available on the Stable release channel:]]></description>
            <content:encoded><![CDATA[<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.6</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#3.334">Retool 3.334.23</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Retool 4.23 Edge for self-hosted instances]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-423-edge</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-423-edge</guid>
            <pubDate>Wed, 15 Jul 2026 16:38:00 GMT</pubDate>
            <description><![CDATA[Retool 4.23 is now available on the Edge release channel for self-hosted organizations.]]></description>
            <content:encoded><![CDATA[<p><a class="" href="https://docs.retool.com/releases/edge/2026#4.23">Retool 4.23</a> is now available on the <a class="" href="https://docs.retool.com/releases/edge">Edge release channel</a> for self-hosted organizations.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Edge channel</category>
        </item>
        <item>
            <title><![CDATA[Self-hosted Retool 4.0, 3.334, and 3.300 stable updates]]></title>
            <link>https://docs.retool.com/changelog/self-hosted-retool-stable-20260714</link>
            <guid>https://docs.retool.com/changelog/self-hosted-retool-stable-20260714</guid>
            <pubDate>Tue, 14 Jul 2026 15:50:00 GMT</pubDate>
            <description><![CDATA[The following patches are now available on the Stable release channel:]]></description>
            <content:encoded><![CDATA[<p>The following patches are now available on the Stable release channel:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#4.0">Retool 4.0.5</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#3.334">Retool 3.334.22</a></li>
<li class=""><a class="" href="https://docs.retool.com/releases/stable/2026#3.300">Retool 3.300.33</a></li>
</ul>
<p><a class="" href="https://docs.retool.com/self-hosted/self-managed/concepts/update-deployment">Update your Retool instance</a> to apply the latest bug fixes and security patches.</p>]]></content:encoded>
            <category>Self-hosted</category>
            <category>Stable channel</category>
        </item>
        <item>
            <title><![CDATA[Object permissions]]></title>
            <link>https://docs.retool.com/changelog/object-permissions</link>
            <guid>https://docs.retool.com/changelog/object-permissions</guid>
            <pubDate>Mon, 13 Jul 2026 13:00:00 GMT</pubDate>
            <description><![CDATA[Grant groups role-based access to specific apps, workflows, resources, and agents with object roles.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span><span class="docs-info-bar__pill docs-info-bar__plan-pill"><a class="glossary business-plan" target="_blank" rel="noopener noreferrer">Business</a> <span class="docs-inline-sep" aria-hidden="true">•</span> <a class="glossary enterprise-plan" target="_blank" rel="noopener noreferrer">Enterprise</a></span></span></div><div class="theme-admonition theme-admonition-note admonition_Gfwi alert alert--secondary"><div class="admonition-heading admonitionHeading_f1Ed"><span class="admonition-icon admonitionIcon_kpSf"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span><span class="admonitionTitle_Svyz">note</span></div><div class="admonitionContent_UjKb"><p>The object permissions feature is not yet available on self-hosted instances.</p></div></div>
<p>Retool now supports <a class="glossary object-role" target="_blank" rel="noopener noreferrer">object roles</a>—a new role type that grants groups <strong>Use</strong>, <strong>Edit</strong>, or <strong>Own</strong> access to specific apps, workflows, resources, and agents. Object roles are separate from <a class="" href="https://docs.retool.com/permissions/concepts/organization-roles">organization roles</a>, which control access to admin settings like billing and SSO.</p>
<p>When you create an object role, you set an access level for each object type and choose how the role applies:</p>
<ul>
<li class=""><strong>Universal access</strong>—The role applies to all current and future objects of that type across the organization.</li>
<li class=""><strong>Individual access</strong>—Access is scoped to specific objects or folders, which you define when assigning the role to a group.</li>
</ul>
<p>Object roles are assigned to groups from the <strong>Groups</strong> page. Once assigned, all members of the group inherit the role's permissions. You can view a group's or user's full object-level access from the <strong>Object permissions</strong> tab on their detail page in <strong>Settings</strong>.</p>
<!-- -->
<div style="position:relative;padding-bottom:calc(66.30824372759857% + 41px);height:0;width:100%"><iframe src="https://demo.arcade.software/xL2lDuMbnI58FtDQnVob?embed&amp;embed_mobile=tab&amp;embed_desktop=inline&amp;show_copy_link=true" title="Roles Settings | Retool" frameborder="0" loading="lazy" allowfullscreen="" allow="clipboard-write" style="position:absolute;top:0;left:0;width:100%;height:100%;color-scheme:light"></iframe></div>
<h2 class="anchor anchorWithStickyNavbar_loeA" id="updates-to-organization-roles">Updates to organization roles<a href="https://docs.retool.com/changelog/object-permissions#updates-to-organization-roles" class="hash-link" aria-label="Direct link to Updates to organization roles" title="Direct link to Updates to organization roles">​</a></h2>
<p>As part of this launch, organization roles have been updated to cleanly separate admin settings access from object-level access. The <strong>Create Role</strong> button on the <strong>Roles &amp; Permissions</strong> page is now a dropdown where you choose between creating an object role or an organization role. A filter control on the roles list lets you view all roles, object roles only, or organization roles only.</p>
<p>To get started:</p>
<ul>
<li class=""><a class="" href="https://docs.retool.com/permissions/concepts/object-roles">Object roles</a>—Understand how object roles work, including universal vs. individual access and folder inheritance.</li>
<li class=""><a class="" href="https://docs.retool.com/permissions/guides/business/create-object-roles">Create an object role</a>—Step-by-step instructions for creating and managing object roles.</li>
<li class=""><a class="" href="https://docs.retool.com/permissions/concepts/organization-roles">Organization roles</a>—Updated UI for managing organization roles, including a new role type selector and filter controls on the Roles &amp; Permissions page.</li>
<li class=""><a class="" href="https://docs.retool.com/permissions/guides/business/assign-roles">Assign roles to groups</a>—Assign object or organization roles to groups.</li>
</ul>]]></content:encoded>
            <category>Users and Permissions</category>
            <category>Business</category>
            <category>Enterprise</category>
        </item>
        <item>
            <title><![CDATA[Claude Sonnet 5 available in Retool]]></title>
            <link>https://docs.retool.com/changelog/claude-sonnet-5</link>
            <guid>https://docs.retool.com/changelog/claude-sonnet-5</guid>
            <pubDate>Fri, 10 Jul 2026 12:00:00 GMT</pubDate>
            <description><![CDATA[Retool now supports Anthropic's Claude Sonnet 5 model.]]></description>
            <content:encoded><![CDATA[<div class="docs-info-bar docs-info-bar--stacked margin-bottom--md" data-nosnippet="true" role="complementary" aria-label="Feature availability"><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Live on cloud</span></span><span class="docs-info-bar__field docs-info-bar__slot"><span class="docs-info-bar__field-value">Self-hosted version 4.23.0 and later</span></span></div><p><a class="" href="https://docs.retool.com/data-sources/reference/ai-models#anthropic">Claude Sonnet 5</a> is now available on paid plans through Anthropic and Amazon Bedrock. It can be used with <a class="" href="https://docs.retool.com/queries/guides/ai">AI resource queries</a> and <a class="" href="https://docs.retool.com/agents">Retool Agents</a>.</p>]]></content:encoded>
            <category>AI</category>
        </item>
    </channel>
</rss>