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

Changelog

Features, improvements, SDK releases, and more.

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

Filtered by tag:Product

Breaking changes:

  • As of October 31, 2024, you will no be longer use the hosted "Interval Cloud" service to access your apps. You must migrate to your own instance of Interval Server before this date.

New:

  • Interval Server has been released under an MIT license.
  • SDK v2.0.0 introduces a new required endpoint parameter to the Interval constructor. This endpoint is the URL where your Interval Server instance is hosted. For example: "wss://<YOUR INTERVAL SERVER URL>/websocket".

Interval SDK v1.5.0 includes two brand new I/O methods: io.input.slider for requesting a number within a range using a slider UI and io.display.html for rendering basic HTML content in your actions or pages.

Screenshot of a table with cells highlighted in different colors

Other updates & improvements

  • We added user.role and user.teams properties to ctx for the current user running the action or viewing the page.
  • We added a warnOnClose option to action definitions to opt into disabling warnings when leaving the page in a middle of a transaction.
  • We added support for SCIM directory user and group sync for SSO-enabled accounts.
  • We shipped many improvements to our reconnection logic, especially for background tabs, backgrounded transactions, and organizations with a large number of concurrent users.
  • We added logic to prevent sending multiple notifications if the server restarts while a transaction is awaiting input.
  • We added an initiallySelected prop to io.select.table to specify the initial selection state.
  • Loading APIs are now available in Page handlers.

We're also testing a new platform for writing, running, and sharing Interval actions in your browser. If you'd like to help us test it, try it out by joining the waitlist or stop by our Discord server and request access.

v1.1.0 of our TypeScript and Python SDKs adds more customization options for content in tables. Markdown is now supported in table cells, and you can use the new highlightColor prop to add color accents to individual cells. We also upgraded tables to support dynamic column widths, so table columns will automatically resize to fit their contents and fit more of your data on screen.

Screenshot of a table with cells highlighted in different colors

You'll find expanded Markdown support in other places, too, like the helpText prop on all components that support it. (Expanded Markdown support does not require an SDK upgrade.)

Screenshot of a date input with an inline markdown link in the help text

We've also improved redirect behavior in Pages and Actions, and we added a global onError handler that's perfect for logging or reporting to error services like Sentry. See the full v1.1.0 changelog for everything that's changed.

Other updates & improvements

  • The 'Go back' button in transactions now receives keyboard focus when tabbing through options.
  • We added a missing confirmation message after verifying your email address.
  • You can now switch between your organizations using the Cmd+K menu.
  • We removed log messages about missing columns when a table is empty.
  • You can now add Interval to your home screen on iOS and Android with a nice app icon and support for minimal-ui mode.
  • We fixed sticky table headers not working on some pages.
  • We removed double scrollbars in some places if your system uses persistent scrollbars.

v0.36.0 of our Node SDK was our final release of 2022 and it includes a handful of features you requested - including a new I/O method: io.display.grid for displaying collections of data like photos, cover art, and more.

A screenshot of a dashboard listing a Spotify account's recent likes in a grid layout.

This method includes settings for column width, image crop, aspect ratio, linking, and per-item dropdown menus. If you're currently using io.display.table for content with images (videos, blog posts, etc.) this might be a better fit for you!

A screenshot of a dashboard with blog posts arranged in a grid layout.

Code-based permissions

For users on our Teams plan and higher, you can now grant team-level access to actions and pages directly from within your app's code. If you're using Pages, permissions set at the page level will also apply to actions and pages nested within that page. Visit the docs to see how you can define permissions in code.

Interval Direct Connect

Connections between your app and your users' browsers are currently relayed through Interval, but soon we'll be removing this relay step to create a direct connection under the hood between your app and your users. We're still finalizing benchmarks, but the early results from our internal testing indicate that this will be the single biggest upgrade to the performance of Interval apps so far. 🚀

This new functionality is currently in private beta. If you'd like to try the Direct Connect beta, let us know and we'll enable it for your account.

Other updates & improvements

  • We've added isFilterable and isSortable props to io.display.table and io.select.table for disabling filtering and sorting if desired — this is particularly useful for tables with asynchronous data.
  • We've added a new "quiet" setting to the options for logLevel in the Interval client to reduce terminal console logging.
  • We're now catching and showing more errors in the dashboard UI to help you debug your code when something isn't working properly.
  • The string shorthand for columns and accessorKey values in io.display.table and io.select.table are now type checked against your input data.
  • Errors in asynchronous method state change handlers like io.display.table's getData function are now properly displayed in both the host terminal console and the web dashboard.
  • We've fixed a bug where secondary navigation links didn't link to the correct environment in non-production environments.
  • We've made it easier to copy your Personal Development Key from the empty state in Dev mode.
  • New users can now be pre-assigned to teams when inviting them to your organization.
  • You can now switch plans directly from the billing screen in your dashboard.
  • We've adjusted the font size in io.display.markdown to better match the rest of the dashboard.
  • Images are now supported in the dropdowns for io.select.single and io.search with multiple size options.

We're big fans of file based routing here at Interval, having used frameworks like Next.js and Remix in many of our own projects. With file based routing, adding new pages or actions to your app is as simple as creating a file and exporting some code from it. Your application perfectly mirrors your app's structure on the filesystem and you don't have to manually import code each time you want to add a page or an action.

Today, we're excited to bring file based routing to Interval as an experimental feature.

As you'd expect, Interval will recursively walk directories and detect your app's structure from the filesystem. To add actions and pages, just create a file with a default Action or Page export and Interval will handle the rest. Then, initializing your app is as easy as using the new routesDirectory property:

import Interval from '@interval/sdk/dist/experimental'
import path from 'path'

const interval = new Interval({
apiKey: '<YOUR API KEY>',
routesDirectory: path.resolve(__dirname, 'routes'),
})

interval.listen()

We've been using this internally and it very quickly replaced inline definitions as our go-to method for building apps with Interval.

For more, check out the file routing API docs.

A screenshot of a code editor using the new file routing API.

Custom environment colors

By popular request, we've added a more prominent bar across the top of the screen to help you differentiate between development and production environments, along with several color options to choose from.

A screenshot of the dashboard with a red bar across the top of the screen that says 'Production'.

Last week we shipped v0.32 of our Node.js SDK which includes two updates to our display components — both of which are excellent companions to our new Routing API.

First, there's a new io.display.metadata component for displaying a series of label/value data pairs in your choice of list, grid, and card layouts.

Second, we've made io.display.heading more powerful with some new props:

  • Level for setting the header size
  • Description for adding context to a section
  • Menu items for adding contextual buttons alongside the header

To show off these updates, here's a demo of an app that pulls in data for artists and tracks from the Spotify API:

Using the new updates in an app that browses artists and tracks from the Spotify API.

Join our Discord community

We've just launched our brand new community Discord where anyone can ask questions, submit feedback, share what you're building, and chat with our team. Stop by and say hello!

Today we're excited to announce the rollout of a brand new look for your Interval dashboard! Your actions will continue to look and function as they always have, but we've made a few noticeable changes to the surrounding chrome - and many more changes under the hood - to make your apps even more powerful and to pave the way for some big API updates.

A screenshot of the new dashboard layout.

The first thing you'll notice is that most of the Interval chrome is gone. Settings are now located in a single menu in the top right corner, allowing your app to take over the entire screen.

A screenshot of the new environment switcher.

We've also replaced the "Actions" and "Develop" menu items with environments named "Production" and "Development". Functionally, nothing has changed - Development is scoped to your personal Interval account, while Production is shared with the whole team - but we've found these labels to be more recognizable to new users. And if you're using custom environments, they'll appear in the same menu.

And finally, there's a brand new navigation bar across the top. We're handing the keys for that over to you with the new Router API.

Router API

While actions are the bread and butter of building with Interval, powerful internal tools may call for more sophisticated UIs and structure, such as dashboards, list and resource views, and hierarchical navigation.

Interval's Router API lets you build these more powerful features within your Interval app.

With the Router API you can:

  • Define top-level navigation within your organization's Interval dashboard
  • Group related actions to provide better structure and easier navigation
  • Create pages and list views with custom content for your team to be used as a launching point for other actions

The new dashboard was designed specifically for this new API, so we'd love for you to try it out. To get started, reply to this email, and we'll enable access for your account.

Note: Names and functionality of Router API methods are very likely to change.

Check out the docs to learn more about the new routing APIs.

Other bugfixes & improvements

  • We shipped io.confirmIdentity in SDK v0.30.0, allowing you to programmatically prompt for 2FA verification inside high stakes actions with a single line of code. (demo))
  • We added io.display.code to display code with syntax highlighting and a copy button inside your pages and actions.
  • io.group now accepts keyed objects, making it easier to grab a subset of keys from the response object.
  • Actions can now be marked as unlisted. You can still link to them from other actions, but they won't otherwise appear in the UI.
  • primary, secondary, and danger are available as button themes beginning with SDK v0.31.0.
  • Invitations are now sent automatically when adding new users to your organization, simplifying the process to a single step.
  • We fixed action links in dropdown menus so you can Cmd/Ctrl-click to open them in a new tab.
  • Pages and transactions now reload when search params change.
  • Group descriptions are now displayed in the UI.
  • We made the language more helpful when your app connects with an invalid or missing API key.
  • We improved the empty state for groups and pages without actions.
  • We now alert you to errors in your code in more places in the dashboard.
  • We fixed some loading errors encountered while switching between organizations and environments.
  • We improved access to nested pages and actions from the Cmd/Ctrl+K menu.

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 io.group.

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 io.display.video. 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 io.select.table 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 hello@interval.com 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 🙂

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.

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 io.group. 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 io.group, 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.

548 Market St PMB 31323
San Francisco, CA 94104

© 2024

Join our mailing list

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