Observable 2.0, a static site generator for data apps
Observable has released Observable Framework, an open-source static site generator for data apps that pairs Markdown-based pages with language-agnostic “data loaders” and browser-side JavaScript visualizations. Commenters highlight its “baked data” approach—precomputing and aggregating data at build time for fast, static dashboards—while probing its limits for real-time monitoring, row-level security, and very large datasets. Many compare it to tools like Evidence, Quarto, Tableau, and Streamlit, seeing it as a developer-focused, git-friendly option that leans on D3/Observable Plot and DuckDB, with a business model centered on optional hosted deployment and access control.
Overall reaction
- Many are excited; previous Observable users see Framework as a powerful, cleaner way to build data apps and dashboards.
- Some are relieved it decouples Observable from the hosted notebook site and embraces “files over app”.
- A minority are skeptical or confused by branding (“Observable Framework” vs just “Framework”, multiple “Observable” things).
Architecture & “baked data” model
- Core idea: static site generator for data apps where data loaders run at build time and emit files (often Parquet/CSV/JSON) via stdout.
- This “baked data” / “BI as code” pattern is praised for:
- Forcing clarity on what data is actually needed.
- Shifting heavy compute to build time, improving load times.
- Framework still allows client-side fetching or WebSockets for dynamic data; static snapshots are a recommended default, not a hard limit.
Interactivity, visualization, and libraries
- Observable Plot is positioned as the main charting layer; some users miss out‑of‑the‑box zoom/pan like Plotly.
- Plot supports rich marks (e.g., raster/contour/cell for heatmaps) but currently has limited packaged interactivity; zoom/brush are in progress.
- Framework is library‑agnostic: ECharts, Vega(-Lite), Plotly, D3, jsROOT, etc. can be used; examples added for ECharts and DuckDB.
- Some argue chart “grammars” (Plot, Vega) are conceptually stronger than chart-type libraries; others prioritize immediate interactivity.
Language & developer experience
- Frontend is vanilla JavaScript with a reactive runtime; many appreciate dropping Observable’s custom notebook syntax.
- Backend/data loaders are polyglot: any script or binary that writes to stdout (Python, R, Go, etc.).
- Concern remains that data scientists reluctant to use JS/Node/npm may resist adoption; examples and templates (CLI, GitHub, Codespaces) help onboarding.
Use cases and limitations
- Strong fit: dashboards, reports, documentation-like data apps with periodic refresh (cron/CD).
- Less ideal: real-time monitoring, training-time ML dashboards, highly ad hoc OLAP/pivot exploration, or strict row-level/customer-level security.
- Large data: pattern is to pre-aggregate into smaller Parquet snapshots and optionally query with DuckDB-Wasm on the client.
Integration, deployment, and business model
- Integration with existing static sites (Hugo, Jekyll, VitePress, Django) is currently via iframes or side-by-side hosting; tighter embedding is “unclear / future”.
- Hosting/compute and team-oriented features (access control, scheduled builds, monitoring) are the paid path; framework itself is open source.
- Some ask for clearer GitHub Actions examples and simple deployment recipes.