kubectl-marimo
Deploy marimo notebooks to Kubernetes.
Installation
# With uv (recommended)
uv tool install kubectl-marimo
# With uvx (no install)
uvx kubectl-marimo edit notebook.py
# With pip
pip install kubectl-marimo
Quick Start
# Edit a notebook interactively
kubectl marimo edit notebook.py
# Run as read-only app
kubectl marimo run notebook.py
# With cloud storage
kubectl marimo edit --source=cw://my-bucket/data notebook.py
# Sync changes back
kubectl marimo sync notebook.py
# Delete deployment
kubectl marimo delete notebook.py
# List active deployments
kubectl marimo status
Commands
edit
Create or edit notebooks in the cluster (interactive mode).
kubectl marimo edit [OPTIONS] [FILE]
Options:
-n, --namespace- Kubernetes namespace (default: "default")--source- Data source URI (cw://, sshfs://, rsync://)--dry-run- Print YAML without applying-f, --force- Overwrite without prompting
Examples:
# Edit existing notebook
kubectl marimo edit notebook.py
# Edit with S3 data mounted
kubectl marimo edit --source=cw://bucket/data notebook.py
# Edit in staging namespace
kubectl marimo edit -n staging notebook.py
run
Run a notebook as a read-only application.
kubectl marimo run [OPTIONS] FILE
Options: Same as edit
Examples:
# Run notebook as app
kubectl marimo run dashboard.py
# Run with data source
kubectl marimo run --source=cw://bucket/reports dashboard.py
sync
Pull changes from pod back to local file.
kubectl marimo sync [OPTIONS] FILE
Options:
-n, --namespace- Kubernetes namespace-f, --force- Overwrite local file without prompting
delete
Delete notebook deployment from cluster.
kubectl marimo delete [OPTIONS] FILE
Options:
-n, --namespace- Kubernetes namespace--delete-pvc- Also delete PersistentVolumeClaim (PVC is preserved by default)--no-sync- Delete without syncing changes back
status
List active notebook deployments.
kubectl marimo status [DIRECTORY]
Configuration
Configure deployments via frontmatter in your notebook.
Markdown (.md)
---
title: my-analysis
image: ghcr.io/marimo-team/marimo:latest
storage: 5Gi
env:
DEBUG: "true"
API_KEY:
secret: my-secret
key: api-key
mounts:
- cw://my-bucket/data
---
Python (.py)
# /// script
# dependencies = ["marimo", "pandas"]
# ///
# [tool.marimo.k8s]
# image = "ghcr.io/marimo-team/marimo:latest"
# storage = "5Gi"
#
# [tool.marimo.k8s.env]
# DEBUG = "true"
Frontmatter Fields
| Field | Description | Default |
|---|---|---|
| title | Resource name | filename |
| image | Container image | ghcr.io/marimo-team/marimo:latest |
| port | Server port | 2718 |
| storage | PVC size | none (ephemeral) |
| auth | Set to "none" to disable | token auth |
| env | Environment variables | none |
| mounts | Data source URIs | none |
Environment Variables
Inline values:
env:
DEBUG: "true"
LOG_LEVEL: "info"
From Kubernetes secrets:
env:
API_KEY:
secret: my-secret
key: api-key
DB_PASSWORD:
secret: db-credentials
key: password
Mount URIs
| Scheme | Description | Example |
|---|---|---|
| cw:// | CoreWeave Object Storage | cw://bucket/path |
| sshfs:// | SSH filesystem mount | sshfs://user@host:/path |
| rsync:// | Local directory sync | rsync://./data:/notebooks |
Local rsync:// URIs sync a directory to the pod via kubectl cp. Remote URIs (rsync://user@host:/path) create a sidecar for continuous sync.
Requirements
- Kubernetes cluster with marimo-operator installed
- kubectl configured to access the cluster
Release files for kubectl-marimo 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| kubectl_marimo-0.3.0.tar.gz | 60.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| kubectl_marimo-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 89.4 kB
Release files / kubectl_marimo-0.3.0.tar.gz
| Download URL | kubectl_marimo-0.3.0.tar.gz |
|---|---|
| Size | 60.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f7441db2806242db593de7710bc49a99a8cb7bb013d1381384420c229ad2cf7f
|
|
BLAKE2b-256 checksum How to use checksums |
7176a40fefbc56173d0816cdb6326f80c6109cb03b4409fcf6d521d8b71299a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 31, 2026.
Transparency logRelease files / kubectl_marimo-0.3.0-py3-none-any.whl
| Download URL | kubectl_marimo-0.3.0-py3-none-any.whl |
|---|---|
| Size | 28.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fcc54a930e7c59b3c830036401f6ffe32d0c5dc536043ef02f360406b168c42c
|
|
BLAKE2b-256 checksum How to use checksums |
8f36e8823567d8553da117a2a0d109a8bbbf7025ae3fa8af1b0595277d976ac4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 31, 2026.
Transparency log