From fabrik
Guides creating, editing, running, and deploying marimo reactive Python notebooks stored as pure .py files for reproducible interactive apps.
npx claudepluginhub maragudk/fabrik --plugin fabrikThis skill uses the workspace's default tool permissions.
marimo is an open-source reactive Python notebook that reinvents notebooks as reproducible, interactive, and shareable Python programs. Unlike traditional Jupyter notebooks, marimo notebooks:
references/app.mdreferences/caching.mdreferences/cell.mdreferences/cli-args.mdreferences/control-flow.mdreferences/diagrams.mdreferences/html.mdreferences/inputs.mdreferences/layouts.mdreferences/markdown.mdreferences/media.mdreferences/outputs.mdreferences/plotting.mdreferences/query-params.mdreferences/sql.mdreferences/state.mdreferences/status.mdreferences/watch.mdGuides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Processes PDFs: extracts text/tables/images, merges/splits/rotates pages, adds watermarks, creates/fills forms, encrypts/decrypts, OCRs scans. Activates on PDF mentions or output requests.
Share bugs, ideas, or general feedback.
marimo is an open-source reactive Python notebook that reinvents notebooks as reproducible, interactive, and shareable Python programs. Unlike traditional Jupyter notebooks, marimo notebooks:
.py files (Git-friendly, no JSON)pip install marimo # Basic
pip install marimo[recommended] # With extras
pip install marimo[sql] # With SQL support
marimo tutorial intro # Start tutorial
# Edit
marimo edit # New notebook
marimo edit notebook.py # Edit existing
marimo edit --watch --sandbox # Watch files, isolate deps
# Run as app
marimo run notebook.py # Read-only app
marimo run notebook.py --watch # Auto-reload on changes
# Run as script
python notebook.py
# Create from prompt
marimo new "analyze sales data"
# Convert
marimo convert notebook.ipynb -o notebook.py
# Export
marimo export html notebook.py -o output.html
marimo export html-wasm notebook.py -o output.html # Browser-executable
Running a cell automatically runs all cells that depend on it. Execution order is determined by variable dependencies (DAG), not cell position.
list.append() aren't tracked; reassign insteadNotebooks are pure Python files with marimo decorators:
import marimo
app = marimo.App()
@app.cell
def _():
import marimo as mo
return (mo,)
@app.cell
def _(mo):
mo.md("# My Notebook")
return ()
Detailed documentation for each API is available in the references/ directory. Consult these files for comprehensive examples and parameters.
| API | Reference File | Description |
|---|---|---|
| Markdown | references/markdown.md | mo.md() for rich text, LaTeX, icons |
| HTML | references/html.md | mo.Html, mo.as_html(), styling |
| Outputs | references/outputs.md | mo.output.append(), console redirection |
| API | Reference File | Description |
|---|---|---|
| Inputs | references/inputs.md | Sliders, text, dropdowns, tables, forms, etc. |
| Layouts | references/layouts.md | mo.hstack, mo.vstack, tabs, accordion, etc. |
| Media | references/media.md | Images, audio, video, PDF, downloads |
| Plotting | references/plotting.md | Altair, Plotly, matplotlib integration |
| Diagrams | references/diagrams.md | Mermaid diagrams |
| Status | references/status.md | Progress bars, spinners |
| API | Reference File | Description |
|---|---|---|
| SQL | references/sql.md | mo.sql() for database and DataFrame queries |
| API | Reference File | Description |
|---|---|---|
| Control Flow | references/control-flow.md | mo.stop(), conditional execution |
| State | references/state.md | mo.state() for UI synchronization |
| Caching | references/caching.md | @mo.cache, @mo.persistent_cache |
| Query Params | references/query-params.md | mo.query_params() for URL state |
| CLI Args | references/cli-args.md | mo.cli_args() for script arguments |
| Watch | references/watch.md | mo.watch.file() for reactive file monitoring |
| App | references/app.md | Embedding notebooks, mo.app_meta() |
| Cell | references/cell.md | Cross-notebook execution, testing |
import marimo as mo
slider = mo.ui.slider(0, 100, value=50, label="Threshold")
slider
# In another cell
mo.md(f"Selected value: **{slider.value}**")
table = mo.ui.table(df, selection="multi")
table
# In another cell
selected = table.value # Selected rows as DataFrame
result = mo.sql(f"SELECT * FROM {df} WHERE value > {threshold.value}")
mo.stop(form.value is None, mo.md("Submit the form to continue"))
# Rest of cell runs only after form submission
marimo run notebook.py # Local app
marimo export html-wasm notebook.py # Static WASM app
Layout options: Vertical (default), Grid (drag-drop in editor), Slides.
@mo.cache for expensive computationsmo.stop() to prevent expensive ops until readymo.state() unless synchronizing multiple UI elements