New:
- Exposed
.ping()
method on the Interval class instance for performing health checks.
Features, improvements, SDK releases, and more.
Get 1-2 emails per month with a roundup of product updates, SDK releases, and more.
New:
.ping()
method on the Interval class instance for performing health checks.New:
ctx
loading API
(ctx.loading.start, ctx.loading.update, and ctx.loading.completeOne)
are now available in Page
handlers.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.
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.)
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.
minimal-ui
mode.New:
replace
property to
ctx.redirect() to replace the current
entry in the user's history stack, like history.replaceState
.highlightColor
property to
io.display.table and
io.select.table's renderCell
method to
highlight a cell's background and text colors.onError
callback to the Interval constructor, perfect for logging or reporting to error services.undefined
or None
to conditionally opt out
of custom layouts and fall back to rendering the default index.helpText
properties.Fixed:
Breaking changes:
ctx.environment
property now shows the specific environment that the
Action or Page is running in, instead of just "live" or "development".New:
withChoices()
chained method to
io.group and other IO methods to
allow for customizing the "Continue" buttons to enable branching logic and
more advanced workflows. See Submit buttons for more
information.routesDirectory
with Node.js.Fixed:
ctx.action.url
property and Interval client startup message now
display the correct URL for custom
environments.Breaking changes:
.close()
method in the Interval class has been renamed to .immediatelyClose()
for clarity.interval.actions.enqueue()
and interval.actions.dequeue()
methods have been moved to simply
interval.enqueue()
and interval.dequeue()
respectively.title
property in ctx.loading.start and
ctx.loading.update has been renamed to label
for consistency.title
property in the return type of
io.display.grid renderItem
function has been renamed to label
for consistency.New:
.safelyClose()
method to Interval to safely shut down a deployment without losing work or interrupting users.defaultValue
property for all supported IO methods now also accept null
in addition to undefined
.Fixed:
New:
.multiple()
chained method to io.search and io.input.file, which allows accepting multiple values in a single input.defaultValue
property to io.search.Fixed:
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.
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!
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.
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.
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."quiet"
setting to the options for logLevel
in the Interval client to reduce terminal console logging.columns
and accessorKey
values in io.display.table and io.select.table are now type checked against your input data.getData
function are now properly displayed in both the host terminal console and the web dashboard.New:
isFilterable
and isSortable
props to io.display.table and io.select.table for disabling filtering and sorting if desired β this can be useful for tables with asynchronous data.logLevel: "quiet"
property to the Interval
constructor.columns
and accessorKey
values in io.display.table and io.select.table are now type checked against your input data. Rest assured knowing that your columns are defined in your data!Fixed:
getData
function are
now properly displayed in both the host terminal console and the web dashboard (#19).New:
Breaking changes:
New:
Breaking changes:
io.experimental.input.file
method has been promoted to io.input.file.New:
image
property support to io.select.single's options
and io.search's renderResult
output, which allows customizing the image's size and alt
tag (replaces the now-deprecated imageUrl
property).Fixed:
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.
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.
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:
To show off these updates, here's a demo of an app that pulls in data for artists and tracks from the Spotify API:
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!
New:
level
, description
and menuItems
properties to
io.display.heading.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.
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.
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.
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:
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.
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))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.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.New:
columns
object in io.display.table and io.select.table now accept
an accessorKey
property, allowing renaming column names with shorthand
key-based access instead of needing to specify a renderCell
callback.getData
property for fetching table data asynchronously in advanced use cases.New:
New:
image
property from the renderCell
method.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
.
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).