Terminal-native
Julia notebooks with Sessions.jl
Reactive notebooks in your terminal. Pluto-compatible format, full IDE experience, real-time diagnostics.
Your notebook, in the terminal
One command to open, edit, and run reactive Julia notebooks. No browser required.
# Install as a Julia app
julia -e 'using Pkg; Pkg.Apps.add(url="https://github.com/GroupTherapyOrg/Sessions.jl")'
# Open a notebook
sessions my_notebook.jl
# Create a new notebook
sessions
# Run headlessly (CI, scripts)
sessions run my_notebook.jlEverything you need
Reactive Notebooks
Cells auto-re-run when dependencies change. Pluto-style reactivity powered by ExpressionExplorer.jl.
Pluto Compatibility
Load, edit, and save Pluto .jl notebooks natively. Same file format, same reactivity model.
Terminal IDE
File browser, REPL panel, diagnostics panel, tab bar, activity bar, status bar. A full IDE in your terminal.
Real-time Diagnostics
JETLS (JET.jl LSP) integration catches type errors and undefined variables as you type.
@bind Widgets
Slider, TextField, CheckBox, Select, NumberField. PlutoUI-compatible @bind protocol for interactive notebooks.
Agent-first Notebook
Code/state separation lets LLMs, IDEs, and scripts safely modify notebooks while the TUI watches and reacts.
3600+
Tests
5+
Widgets
20+
TUI Components
3
Layers
Agent-ready architecture
Sessions.jl separates code from execution state. Your notebook is two files, not one.
notebook.jl
Source of truth
Cell code, cell order, fold/disabled metadata
Safe for agents, LLMs, IDEs, and scripts to modify directly.
Pluto-compatible format. Version-controlled.
notebook.session.toml
Execution cache
Cached outputs, stdout, runtimes, error messages
Optional, gitignored, auto-generated. Delete it anytime.
Outputs restored instantly on restart. No re-execution needed.
How agent-driven development works
An external tool (LLM agent, IDE, script) modifies cell code in the .jl file.
The built-in file watcher detects the change within ~0.5 seconds.
Changed cells are marked stale — old outputs remain visible for reference.
You re-run stale cells. New outputs are cached to .session.toml.
Coming from Pluto?
| Sessions.jl | Pluto | |
|---|---|---|
| Code storage | .jl (cell code + order) | .jl (code + order + embedded pkg state) |
| Output storage | .session.toml (separate file) | In-memory only (recomputed on open) |
| External edits | Safe — file watcher auto-detects changes | Risky — may break embedded metadata |
| Startup | Instant — outputs restored from cache | Full re-execution on every open |
| Reactivity | Same model (ExpressionExplorer.jl) | Same model |
| File format | Pluto-compatible .jl files | Pluto .jl files |
| Interface | Terminal TUI (Tachikoma.jl) | Browser (HTTP server) |