Skip to main content
Big news! Interval has been acquired by Meter. Learn more →


Features, improvements, SDK releases, and more.

Get 1-2 emails per month with a roundup of product updates, SDK releases, and more.

Until today, all Interval actions have had the same blue 'Continue' button at the bottom of each form, resulting in suboptimal UX (and also some interesting workarounds!) in some cases.

Starting with our v0.27 of our Node SDK, you can now customize the label of that button, and change its color for additional caution, via

A form called 'GDPR Delete User' with a red button that says 'Delete user'.

New image & video I/O methods

We've added two new I/O methods to Interval: io.display.image and Both methods have multiple size options to choose from and support displaying media from a URL or a Buffer (which pairs nicely with our file upload API).

Code sample for io.display.image.

Other bugfixes & improvements

  • Tables with large amounts of data are now faster thanks to progressively fetching new data in the background.
  • Tables now display the total number of records in the UI and have larger previous/next buttons.
  • Transaction pages feature a new header with larger titles and breadcrumbs that makes navigating around your app feel more cohesive.

Interval now supports multi-factor authentication (MFA), also known as two-factor authentication, for added account security. MFA can be enabled for individual user accounts and can optionally be enforced for everyone in your organization. Visit the docs to learn how to turn on MFA for your account.

Customizable menus can now be added to rows in and io.display.table. These menus make it even easier to link multiple actions together and create advanced dashboards in Interval.

A screenshot of a dropdown menu in a table.

Dynamically adding & removing actions

SDK v0.25.0 also introduces methods for dynamically adding and removing actions after calling interval.listen(). For apps with a large number of actions, leveraging .add() will significantly reduce your app's startup time - something we've appreciated while working on our own internal tools in the Console.

This update also includes methods for dynamically adding and removing action groups. In case you missed it, action groups - introduced in v0.22.0, and available inside the experimental namespace - allow you to construct arbitrary path-like hierarchies to keep your actions organized.

A screenshot of action groups in the Interval dashboard

Performance improvements

Speaking of performance upgrades: this week we shipped a handful of changes across Interval that combine to make your apps feel more responsive, such as adding faster data parsing, optimizing page-to-page navigation, and reusing the connection between Interval and your app where possible.

Frontend performance tuning is unfortunately an oft-ignored aspect of web development. But for apps built with Interval, it's our job to worry about the frontend, not yours - which means we're constantly working to make your user experience better, without any additional effort on your part 🙂

Everything we build at Interval is designed to complement your existing development workflows. It's common for these workflows to include deploying to multiple environments like 'test' or 'staging'. And after many requests and lots of coding, today we're excited to share that support for multiple environments in Interval is in beta!

A screenshot of the new environment switcher in the dashboard.

When you add a new environment to your dashboard, you'll see a new menu in the top-left corner where you can switch between environments. (or, pro tip: you can switch from the new ⌘+K menu, too.) Each environment has its own Dev mode and Live mode, transaction history, and API keys, giving you plenty of options to set up your tools in whichever way suits your organization.

We'll be rolling out this update to everyone in the coming weeks, but if you want to skip the line, shoot us an email at and we'll enable the beta on your account.

Other bugfixes & improvements

  • We fixed an error when deleting teams with action permission restrictions.
  • We fixed a bug where slugs instead of names appeared for some actions in the new command bar.

We've also done some housekeeping in our onboarding flow. We sprinkled in more links, contextual information, and definitions to help orient you as you create your first action. If you haven't given Interval a shot yet, now's a great time to try it out 🙂

Breaking changes:

  • is now
  • io.experimental.time is now io.input.time.
  • io.experimental.datetime is now io.input.datetime.


  • io.input.url is a new method that prompts the user for a URL and returns a JavaScript URL object.
  • All input and select I/O methods now accept an optional disabled prop, which disables the input in the UI.
  • io.experimental.input.file now accepts an optional generatePresignedUrls() function that can be used to upload files directly to your own S3-compatible cloud storage (example).

We're big fans of keyboard navigation at Interval, so this week we're happy to share that we've added a command bar to help you quickly navigate around the dashboard. Hit ⌘+K on Mac or Ctrl+K on Windows/Linux to bring it up:

Our new Cmd/Ctrl + K menu

From the menu you can quickly navigate to any dashboard page, run actions, and quickly access the docs. You can also submit feedback to the team from anywhere in the dashboard - and if you have any, we'd love to hear from you!

Send us feedback straight from the dashboard

We've heard from many of you that Interval has helped you create uniquely powerful apps that simply aren't possible with other platforms. Today we're excited to showcase some of that power through our brand new examples gallery.

Our first six examples showcase a range of Interval-enabled functionality, including migrating and editing user data, connecting to 3rd party APIs, monitoring metrics with Slack notifications, and even comparing visual differences between screenshots.

A screenshot of a user settings form from one of our examples.

Each example includes sample code, screenshots, video demos, and a step-by-step walkthrough of how to build the tool. You can also try out any of these for yourself by running npx create-interval-app@latest and selecting any of the templates from the menu.

Check out the gallery here.

Other bugfixes & improvements

  • We released v0.23.0 of our Node SDK this week with a handful of small improvements, including support for more primitives in our select APIs and a new ctx.action.url prop that's useful for building OAuth flows.
  • We improved the layout of props and return types in our docs (example).
  • You can now download the output of io.display.object as a JSON file.
  • We fixed the background color of code blocks in io.display.markdown.
  • Linking to the same action from within itself will now begin a new transaction.

Breaking changes:


  • ctx.action now contains a url property containing the absolute URL to the currently running action.
  • and now support numbers, booleans, or Date objects as option labels and values.
  • now supports numbers, booleans, or Date objects as result labels.


  • Clicking an which links to the currently running action will now create a new transaction (including any URL params, if specified).

Version 0.22.0 of our Node SDK features an all-new input validation API. You can now provide custom validation functions by chaining a .validate() method to individual I/O inputs or an In true Interval spirit, these validation functions are just plain old JavaScript/TypeScript functions that are defined and executed in your codebase.

Below is an example of our validation API being used to confirm that an email is available by running a query in our app's database:

A code sample that checks email address availability

You can also combine multiple values from a group:

A code sample that checks inventory availability

This is a huge upgrade to our developer experience that will help you create even more robust apps with clear error messaging for your users.

Check out the validation docs to learn more.

Nested actions beta

For those of you with growing libraries of actions, we're excited to say that nested actions are now in beta! We'll be rolling this out to all users soon, but if you want to become an early adopter and provide input on the API, reply to this email and we'll add you to the beta.

A screenshot of nested actions in the Interval dashboard

Other bugfixes & improvements

  • We've added documentation for, which allows you to combine multiple I/O method calls into a single form.
  • Our Slack integration now supports sending messages to private channels.
  • Archived actions that haven't been removed from your deployment yet are now shown in a separate, smaller area in the dashboard.
  • We fixed some text wrapping issues for actions with long names.

We just introduced an input.file method under the experimental flag - perfect for uploading images, text, JSON, and other types of files to use in your actions. Check out the input.file docs to learn more.

Screenshot of file upload UI

Other bugfixes & improvements

  • Fixed a bug improving reliability for hosts re-connecting to the Console.

Tables in Interval gained filtering, sticky column headers, and a more compact layout for increased data density - all great upgrades for working with large sets of data:

New filtering UI for tables

Serverless beta

For those of you with serverless architectures, we've begun testing support for deploying Interval to serverless functions. Visit the docs for more info, or reply to this email to be added to the beta.

Scheduled actions beta

Now you can easily configure Interval actions to run on a schedule - no cron config required. We'll be rolling this feature out to existing users over the next few weeks; reply to this email to get early access.

Other bugfixes & improvements

  • Fixed a loading state flash when clicking 'New Transaction' in the console after completing a transaction.
  • BigInts can now be used within io.display.object and in action return values.
  • We published guides for deploying on popular web services including Render, Railway, and Google Cloud.

Breaking changes:

  • The undocumented io.experimental.findAndSelectUser IO method has been removed in favor of the more powerful



  • TypeScript will now properly indicate when an IO method call requires a properties argument (for example io.display.table). Thanks to Petr for reporting this bug!

Breaking changes:


  • Adds an experimental io.experimental.input.file method. This method replaces our previous toUrl method. This new API returns an object with methods that allow you to get a URL that points to the uploaded file or the contents of the file as an object, a buffer, or a string.
  • BigInt objects can now be used within io.display.object and in action return values.

Especially while APIs are under an experimental flag, we encourage you to leave feedback to help shape Interval's future.

548 Market St PMB 31323
San Francisco, CA 94104

© 2023

Join our mailing list

Get 1-2 emails per month with a roundup of product updates, SDK releases, and more.