Skip to main content

Changelog

Updates, changes, and improvements at Retool.

New

  • Added support for attachments in the SMTP integration
  • Added support for renaming resources without breaking references to the resource in apps
  • Added misc. improvements to the UX of modules

Protected applications (beta)

  • Fixed switching between branches in protected apps that were placed in a folder.
  • Showed better error messages when invalid branch names are chosen

Bugfixes

  • Improved error message when queries fail due to network errors
  • Removed requirement to manually enable custom analytics on each app

New

  • Added a new SMTP Integration which supports sending emails to arbitrary SMTP servers.
  • **2FA **is now a feature all paid plans have available.
  • Added support for server variables in the **OpenAPI **integration
  • Added option to configure the min and max database pool size that on-prem Retool uses

Protected Applications (Beta)

  • Added support for using Protected Applications at the same time with the existing git syncing workflow.
  • Various UX improvements

Modules (Beta)

  • Added option to add descriptions to modules
  • Added option to convert existing containers into modules

Performance improvements

  • Users of a local Retool deployment can add the environment variable APPS_FS_SYNC_WATCHER=true to greatly improve the performance of modifying Retool apps.
  • Reduced the main bundle size of the Retool app by ~30%.
  • Added a cache for utilities used in the runtime of Retool.

Bugfixes

  • Fixed issue in the **Table **component where date type columns did not support selecting a time of day.

  • Fixed issue where the **SAP Hana **integration would not work when connecting to the database via a SSH tunnel

  • Fixed issue where **Textinputs **would not accept negative number or currency values

  • Fixed issue where components could not be copy-pasted immediately after using CMD+C

  • Fixed issue where the Dropdown component sometimes may render its values behind another component

  • Fixed issue with Tabbed Containers when the list of tab names contains objects

New

  • Added support for Docker secrets in Retool's on-prem deployment

  • Added support for parsing group claims in the **Custom OAuth2 SSO integration. **

  • Added support for Google SSO in the **Custom OAuth2 SSO integration. **

  • Official Helm 3 chart for Retool available. Helm 2 charts are available here.

  • Added tools to debug the authentication flow for resources configured using **Custom Auth **

  • Redesigned the database schema browser

  • Changed REST API resources to allow for empty base URLs

Performance improvements

  • Transition speed between different apps greatly improved
  • Cleaned up some unnecessary libraries and code

Bugfixes

  • Fixed issue where single-container on-prem deployments no longer supported SSH connections

  • Fixed issue where text would overflow in Button components when the label was too long

  • Fixed issue where the SAP Hana integration would unexpectedly hang

  • Fixed visual issue with Table headers when using themes

  • Fixed issue where the ReorderableList would not work with duplicate values

  • Fixed visual bugs of the Settings page on wider screens

  • Fixed custom dimensions support in our Google Analytics integration

  • Fixed visual bug when inviting additional users

  • Fixed issue where the staging / production toggle would still appear even when you had set the HIDE_PROD_AND_STAGING_TOGGLES environment variable to true

New

  • Added support for custom SSL options in the** gRPC** integration

  • Improved how we handle errors in the OpenAPI integration

  • Added option to configure Table components to hide the refresh button in its footer.

  • Added support for frozen columns in the **Table **component

Protected Applications (Beta)

  • Added branch management interface to the editor
  • Fixed issue where renaming or moving apps would not sync to git repos
  • Fixed issue opening pull requests in GitHub Enterprise

Layout (beta)

  • Holding CMD will block component interaction and allow you drag and drop components without having to worry about triggering side effects

  • Selecting a hidden components will make the component visible automatically. Performance improvements

  • Apps with larger numbers of concurrent queries (5+) should see significant improvements in the responsiveness of the application when the queries are running.

Modules beta

  • Modules will inherit the permissions sets of their host app. This means that end users will be able view modules used in apps even if they have not been granted explicit view access to those modules.
  • Importing an app with modules will also automatically recreate missing modules that are needed by that app.

Bugfixes

  • Fixed issue where exporting apps on a non-main branch in the protected application workflow would still export the main branch

  • Fixed an issue where OAuth2 flows that had “skip Retool consent screen” turned on was incorrectly interpolating variables

  • Fixed issue where the id token was not being refreshed in the OAuth2 refresh

  • Fixed issue where the Github API Base URL was not visible in the protected apps settings

  • Fixed issue where importing apps would stop working

  • Fixed issue where the Rich Text Editor would be blurred unexpectedly

  • Fixed issue where it was not possible to disable beta experiments

Protected applications beta

  • Added the ability to edit protected branches from end user mode

Performance

  • Changed the utils.openUrl utility method to use client-side routing when possible

Bugfixes

  • Fixed issue where some corrupted apps would fail to load
  • Fixed several issues in the OpenAPI v3 integration
  • Fixed exporting apps to include any modules that they use.
  • Fixed issue where on-prem deployments with both USE_SHORT_SESSIONS turned on as well as 2FA enforced would lead user sessions timing out after five minutes.

This update is available in version 2.64.83 or higher.

Query editor folders

You can now organize your queries and transformers inside folders! We’ve also re-structured the query editor so that queries and transformers are in the same list and can be organized together.

Property tooltips

When you’re exploring the left panel (⌘B) in the editor, you’ll find tooltips as you hover over certain properties that surface helpful tips and documentation.

Editor improvements

  • You can now search for imported queries in the Query editor menu
  • String type values in the green evaluation preview are now wrapped in quotes
  • Component drag-and-drop no longer interferes with selecting text in an input
  • You can now configure the resolution on** utils.downloadPDF()**
  • You can now omit elements when downloading a pdf of your Retool app with utils.downloadPage()
  • Query "on success" notifications are no longer configurable when they won't be displayed

Component improvements

  • All Select components can now be set to allow app users to enter custom values
  • Enables option to search for and select custom values in Dropdowns. Clarifies difference between allowing a custom value and displaying an invalid value by renaming "Allow out of range values" to "Display invalid values"
  • Form components now also consider input components (Text Inputs, Selects, etc.) nested inside containers
  • Plotly chart components now omit numeric columns formatted as strings from parsed x-axis value options. Data returned from Postgres and Google Sheets datasets will now render correctly when graphed with Plotly component
  • DateTimePicker components now support "required" validation for forms
  • Fixed an issue where the Rich Text Editor would not always display the correct value after model updates

Resource improvements

  • Cassandra resources now support read-only AWS Keyspaces
  • Fix Google Cloud DataStore ordering bug where clearing the ordering setting broke the query.
  • Fix for OpenAPI custom query parameters
  • Specifying a None for the Body field in REST queries will now send nothing instead of an empty object
  • Fixed an issue where certain Custom Auth steps for REST and GraphQL resources were skipped if they followed an OAuth2 step

We’ve added an “Alert” component to Retool! Alert components let you provide and highlight feedback to your users. You might hide and show this component based on the response of a query. You can dynamically set the type of alert you show to your users (ex: display a success or error based on the return value of a query). You can also include a button in this component that can take any action a Button component can, such as running a query, or exporting data.

These updates are included in v2.64.71 or higher.

Google sheets

  • New action type Bulk Update: allows you to update many cells in a sheet at once, where previously you had to configure a custom JS query
  • New action type Delete: allows you to delete a row in a given sheet, which was previously not possible in Retool
  • Typed values: Retool can now read column types from your spreadsheet (e.g. Numbers, Booleans, and Strings). Tables now detect column formats and sort columns with those new formats. Typed values also makes it easier to join across different resources without type conversions.
  • Updated docs: improvements include a new tutorial for building an app
  • Small bug fixes: Retool no longer throws errors when querying empty spreadsheets. Additionally, we improved the stability of connecting your Google account.

Releases and history

You can now better manage versions of your applications with our release and history modals.

New features include:

  • App releases have been reworked to clarify who took what action
  • You can now compare changes between any two releases side-by-side
  • First releases for an app are no longer forced to use v0.1.0
  • The redesigned history tab shows 10 items per page and includes tags on saves that are live and/or released

Query failure conditions

Before, Retool would display a default raw error message from a failing query to users using your Retool apps. You can now override that default message by setting a message on failure conditions.

You can use “failure conditions” in queries to:

  1. Display custom error messages to your users
  2. Mark successful queries as failure (ex: for GraphQL queries)

Check out the docs for more info. Note that this feature replaces “Error transformers.”

New editor functionality

  • You can now download an image of your Retool app as a PDF with utils.downloadPage()
  • You can now logout programmatically by redirecting to /logout in your apps

Table improvements

  • You can now set dropdown labels dynamically with {{ }} in dropdown columns
  • When adding a new row to an empty table, your column settings (e.g. dropdown values like {{ query1.data }}, dropdown labels, background color, etc.) will now apply to the new row

Component improvements

  • Text Inputs components now include an option to show commas for numerical types
  • Queries can now be cached per user instead of across your organization. You can toggle this setting on the Settings → Advanced page.
  • Added the option to scroll vertically in Tabbed Container components
  • Cleaned up styles for Toggle components
  • Plotly components that use Group by now generate the correct JSON
  • Keys in Key Value components are now reorderable even when they don't contain data
  • Key Value components now display falsy values correctly
  • You can no longer move components off the page when moving them with arrow keys

Resource improvements

  • You can now search for resources on your Resources page
  • In REST and GraphQL resources, you can now use an OAUTH2_ID_TOKEN (in addition to the OAUTH2_TOKEN) to substitute for the OAuth ID token when sharing OAuth credentials between users is disabled.
  • MSSQL resources now support Trusted Authentication
  • MongoDB queries now let you specify the options field to support inputs like allowDiskUse
  • Firebase resources now correctly let you specify the database URL
  • MySQL resources correctly support dynamic name overrides for Bulk insert, update, and upsert queries
  • Retool no longer incorrectly passes an audience to the /token endpoint for OAuth2 auth flows
  • Fixed an issue where Postgres resources that connected via SSH occasionally timed out
  • PostgreSQL auto-incrementing primary keys now don’t need to be passed in for Bulk upsert queries

Bug fixes

  • Large apps with Text inputs (read: most apps!) are now more performant and don't slow down when you type
  • Keyboard shortcuts now work correctly on Chromebooks
  • CSV exports no longer prepend apostrophes to negative values
  • Query library gRPC queries now import metadata correctly
  • Previewing an OpenAPI query no longer crashes the query editor
  • Container components no longer show duplicate property editors

These updates are included in v2.64.40 or higher.

Debug queries in browser DevTools

No longer do you have to console.log everything you can to debug queries. You can now use your browser’s developer tools debugger with Javascript Queries and Transformers! Check out the docs for more details.

For example, to do this in Chrome:

  1. Run the query 2. Open the Sources tab in Chrome DevTools and navigate to a file (Cmd/Ctrl-P) with the same name as the query 3. You should now be able to inspect variables, set breakpoints, etc.

Barcode scanner

You can now scan barcodes in Retool using the Barcode scanner component. The component uses the camera of the device to scan the barcode and returns the code number.

Cascading query deletion

Often deleting a query left your app in a broken state. To fix this, we've changed query deletion to cascade: deleting a query will delete all the references to it. We've added a confirmation modal that explicitly describes what will happen. One note: it's tricky to delete query references in JS expressions, so we leave those as-is and provide references in the confirmation modal.

Preview specific app versions

You can now jump from the editor to previewing the latest or the live version of the app, without having to open the Releases modal.

More powerful components

  • Added support for LIKE operations in the Query builder component
  • You can now allow popups in the iFrame component
  • You can now reload the iFrame component from a JS query
  • The Form generator now allows for fields to be drag-and-dropped reordered. You can also specify dropdowns as an input type.
  • Fixed an issue where opening another Retool app via the Button component sent you to the home page instead
  • Added a lastSubmittedAt field to Text Input components
  • Added option to not clear the Dropdown component when clicked
  • Added the ability to remove borders in the ListView component
  • MultiSelect components no longer expand past the allotted space when full
  • Added a button to clear Text Input components
  • Chart components with duplicate x-axis values now display correctly

Table improvements

  • Long strings in cells no longer crash the table
  • Dropdown type columns now map a value of 0 correctly to its label
  • Numeric columns now align right by default
  • Queries triggered by Button type columns can now access the triggeredById and index fields to see which table and row triggered them

Editor power and quality of life

  • The releases modal now shows email addresses
  • Query editor now scrolls correctly to the bottom of the query list when a query is created
  • Deleting a query now also deletes other properties that reference that query
  • Queries now have a queryRunTime field that contains how long the query took to run
  • Added toggle to always show a hidden component in editor mode
  • Query success toasts now display the query name in editor mode
  • You can now add metadata to gRPC resource requests

Bug fixes

  • The Releases modal now displays the correct page (was off by 1)
  • Accessing currentRow in Button type columns now works as expected
  • List View components using row keys no longer crash
  • New queries no longer incorrectly display "Cannot find property 'get' of undefined"
  • Forms no longer crash when optional fields require validation
  • Text Input components now validate numbers with regex correctly
  • Text Input components now invalidate floats when an integer was required
  • Fixed a bug where connecting a Google sheets resource would occasionally fail
  • Added clarifications to GCS resources that failed silently on upload
  • Creating a folder named "root" no longer breaks your home page
  • The Resend invite button after inviting a user now works as expected
  • Fixed a bug that stopped you publishing the latest version of an app
  • The errors field is now correctly cleared after a query succeeds
  • Custom auth steps when setting up a REST/GraphQL resource now accurately show what variables you have access to
  • Queries no longer have isFetching set to true after completion
  • Fixed a bug where switching apps didn't stop queries on the previous page from running
  • Renaming a page now displays a reason if it failed
  • Copy pasting a Container component now also correctly copies its children
  • Marking a Text Input component as not required in a Form component now works as expected
  • Mappers in Chart components are now recalculated correctly when datasets are toggled

Form Generator

You can now generate a form directly from a database table! Drag out a Form component, click on the “Generate fields from a database” button, choose your table, and we’ll add a query and all the components you need to insert a row. You’ll be able to edit the query and each component just as if you’d created the whole form manually.

Release diffs

We’ve added the ability to view the diff between two different releases. If you want to know which lines in a SQL query are different, or which exact property you tweaked last week on that button, this is your feature.

Full screen editing

Need more room to write code? You can now press F11 to view code editors in full screen. This feature works anywhere you can use {{ }}.

SSO with OAuth providers

For on-premise deployments, you can now implement SSO with any provider that implements OpenID, such as Auth0 and Microsoft Entra ID. Check out the docs here.

Table improvements

  • Table component now handles non-array data correctly
  • Selecting a row in Table components now correctly updates the selected page
  • Table components using GraphQL server side pagination no longer infinitely loop
  • Table component pagination arrows now display correctly in Firefox
  • Table components columns with names that conflict with Table component properties now work correctly
  • Fixed Table components with inline editable columns that occasionally crashed

More improvements

  • Code completion for Table component column mapper settings is now based on the selected table row
  • Faster List View component rendering time
  • Faster load time for the Audit log page
  • Personal queries are now first in the Query Library

Bug fixes

  • Text Input components no longer default to an invalid regex check

  • Fixed an issue where pressing Tab would hide a Tabbed Container component’s tabs

  • Fixed certain cases where Text Input components inside containers and List views crashed

  • The JSON Schema Form component now lists all compatible SQL resources

  • Selecting a user in the Settings page no longer selects the wrong user

  • Fixed an issue where the query editor crashed with certain resources selected

  • Transformers no longer crashed the display when previewed

  • 0 is now considered a valid Text Input component value

  • Checkboxes inside Form components now clear when a form is cleared

  • App names with non-letter characters like !, #, or ? now display correctly in the editor

  • You can now dynamically add a key to a URL param for REST/GraphQL queries

  • Using /users/scheduled_sends in the Sendgrid resource no longer crashes the Query Editor

  • The visibleContainers field in the Container component now updates correctly on scroll

  • Changing the URL now triggers queries dependent on urlparams

  • Formatting SQL queries with && now works correctly