Retool v2.74 release notes

Resource Permissions, Event handlers for queries, and 9 new components–File Inputs, Buttons, Tags, Listbox and more!

Resource Permissions

All admins will now be able to assign two different permission levels for any given resource: (1) "use," which allows an editor to write queries with that resource and (2) "edit," which additionally allows an editor to modify the resource's configuration.

Previously, admins had minimal control over permissions to resources — any resource permission granted at a group level would allow members of that group to modify the configuration of the resource. We know configuration for some resources can be sensitive and complex to change, so we've shipped these new permission levels to give admins more control over their user's access.

Additionally, to allow editors to create new resources or delete existing ones, admins can assign a group to have “universal access” at the “edit” level. As always, a “viewer” of an app (e.g. no edit permissions) can still view and use an app that leverages a resource for which they do not have explicit permissions granted.

Drop us a note at [email protected] to let us know how they're working for you!

Event handlers for queries

When your query succeeds or fails, you can now trigger other queries, control components, call additional APIs, and more–all using event handlers!

For most Retool apps you've built in the past, you've probably set up the "After this query runs" triggers. For example, let's say you have a query, selectUsers, populating a Table component; if you insert a new record to the users table, you probably want to re-run that selectUsers query so that your Table is up to date:

However, anything more complex–showing a notification, controlling components (e.g. opening a modal)–previously required creating and wiring up a JavaScript query, and writing custom code.

A few months ago, we rolled out new event handlers to all of your components. We're now replacing the old query triggers, and bringing those powerful event handlers to your queries! You can configure any number of event handlers to run when your query succeeds or fails (e.g. on success, show a notification to your end user and open a modal to prompt a new workflow).

Anything you can do with Retool’s JS API (e.g. query1.trigger(),, utils.showNotification(...)) you can do with event handlers. If you do have a need to write some custom JavaScript, it's even easier than before. You can just use the "run script" event handler and write your code, without creating and wiring up a new query.

As you build with these new event handlers on your queries, we want to hear from you! Are there more kinds of event handlers you'd like to see us add? Any feedback? Drop us a note at [email protected]

9 new components–File Inputs, Buttons, Tags, Listbox and more!

We’re rolling out 9 redesigned and rebuilt components, including fully overhauled, existing components (Button, File Button, Link) and brand new components (Tags, File Input, File Dropzone, Listbox, Multiselect Listbox).

Just like the input components we released a few weeks ago, these offer brand new configuration options, built-in and custom validation rules, and expanded style editor support. These components were also built with accessibility in mind.

Listbox and Multiselect Listbox

Listbox and Multiselect Listbox allow you to display a list of selectable item(s) to your end users. You can dynamically set the default selected item(s) and/or disabled item(s). There’s also built-in support for fuzzy search on the values or labels, all you have to do is set the search term (e.g. {{ textinput1.value }}).

There are plenty more settings you can configure, even down to the empty state when no options match your search term. Additional functionality includes: an optional Tooltip with support for GitHub flavored markdown, custom validation (e.g. min/max items, custom error messages), event handler support, and more!

Button, Outline Button, and Link

The refreshed Button component and new Outline Button component have lots of new functionality. For example, you can dynamically set the loading state (e.g. {{ query1.isFetching }} ) to show a loading animation and disable interactivity for your users while your query is running.

You can switch between a regular, Solid Button and an Outline Button directly in the “Style” section of the Inspector for either component–you’ll also find more advanced style editor support.

Lastly, we have a new Link component that supports additional configuration like prefix/suffix icons and an optional Tooltip. You can use the Link component with any event handler, like opening a webpage or another Retool application.

File Button, File Input, and File Dropzone

We now have 2 new ways for your end users to browse and upload files–File Dropzone and File Input–and we’ve rebuilt and redesigned File Button. All of these now support single or multiple file uploads, and have 3 consistent properties to interact with and reference elsewhere in your app: (1) value: an array of base64 encoded strings for the selected file(s) (2) files: an array of file metadata, like when it was last modified, the file name, type, and size (3) parsedValue: an array of JS objects or arrays that Retool automatically parses from uploaded files (Excel, JSON, CSV, TSV and text files are supported).

They also support custom validation (e.g. min/max file size, custom error messages), prefix/suffix text and icons, an optional Tooltip, and so much more functionality.


Lastly, we’ve also added a new Tags component, a presentational component typically used in apps for things like categorization. It now has dynamic and automatic height: growing as you add additional tags as well as support for an optional Tooltip.

These components won’t be the last–we’re continuing to expand our component library and add more functionality and customizability to those you’re using today. Drop us a note with any feedback (or requests for new components!) at [email protected]


Release 2.74.14

Published on September 2, 2021.


  • Added the ability to see tables that are related to your query in the query editor's schema browser
  • Added a Front integration
  • Added advanced editor features to the Text Area component, including autocomplete, autocapitalization, and spell check.
  • Added support for exploring queries and transformers in the model browser (left-hand panel) while actively editing a different query or transformer
  • Added support for using self-signed certificates with MongoDB connection string
  • Updated default component IDs to use camelCase (e.g., checkboxGroup1)
  • Added a change event handler to BoundingBox component
  • Added module versioning support behind a feature flag. Contact support ([email protected]) if you would like this enabled for your organization.


  • Fixed previewing apps with multiple versions so that we now support previewing any published release, as well as the current working version
  • Fixed Folders and Apps so that they're sorted consistently
  • Fixed an edge case with query trigger migrations for the new query event handlers
  • Fixed an edge case where the "Go to app" event handler wouldn't successfully navigate
  • Fixed the custom header background color so that it doesn’t show unneeded toasts
  • Fixed an issue where you couldn't add widgets to modals that close when clicking outside (not ready yet)
  • Fixed a regression that would cause the editor to crash when deleting temporary state variables
  • Fixed the editor such that it always shows the most up to date version, even if an earlier release is published
  • Fixed an issue where transformers do not run on page load if they depend on disabled queries
  • Fixed local storage dependencies such that values nested inside a third level now trigger updates correctly (e.g. localStorage.values.x.y)
    Add a width field to v2 label editors (still feature flagged)
  • Fixed a rare edge case when deleting Query Library queries would cause apps to throw errors when saving
  • Fixed issue with running migrations on boot when using DATABASE_URL parameter for configuring PostgreSQL connection

Release 2.74.15

  • Fixed an issue with tables with columns set to Allow overflow
  • Fixed an issue where retoolContext.environment didn't update with toggle

Release 2.74.16

  • Snowflake now respects the DBCONNECTOR_QUERY_TIMEOUT_MS environment variable

Release 2.74.17

  • Fixed issue where {{ self }} was being overwritten in table mapped columns

Release 2.74.18

  • Fixed bug with clearing Number Input widget
  • Fixed bug with onboarding getting stuck when saving an SQL query
  • Fixed issue with the label width
  • Fixed bug with some components not rendering the correct height

Release 2.74.19

  • Added an iframe component
  • Fixed bug with event handlers encountered when upgrading from 2.72 or 2.73

Upgrade Guide

If you're upgrading from the Retool v2.73 series or earlier, note that this release contains database migrations. Please make sure that the migrations run successfully.

If you're upgrading from a different, older version of Retool, please follow the Updating Retool On-Premise guide.

Did this page help you?