uv-scripts/marimo
Marimo UV Scripts Marimo notebooks that work as both interactive tutorials and batch scripts. What is this? Marimo notebooks are pure Python files that can be: Edited interactively with a reactive notebook interface Run as scripts with uv run - same as any UV script This makes them perfect for tutorials and educational content where you want users to explore step-by-step, but also run the whole thing as a batch job. Available Scripts Script… See the full description on the dataset page: https://huggingface.co/datasets/uv-scripts/marimo.
Marimo UV Scripts
Marimo notebooks that work as both interactive tutorials and batch scripts.
What is this?
Marimo notebooks are pure Python files that can be:
- Edited interactively with a reactive notebook interface
- Run as scripts with
uv run- same as any UV script
This makes them perfect for tutorials and educational content where you want users to explore step-by-step, but also run the whole thing as a batch job.
Available Scripts
Usage
Run as a script
# Get dataset info
uv run https://huggingface.co/datasets/uv-scripts/marimo/raw/main/getting-started.py --dataset squad
# Train an image classifier
uv run https://huggingface.co/datasets/uv-scripts/marimo/raw/main/train-image-classifier.py \
--dataset beans \
--epochs 3 \
--output-repo your-username/beans-vitRun interactively
# Clone and edit locally
git clone https://huggingface.co/datasets/uv-scripts/marimo
cd marimo
# Open in marimo editor (--sandbox auto-installs dependencies)
uvx marimo edit --sandbox getting-started.py
uvx marimo edit --sandbox train-image-classifier.pyRun on HF Jobs (GPU)
# Train image classifier with GPU
hf jobs uv run --flavor l4x1 --secrets HF_TOKEN \
https://huggingface.co/datasets/uv-scripts/marimo/raw/main/train-image-classifier.py \
-- --dataset beans --output-repo your-username/beans-vit --epochs 5 --push-to-hubWhy Marimo?
- Reactive: Cells automatically re-run when dependencies change
- Pure Python: No JSON, git-friendly, readable as plain code
- Self-contained: Inline dependencies via PEP 723 metadata
- Dual-mode: Same file works as notebook and script
Create Your Own Marimo UV Script
Use _template.py as a starting point:
# Clone and copy the template
git clone https://huggingface.co/datasets/uv-scripts/marimo
cp marimo/_template.py my-notebook.py
# Edit interactively
uvx marimo edit --sandbox my-notebook.py
# Test as script
uv run my-notebook.py --helpRecipes
Add explanation (notebook only)
mo.md("""
## This is a heading
This text explains what's happening. Only shows in interactive mode.
""")Show output in both modes
# print() shows in terminal (script) AND cell output (notebook)
print(f"Loaded {len(data)} items")Interactive control with CLI fallback
# Parse CLI args first
parser = argparse.ArgumentParser()
parser.add_argument("--count", type=int, default=10)
args, _ = parser.parse_known_args()
# Create UI control with CLI default
slider = mo.ui.slider(1, 100, value=args.count, label="Count")
# Use it - works in both modes
count = slider.value # UI value in notebook, CLI value in scriptShow visuals (notebook only)
# mo.md() with images, mo.ui.table(), etc. only display in notebook
mo.ui.table(dataframe)
# For script mode, also print summary
print(f"DataFrame has {len(df)} rows")Conditional notebook-only code
# Check if running interactively
if hasattr(mo, 'running_in_notebook') and mo.running_in_notebook():
# Heavy visualization only in notebook
show_complex_plot(data)Best Practices
- Always include `print()` for important output - It works in both modes
- Use argparse for all configuration - CLI args work everywhere
- Add `mo.md()` explanations between steps - Makes tutorials readable
- Test in script mode first - Ensure it works without interactivity
- Keep dependencies minimal - Add
marimoplus only what you need
