New:
- Added new io.input.slider IO method to
request a number with a range slider control.
- Added new io.display.html method to display
rendered HTML to the user.
- Added
user.role
and user.teams
properties to ctx for the current user running the action or viewing the page. - Added
warnOnClose
property to the action
definition, set to false
to suppress the default
behavior of warning the user when leaving or restarting an in-progress
transaction.
New:
- Added
initiallySelected
prop to
io.select.table to specify the initial
selection state.
New:
- Exposed
.ping()
method on the Interval class instance for performing health checks.
New:
- Added ctx.redirect() support to Page handlers.
- Added
replace
property to
ctx.redirect() to replace the current
entry in the user's history stack, like history.replaceState
. - Added
highlightColor
property to
io.display.table and
io.select.table's renderCell
method to
highlight a cell's background and text colors. - Added a global
onError
callback to the Interval constructor, perfect for logging or reporting to error services. - Page handlers can now return
undefined
or None
to conditionally opt out
of custom layouts and fall back to rendering the default index. - Markdown is now supported in io.display.table and
io.select.table cells and in any input IO methods'
helpText
properties.
Fixed:
- Improved retry and timeout behavior, preventing large payloads from
saturating connection to Interval.
- Fixed issues with Pages showing up in the dashboard sidebar in some cases
when they shouldn't.
- Fixed .validate() calls when chained
after .withChoices() calls.
Breaking changes:
- The
ctx.environment
property now shows the specific environment that the
Action or Page is running in, instead of just "live" or "development".
New:
- Added
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. - Added support for ECMAScript Modules (ESM) when using file-based routing with
routesDirectory
with Node.js.
Fixed:
- The
ctx.action.url
property and Interval client startup message now
display the correct URL for custom
environments. - Fixed an issue with the dashboard sidebar not showing up for some Page
configurations.
Breaking changes:
New:
- Added support for a preview UI that preserves action context across IO method
calls and removes the need to "Continue" for display-only informational
renders.
- Added the
.safelyClose()
method to Interval to safely shut down a deployment without losing work or interrupting users. - The
defaultValue
property for all supported IO methods now also accept null
in addition to undefined
. - Added copy and download buttons to io.display.code,
io.display.object, and code blocks in
io.display.markdown.
- Added inline IDE documentation to IO methods.
Fixed:
- Fixed an issue with some userland errors not being surfaced in
Pages.
- Many small fixes and UI improvements!
New:
- Added the
.multiple()
chained method to io.search and io.input.file, which allows accepting multiple values in a single input. - Added optional
defaultValue
property to io.search.
Fixed:
- Fixed a phantom import which caused issues in some non-hoisting package managers like pnpm.
New:
- Added io.display.grid method for visually focused collections of data, usually with an emphasis on images.
- Added
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. - Added quiet logging level to the Interval client to reduce terminal console logging, enable by adding
logLevel: "quiet"
property to the Interval
constructor. - The string shorthand for
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:
New:
- Pages, a lightweight way to display data to complement actions, are now in public beta!
- Introducing Interval Direct Connect! In all previous Interval versions connections between your app and your users' browsers are relayed through Interval. We're removing this relay step, allowing for 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.
Breaking changes:
- When you update your SDK version, you'll no longer be able to set permissions for your actions through the dashboard. Instead, you can now define them directly in your code. Any permissions you previously set through the dashboard will continue to function normally.
New:
Breaking changes:
- The
io.experimental.input.file
method has been promoted to io.input.file.
New:
- Added optional
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:
- Fixed an issue with io.search methods inside of an io.group sometimes throwing an error.
New:
- Added new io.display.metadata method for displaying a series of label/value data pairs in several available layouts.
- Added new
level
, description
and menuItems
properties to
io.display.heading.
New:
- The
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. - The io.display.table method now accepts an optional
getData
property for fetching table data asynchronously in advanced use cases.
New:
- The io.group method now accepts objects with string
keys as its first argument, allowing return value retrieval by key instead
of index.
- Adds io.confirmIdentity method to request
re-authentication before performing sensitive work within actions.
New:
- Adds new io.display.code method to render source code with syntax highlighting.
- Cells in io.select.table and io.display.table can now contain inline images by returning an object containing an
image
property from the renderCell
method.
New:
- Adds new io.display.image method as a
first-class way to display images.
No more needing to fall back to markdown!
- Adds optional secondary argument to io.group to
customize the continue button label and theme.
New:
- Adds
defaultPageSize
property to io.display.table and
io.select.table to customize the default number of items per page. - Adds ctx.redirect() method to redirect the
user to another action or external URL in their current window.
Breaking changes:
- The experimental
.use()
method for adding action groups has been renamed to .addGroup()
.
New: