Hosted notebooks: marimo in the browser or on cloud GPUs, billed per minute
app.nz notebooks run free on Pyodide in your browser or on per-minute CPU/GPU machines that stop themselves when idle. Plus SQLite, Parquet, and agent-trace dataset viewers with HTTP range reads.
Notebooks on app.nz run in two places, and you pick per run:
- Your browser, free. Cells execute on Pyodide (Python + pandas compiled to WebAssembly). No signup for the examples, no server, no queue — the compute is your own device.
- A cloud machine, per minute. One click provisions a dedicated CPU or GPU box (Hetzner or RunPod) running marimo, the reactive notebook that stores as plain Python. You are billed only while it runs, and it stops itself when idle.
Notebooks are marimo .py files — git-diffable, runnable as scripts, and portable between both runtimes.
Pricing that reads like a receipt
Machine rates are the provider price plus a flat platform margin (20% on GPU pods, 40% on Hetzner CPU boxes to cover the smaller absolute prices). GET /api/notebooks/pricing returns every machine with its hourly rate and credits-per-minute; the same numbers render in the session picker. A cpx21 CPU box is about a cent an hour; an RTX 3090 is ~$0.26/hr.
Sessions are metered per minute against your credit balance while the machine is up. Idle sessions auto-stop (default 30 minutes), and a session hard-stops when the balance runs out — there is no way to leave a GPU running over a weekend by accident. Storage is ~$0.02/GB-month, accrued daily across your datasets and notebooks; small projects effectively store free.
Datasets are first-class
Uploaded datasets now go beyond CSV/JSON:
- SQLite `.db` files — we read the schema, table sizes, and a sample server-side; in the browser, the SQL console queries the file with HTTP range requests (sql.js-httpvfs), so a 200 MB database never fully downloads.
- Parquet — schema and row counts come from the footer, previews stream with ranged reads (hyparquet).
- JSONL — plain line-delimited records get a table; files that look like agent traces (role/tool/tokens/ms keys) get a dedicated trace viewer: tool-call histograms, token and latency totals, and a step timeline.
Every dataset still generates a starter marimo notebook that loads it with pandas — now with the right reader for each format (read_parquet, read_json(lines=True), sqlite3).
Examples to fork
The notebooks page ships with Kaggle-style starters — Titanic survival EDA, California housing prices, and an agent-trace analysis — all runnable in the browser immediately, all forkable into your account.
CLI
app notebook create "fraud analysis"
app notebook push nb-1a2b3c4d analysis.py
app notebook run nb-1a2b3c4d --machine gpu-rtx3090
app notebook sessions nb-1a2b3c4d
app notebook stop <session-id>The runtime image is our marimo build (appnz/appnz-marimo) with pandas, polars, duckdb, pyarrow, matplotlib, plotly, altair, and scikit-learn preinstalled.