Early access is now available for Observable Canvases, a collaborative, visual medium for exploring, analyzing, and communicating with data. Learn more
Subscribe to release notes via RSS, or follow @observablehq on X to keep up to date with everything we ship.
Early access is now available for Observable Canvases, a collaborative, visual medium for exploring, analyzing, and communicating with data. Learn more
We are deprecating building and hosting data apps on Observable Cloud on the following timeline.
On April 15 (today), we are discouraging deploying new data apps to Observable Cloud by hiding data app-related pages in the Observable workspace for users who do not already have a data app hosted on Observable Cloud. These users will still be able to navigate to data app-related pages directly, and to deploy new data apps from the command line.
On May 15 (in one month), any users that do not already have a data app hosted on Observable Cloud will no longer be able to deploy new data apps.
On October 15 (in six months), or at the end of your Enterprise customer contract if it is later, we will discontinue building and deploying of data apps to Observable Cloud. We will continue serving traffic to data apps hosted on Observable Cloud until at least this date.
If you are a current Observable Cloud customer, we encourage you to migrate any Observable-hosted data apps to your preferred static site hosting provider at your earliest convenience. You can host data apps built with the open-source Observable Framework on a wide variety of providers, including GitHub Pages, Render, Vercel, Cloudflare Pages, and Netlify; see also our guide on automating deploys on GitHub. If you have any questions or concerns, please email support@observablehq.com. After migrating your data app to a new provider, please contact support if you would like us to set up a redirect from Observable Cloud.
For more context on this deprecation, please read our blog post about what’s next.
For Enterprise workspaces, Observable Cloud now lets you embed components from your Observable Framework data apps into other websites and applications. Learn more in the documentation.
Export JavaScript modules to power interactive components in other apps.
Export static files (like SVG, PNG, CSV, or JSON) that update whenever your app builds.
Configure CORS to choose which domains can embed your components.
Configure URL signing keys to securely embed private components.
View analytics about which exports are being used.
Also, for all users:
The “Analytics” tab in data app settings is now called “Pages”.
Data app sharing settings have been consolidated in the new “Access” tab.
When new users sign up, it’s easier to join or create a workspace at the same time.
DuckDB 1.1.1 and DuckDB-Wasm 1.29.0! 🐤
Support for, and self-hosting of, DuckDB extensions! 🐤
Observable Runtime 6.0.0 for faster async (e.g., DuckDB) reactivity 🏃💨
Support secure sharing of private exported modules on Observable Cloud 🔒
Support analytics of parameterized routes & exported modules on Observable Cloud 📊
Deprecate cleanUrls in favor of preserveIndex and preserveExtension to support S3-like hosting
Fix automatic cleaning of dist
when building on Windows
Add explicit <html>
, <head>
, and <body>
tags to generated HTML
Suppress checkboxes on tables in SQL code blocks
Fix resolution of absolute paths in SQL front matter
Avoid a top-level await bug on Safari in SQLite
Fix importing of npm:sql.js
by adding an ES module export shim
Fix resolution of absolute global imports
Fix deduplication of resolved imports
Fix parameterized routing when a parameter value is its name in brackets
Support the NO_COLOR
environment variable (via picocolors)
Remove automatic redirect to strip basic authentication
Fix updating the app title when deploying to Observable Cloud
Various documentation improvements
See release notes on GitHub for more details.
Exported modules for embedded analytics! 🎉
Exported files for hotlinking images (and more) 🖼️
JSR (jsr:) imports for the JavaScript Registry 📦
New home config option for more sidebar customization, such as a logo 🏠
Redesigned top-fixed header 💅
Redesigned center-column layout on wide screens →←
Enable CORS on the preview server with --cors
Allow import.meta.resolve
to be used for local files
Favor
observablehq:stdlib
over npm:@observablehq/stdlib
Detect broken links during build
Detect missing files during build
Detect file name conflicts during build
Fix crash during preview with temporary files (e.g., Vim)
Fix content hashes for modules that import builtins
Fix reactivity during preview for data loaders from modules
Fix reactivity during preview for parameterized modules
Use registry.npmjs.org instead of data.jsdelivr.com to resolve npm package versions
See release notes on GitHub for more details.
You can now import an existing Observable Framework repository from GitHub to create a new data app on Observable without having to go through the command line. Click “+” in the upper right, then “New data app”, or click here.
The creator of a data app will now receive an email notification if a build fails. If the build was initiated manually by clicking “Deploy”, whoever clicked it will be notified, too.
We've renamed “Likes” to “Stars”. They function the same as before, just with a fresh name. Starred notebooks are found on the workspace’s “Starred” page or in your personal area; starred data apps are pinned to the top of the data apps list.
Update: As of April 15, 2025, Observable Cloud has been deprecated. Existing instances will continue to function, but new instances cannot be created. Deploy your Observable Framework data app to Observable Cloud to run your data loaders automatically in the background so your dashboards are always fresh and fast. Read more in our founder Mike Bostock’s blog post.
Deploy from the cloud on schedule, when you push new code, or manually.
Secrets let you securely give data loaders access to your private data.
Schedules let you define how often to rebuild your app.
GitHub integration keeps your app in sync with your repository.
Segmentation (in beta) lets Enterprise customers build parallel versions of their app for different viewer segments.
Enterprise customers can talk to us to configure an on-premises environment to take advantage of these features without their data ever leaving their system. Contact sales@observablehq.com to get started or to upgrade.
Observable Framework projects are now called “data apps.”
The site navigation has been reorganized into “Data apps,” “Notebooks,” “Team,” and “Settings” (⚙). Schedules, secrets, databases, and embed keys (formerly “notebook keys”) are now under “Notebooks.” Recent activity, members, and groups are now under “Team.” “Settings” now covers controls, like billing and privacy, that are for workspace owners only.
You can see which notebooks you’ve liked within the current workspace. You can also still see your likes across all workspaces (alongside personal settings) if you click your profile picture in the upper righthand corner.
The new “Help” menu in the upper righthand corner consolidates links to get support, read documentation, and see examples.
Parameterized routes for dynamic routing! 🎉
Page loaders for server-side rendering! 🚀
TypeScript fenced code blocks and modules! 🤓
FileAttachment
now exposes a file.size
property.
The new globalStylesheets
config option gives more control over styling.
The build
command now empties the output root before building.
The convert
command now outputs to the source root by default.
Fix rendering of command-line select prompts with many choices.
Inputs.file
now supports the file.href
property.
Pages now include a <meta name="generator">
tag.
Use CREATE TABLE
for small Parquet files with DuckDBClient.of
.
Fix building when SQL front matter refers to a remote file.
New guide on converting notebooks and the convert
command!
loader-bigquery
- Load data from Google BigQuery (Thanks, @dirkbosman!)
datawrapper-api
- Embed a Datawrapper chart (Thanks, @palewire!)
See release notes on GitHub for more details.
Allow opt-out of link normalization via <a href rel="external">
Fix crash attempting to preserve expanded state.
Fix content hashes of global imports in _observablehq
, _npm
, and more.
Optimize resize
to ignore height changes for unary render functions.
Improve slugify algorithm used for Markdown header anchors.
See release notes on GitHub for more details.
Add the waffle mark 🧇 for comparing countable quantities.
Add support for GeoJSON data and GeoJSON property shorthand to all marks.
Add support for the tip option to the geo mark (via an implicit centroid transform).
Add support for Apache Arrow as native data, allowing channel shorthand.
Add per-side and per-corner rounding options (r, rx1, ry1, etc.) to rect-like marks.
Add className mark option.
Add differenceX and shiftY.
Change the tip mark to ignore channels of literal color values.
Optimize clip path rendering.
Fix marker options on lines with variable aesthetics.
Fix the default plot height when a projection domain is set.
Fix the default plot height when the ordinal y scale domain is empty.
Fix the Voronoi mark with the pointer transform.
Fix the Voronoi mark with non-exclusive facets.
Fix detection of date columns with Apache Arrow data.
See release notes on GitHub for more details.