A fenced code block in a page becomes a cell you can run. The code stays plain Markdown; outputs, tables and charts are saved with the page. Everything runs in a sandbox on your device.
A Vellum page with a JavaScript cell that shares a table and a SQL cell that sums it, next to the page’s Markdown.
Code that lives in your pages
Write a fenced code block with a language, as you would on GitHub or in Obsidian. In the reading or split view it becomes a cell with a Run button. The code stays in the page’s Markdown, so pages stay portable; what a cell prints, the tables it returns and the charts it draws are saved with the page and come back when you reopen it.
Each language downloads the first time you run it (from a few hundred kilobytes for Lua or JavaScript to a few dozen megabytes for Rust), then works offline. Settings → Code runtimes downloads them ahead of time, for planes and trains.
Code runs in a sandboxed frame with one worker per page and language. It can’t read the app, your other pages or the network: cells have no network access unless you allow it for that page.
Work like a notebook
Run all, run the cells above or below, restart the runtimes and run everything again, clear outputs.
Insert, move and delete cells from the cell menu, each one undoable step. Outputs follow their cell when it moves.
Stop interrupts a running cell and keeps its variables; if the code doesn’t stop within 3 seconds, the runtime is restarted. Every run has a time limit.
Variables lists every value your code has made, with its type and a summary.
Explain and Fix: the optional on-device assistant explains a cell or suggests a fix you accept or reject as a diff.
Share data between languages
Cells in one page can pass data to each other across languages: share(name, value) in one, use(name) in another. Tables arrive as tables: share rows from JavaScript, then query them in SQL.
```js
share("runs", [{ month: "Jan", n: 4 }, { month: "Feb", n: 7 }])
```
```sql
select sum(n) as total from runs;
```
Input, files and packages
Cells can ask for input (input(), prompt(), readline) and wait for your answer in the page.
Files attached to the page are there by name: pd.read_csv("sales.csv"). Files a cell writes can be saved to the page or downloaded.
Python comes with NumPy, pandas, SciPy, scikit-learn, matplotlib, Altair, DuckDB and more, offline; %pip install adds others once you allow the network for that page.
Run your first code cell in Vellum
Open a page
Create a page, or open any page you already have.
Write a code block
Type three backticks and a language name, for example ```python, then your code, then three backticks to close it.
Run it
Switch to the reading or split view and press Run on the cell (or Shift+Enter in the cell editor). The language downloads the first time.
Keep the result
The output is saved with the page. Open the cell menu for Run all, Variables and the other notebook commands.
In the app
Run code in a pagePython, JavaScript, R, SQL and 20+ languages, on this device.
VariablesSee every value your code has made.
Share between languagesshare() a table in JavaScript, query it in SQL.
Input, files and chartsCells ask questions, read your files and draw charts.
Network and packagesCells reach the web or install packages only if you allow.
Work like a notebookRun all, run above or below, move and restart cells.
Explain and FixThe on-device assistant explains code and suggests fixes.
Languages offlineDownload languages ahead, for planes and trains.
Questions
Is it a replacement for Jupyter?
For many notebooks, yes: it opens and exports .ipynb files and keeps outputs. It runs WebAssembly builds of each language in the browser, so heavy computation, GPUs and some native packages still need Jupyter. See Vellum and Jupyter.
Does my code have internet access?
Not unless you allow it. A cell that tries to reach the web asks first (once, always for this page, or never), and every request is logged under the cell.
Does it work offline?
Yes. Each language downloads once, the first time you use it, and is then kept on your device. You can download all of them ahead of time in Settings.