We’ve been silent for a while but fret not, we’ve been hard at work. We’ve deployed some larger features over the last month and a half, not to mention a whole lot of smaller bug fixes and improvements. As usual, please reach out if you have feedback or comments!
Wizard component (BETA)
We've released a beta version of the Wizard component, an exciting new addition to Retool's component library. The Wizard allows you to visually create multi-step workflows with branching logic, ideal for when you need to guide users through a specific sequence. This is an entirely new component in Retool, so we’d love to hear more about how it can better fit your workflows.
Plotly Chart component (BETA)
We’ve released a beta version of our new Chart component, powered by Plotly. This new component gives you the option of quickly generating a chart from a query or transformer. For more advanced charting needs you can toggle to directly edit Plotly JSON.
New out of the box features:
- Combine bar and line graphs in the same chart
- Dynamically group and aggregate data
- Use the chart’s selectedPoints property to dynamically update other parts of your app
Preview, Save, and Run Queries
The query editor now has improved clarity around previewing, saving and running queries. We've heard a lot of questions like: “Why does query1 run when I save, but query2 doesn’t?” and “Wait, the play button doesn’t actually run the query?” To help clear up this behavior, we've made the following changes:
- The preview button now has a clearer label to prevent confusion with actually triggering a query.
- The save button now has two states: “Save” and “Save & Run”. The state shown is tied to whether the query is set to run “automatically when inputs change” (Save & Run) or “only when manually triggered” (Save). In Retool, “read” queries default to always run when inputs change, while “write” queries will only run when manually triggered (e.g. by clicking on a button).
- Once a query has been saved, you’ll see a newly added run button. This will trigger the query to run once. (Helpful for debugging—no more having to add a button to your app just to test trigger a query!)
- Last but not least, we’ve moved the run query when setting to the top of the query editor, so it’s easier to predict the behavior of a query at a glance.
Retool now connects to gRPC based resources for on premise deployments. The connection supports unary requests for reading and writing (including with variables) with gRPC today. To setup your proto files and start making gRPC request start with the docs here.
SQL resource creation changes
Retool previously required you to set up two resources for SQL: one for reading and one for writing. We’ve simplified this so that one resource that can perform both reads and writes! This has been enabled for all SQL resources over the last few weeks. Check out the docs for a more detailed overview of the changes.
Configurable table button
You can now add a button to the table that can fire off any query of your choice. Often we’ve wanted a button that’s very table related but doesn’t quite fit into the existing toolkit, so we’ve added this button as a catch-all.
- App search on the homepage now also shows apps inside folders
- Added toggle to hide the submit button from Form containers
- Added name of editors in the History and Releases modals
- The search omnibox now de-prioritizes archived apps
- Added support for specifying ?_releaseVersion as a URL parameter
- Added the ability to customize the duration of query success/error notifications
- Added (back!) the ability to bulk invite users
- ListView components now support dynamic row heights and hiding components
- Add ability to delete notes in the Notes component
- Improved fuzzy search functionality for select components
- Added back Regex filter on TextInput components that stopped users from typing invalid characters
- Added the ability to set a start time for the Timer component and the ability to customize the value
- Added the ability to style the Toggle component as a caret
- Added a .select() method to Text Input components to select text from Run JS Code queries
- Added the ability to use allow-downloads with IFrame components
- Added the ability to group events by day in the Timeline component
- Added the ability to allow geolocation in the Custom Component's IFrame
- Added the ability to enable allow-same-origin in the Custom Component
- Added the ability render custom HTML inside the Select component
- CSV downloads now include the correct column names for renamed columns
- Added the ability to disable the save changes button
- Added the ability to view columns as radio buttons
- Added the ability to disable checkbox and radio style columns
- Fixed an issue where CSV exports now include all columns (instead of just those in the first row)
- Fixed an issue where manually triggered queries were not run when clicking the refresh button
- Fixed an issue where certain column names like “Disabled” broke the component
- Fixed issues where currentRow and self displayed the wrong value
- Fixed an issue where the “Server side paginated” field did not work as expected
- You can now access returned errors in the Error transformer. You can now return an object from the Error transformer
- Added the ability to specify user role for Snowflake connections
- Added the ability to query collection groups for Firestore connections
- Added in and array-contains-any queries to Firestore
- Added the ability to use BigQuery’s legacy SQL dialect
- Added KEYS, MGET, and HMGET to the available Redis commands
- Added the ability to use IAM roles for Athena and DynamoDB
- Added the ability to get, set and delete tags on S3 files
Auth improvements for REST/GraphQL
- Added the ability to verify a custom auth connection via a request
- Added the ability to create a custom flow for refreshing authentication
- Added the ability to automatically submit an OAuth form for REST/GraphQL queries
- Fixed a bug where paginated GraphQL queries were called repeatedly if they returned no results
- Fixed a bug where the HTML renderer in Select components didn’t work if values were objects
- Fixed an issue where Firebase queries didn’t allow selecting a collection ID
- Fixed an issue where Firestore queries did not work when using $ref in the request
- Fixed an issue where you could not call methods on components nested inside ListView components
- Fixed an issue where the Rich Text Editor component called the “On Blur” query on every keystroke if the component contained a URL
- Fixed issues where Select and Text Input components didn’t render correctly inside ListViews
- Fixed an issue where Containers inside ListView components didn’t render in the right order
- Fixed an issue where rejected promises returned from JS queries were not interpreted as errors
- Fixed an issue where ui:emptyValue in JSONSchemaForm components wasn’t being set correctly