🌐 Hosted instances. Try Curio in your browser without installing anything. Stable at curio.urbantk.org, and the latest
mainbuild at curio-dev.urbantk.org. Sign in to save dataflows; guests can browse shared examples read-only. To run your own server, see the deployment guide. For local deployment, see installation and usage guide. Local installs require Python 3.12.
Curio is a framework for collaborative urban visual analytics that uses a dataflow model with multiple abstraction levels (code, grammar, GUI elements) to facilitate collaboration across the design and implementation of visual analytics components. The framework allows experts to intertwine preprocessing, managing, and visualization stages while tracking provenance of code and visualizations.
|
Provenance-aware dataflow Track transformation and visualization steps |
Linked interactions Data-driven cross-view filtering and brushing |
Autark + Vega-Lite First-class 2D and 3D maps via Autark, plus Vega-Lite charts |
|
Agent Catalog Attach AI agents to a node, a connection, or the whole dataflow |
Jupyter Notebook import Bring existing notebooks into Curio dataflows |
Scenario-oriented analyses Multi-user what-if exploration with branching dataflows |
|
One-click Node Catalog Add packaged nodes from a catalog, or author your own from the canvas |
Composable node packages Mix built-ins, community packages, and your own in a single dataflow |
Reproducible & shareable Versioned, forkable .curio.zip archives pin a workflow's exact node set
|
|
One-click Data Catalog Add datasets to a dataflow, or publish your own for everyone on the deployment |
Bring your own data Import CSV, GeoJSON, Parquet, GeoTIFF, Shapefile, or an OSM PBF extract |
Outputs become inputs Node results are saved as computed datasets, with lineage back to the node that made them |
A lot has landed since v0.5. Highlights:
- 🌐 Hosted instances. Public deployments at curio.urbantk.org (stable) and curio-dev.urbantk.org (dev), plus a deployment guide for self-hosting behind HTTPS.
- 📦 Node Catalog. Every node now lives in a manifest-driven package, and you can freely mix built-ins, community packages, and your own in a single dataflow. Add ready-made packages from the catalog with one click, save a canvas node directly into a (new or existing) package via Save as package node, import
.curio.ziparchives shared by collaborators, or fork an existing package to extend it. Per-package metadata (description, license, README, permissions) is editable from the catalog drawer; Python / JS dependencies are detected automatically from each template's source. Packages are versioned and pinnable, so a workflow can declare the exact node set it depends on, which gives reproducibility for shared research artefacts. See the Node Catalog guide. - 🗂️ Data Catalog. Datasets get the same treatment as nodes: browse and add them to a dataflow, import your own files (CSV, GeoJSON, Parquet, GeoTIFF, Shapefile, or an OSM PBF extract that is split into per-layer datasets), and publish them for everyone on your deployment. Drag a dataset onto the canvas and Curio writes the loader code for you. Every node run can also save its output as a computed dataset, with lineage back to the node and dataflow that produced it, so any intermediate result becomes a reusable, previewable input. See the Data Catalog guide.
- 🤖 Per-user LLM configuration. Connect Curio to OpenAI, Anthropic, Gemini, or a custom endpoint, configurable per user.
- 🗺️ Autark integration. A single
Autarknode whose UrbanSpec combines OSM/PBF data loading, GPU compute (WGSL), and map / plot rendering, with JS Computation I/O routed through Python DuckDB. - ⚡ JavaScript Computation node. Run Node.js code in a sandbox subprocess alongside Python nodes.
- 🧬 Provenance refactor. Provenance is now tracked in the dataflow JSON itself, with the visualization rebuilt on React Flow (no separate provenance DB).
- 📓 Jupyter ↔ dataflow conversion. Initial bidirectional notebook conversion support.
- 💾 Auto-save. With unsaved-changes guard and a save status icon.
▶️ Play All & auto-play ancestors. Execute nodes in topological order, or automatically run upstream nodes when a downstream play button is clicked.- 👥 Session-level multi-user isolation. Across backend, sandbox, and frontend.
- 📊 Dashboard mode toggle. Switches mode while preserving node state, edges, and positions.
- 🦆 DuckDB-native artifact I/O. Faster, type-safe data exchange between sandbox and backend.
- 🖼️ Project thumbnails in the project list, plus the
--with-examplesflag to seed example projects on startup, and toast notifications replacing browser alerts. - 👥 Real-time collaboration. Opt-in via
curio start --collab. Co-edit a project with presence, soft locks, and shared execution output. See docs/COLLABORATION.md.
See the full release notes for more. To get started, follow the usage guide or jump into the quick start tutorial. If you'd like to contribute, read the contribution guide.
Curio: A Dataflow-Based Framework for Collaborative Urban Visual Analytics
Gustavo Moreira, Maryam Hosseini, Carolina Veiga, Lucas Alexandre, Nico Colaninno, Daniel de Oliveira, Nivan Ferreira, Marcos Lage, Fabio Miranda
IEEE Transactions on Visualization and Computer Graphics (Volume: 31, Issue: 1, January 2025)
Paper: [DOI], [Arxiv]
This project is part of the Urban Toolkit ecosystem, which includes Autark. Curio is a framework for collaborative urban visual analytics that uses a dataflow model with multiple abstraction levels to facilitate collaboration across the design and implementation of visual analytics components. Autark is a flexible and extensible visualization framework that enables the easy authoring of web-based urban visualizations.
For detailed instructions on how to use the project, please see the usage document. To build a node of your own, follow the authoring nodes guide. To install, fork, or publish node packages, see the node catalog guide; for datasets, see the data catalog guide. The example gallery collects 16 worked examples, from Vega-Lite dashboards to GPU-accelerated Autark maps. Each one has a dataflow you can import and a step-by-step walkthrough, and they are seeded into the hosted instances, so you can open them without installing anything.
🐳 Curio supports a Docker-based setup for easier installation and orchestration of all components. See the usage guide for instructions on running Curio with Docker.
🌐 To host a multi-user instance on your own server with HTTPS, see the deployment guide.
If you'd like to contribute, see the contributions and architecture documents for guidelines.
@ARTICLE{moreira2025curio,
author={Moreira, Gustavo and Hosseini, Maryam and Veiga, Carolina and Alexandre, Lucas and Colaninno, Nicola and de Oliveira, Daniel and Ferreira, Nivan and Lage, Marcos and Miranda, Fabio},
journal={IEEE Transactions on Visualization and Computer Graphics},
title={Curio: A Dataflow-Based Framework for Collaborative Urban Visual Analytics},
year={2025},
volume={31},
number={1},
pages={1224-1234},
doi={10.1109/TVCG.2024.3456353}
}
Curio is MIT Licensed. Free for both commercial and research use.
Curio and the Urban Toolkit have been supported by the National Science Foundation (NSF) (Awards #2320261, #2330565, and #2411223), Discovery Partners Institute (DPI), and IDOT.

