Agent skill

Streamlit To Marimo

by marimo-team in marimo-team/skills

Convert a Streamlit app to a marimo notebook. An agent skill from marimo-team/skills.

Apache-2.0Auto-check passedData & Analytics

Install Streamlit To Marimo

skills CLI
$ npx skills add marimo-team/skills --skill streamlit-to-marimo -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install marimo-team/skills streamlit-to-marimo --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/marimo-team/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/streamlit-to-marimo .claude/skills/streamlit-to-marimo && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
streamlit-to-marimo
GitHub stars
174
Token cost
~1.5k tokens
SKILL.md length
615 words
Files
1
Skills in repo
4
Repo updated
First seen
Licence
Apache-2.0

At a glance

Convert a Streamlit app to a marimo notebook. An agent skill from marimo-team/skills.

  • Works in 5 steps: Read the Streamlit app to understand its… → Create a new marimo notebook following… → Map Streamlit components to marimo… → …
  • Tasks that involve Jupyter notebooks
  • SKILL.md covers Steps, Widget Mapping Reference and Key Conceptual Differences
  • Calls uvx

What it does

Streamlit To Marimo is an agent skill from marimo-team/skills. Convert a Streamlit app to a marimo notebook

Its SKILL.md is about 1.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Data & Analytics, covering Jupyter notebooks. It works with marimo and Streamlit. The repository describes itself as: skills for coding agents related to marimo. The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve Jupyter notebooks

Example prompts

  • “/streamlit-to-marimo”

Requirements

  • Python 3

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Read the Streamlit app to understand its widgets, layout, and state management.
  2. Create a new marimo notebook following the marimo-notebook skill conventions. Add all dependencies the Streamlit app uses (pandas, plotly…
  3. Map Streamlit components to marimo equivalents using the reference tables below. Key principles
  4. Handle conceptual differences in execution model, state, and caching (see below).
  5. Run uvx marimo check on the result and fix any issues.

What it can do on your machine

Read from SKILL.md and the folder at commit 6454470. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • uvx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use uvx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Streamlit To Marimo loads about 1.5k tokens when it runs. Until then it costs about 16 tokens; SKILL.md has 615 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~16
When it runs · the whole SKILL.md, loaded when a task matches
~1.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from marimo-team/skills at commit 6454470, republished under its Apache-2.0 licence (© marimo-team). 615 words, ~1,531 tokens.

Download SKILL.mdSave it as .claude/skills/streamlit-to-marimo/SKILL.md (or your agent's skills folder).
name
streamlit-to-marimo
description
Convert a Streamlit app to a marimo notebook

Converting Streamlit Apps to Marimo

For general marimo notebook conventions (cell structure, PEP 723 metadata, output rendering, marimo check, variable naming, etc.), refer to the marimo-notebook skill. This skill focuses specifically on mapping Streamlit concepts to marimo equivalents.

Steps

  1. Read the Streamlit app to understand its widgets, layout, and state management.

  2. Create a new marimo notebook following the marimo-notebook skill conventions. Add all dependencies the Streamlit app uses (pandas, plotly, altair, etc.) — but replace streamlit with marimo. You should not overwrite the original file.

  3. Map Streamlit components to marimo equivalents using the reference tables below. Key principles:

    • UI elements are assigned to variables and their current value is accessed via .value.
    • Cells that reference a UI element automatically re-run when the user interacts with it — no callbacks needed.
  4. Handle conceptual differences in execution model, state, and caching (see below).

  5. Run uvx marimo check on the result and fix any issues.

Widget Mapping Reference

Input Widgets
StreamlitmarimoNotes
st.slider()mo.ui.slider()
st.select_slider()mo.ui.slider(steps=[...])Pass discrete values via steps
st.text_input()mo.ui.text()
st.text_area()mo.ui.text_area()
st.number_input()mo.ui.number()
st.checkbox()mo.ui.checkbox()
st.toggle()mo.ui.switch()
st.radio()mo.ui.radio()
st.selectbox()mo.ui.dropdown()
st.multiselect()mo.ui.multiselect()
st.date_input()mo.ui.date()
st.time_input()mo.ui.text()No dedicated time widget
st.file_uploader()mo.ui.file()Use .contents() to read bytes
st.color_picker()mo.ui.text(value="#000000")No dedicated color picker
st.button()mo.ui.button() or mo.ui.run_button()Use run_button for triggering expensive computations
st.download_button()mo.download()Returns a download link element
st.form() + st.form_submit_button()mo.ui.form(element)Wraps any element so its value only updates on submit
Display Elements
StreamlitmarimoNotes
st.write()mo.md() or last expression
st.markdown()mo.md()Supports f-strings: mo.md(f"Value: {x.value}")
st.latex()mo.md(r"$...$")marimo uses KaTeX; see references/latex.md
st.code()mo.md("```python\n...\n```")
st.dataframe()df (last expression)DataFrames render as interactive marimo widgets natively; use mo.ui.dataframe(df) only for no-code transformations
st.table()df (last expression)Use mo.ui.table(df) if you need row selection
st.metric()mo.stat()
st.json()mo.json() or mo.tree()mo.tree() for interactive collapsible view
st.image()mo.image()
st.audio()mo.audio()
st.video()mo.video()
Charts
StreamlitmarimoNotes
st.plotly_chart(fig)fig (last expression)Use mo.ui.plotly(fig) for selections
st.altair_chart(chart)chart (last expression)Use mo.ui.altair_chart(chart) for selections
st.pyplot(fig)fig (last expression)Use mo.ui.matplotlib(fig) for interactive matplotlib
Layout
StreamlitmarimoNotes
st.sidebarmo.sidebar([...])Pass a list of elements
st.columns()mo.hstack([...])Use widths=[...] for column ratios
st.tabs()mo.ui.tabs({...})Dict of {"Tab Name": content}
st.expander()mo.accordion({...})Dict of {"Title": content}
st.container()mo.vstack([...])
st.empty()mo.output.replace()
st.progress()mo.status.progress_bar()
st.spinner()mo.status.spinner()Context manager
Show full SKILL.md (236 more words)Show less

Key Conceptual Differences

Execution Model

Streamlit reruns the entire script top-to-bottom on every interaction. Marimo uses a reactive cell DAG — only cells that depend on changed variables re-execute.

  • No need for st.rerun() — reactivity is automatic.
  • No need for st.stop() — structure cells so downstream cells naturally depend on upstream values.
State Management
Streamlitmarimo
st.session_state["key"]Regular Python variables between cells
Callback functions (on_change)Cells referencing widget.value re-run automatically
st.query_paramsmo.query_params
Caching
Streamlitmarimo
@st.cache_data@mo.cache
@st.cache_resource@mo.persistent_cache

@mo.cache is the primary caching decorator — it works like functools.cache but is aware of marimo's reactivity. @mo.persistent_cache goes further by persisting results to disk across sessions, useful for expensive computations like model training.

Multi-Page Apps

Marimo offers two approaches for multi-page Streamlit apps:

  • Single notebook with routing: Use mo.routes with mo.nav_menu or mo.sidebar to build multiple "pages" (tabs/routes) inside one notebook.
  • Multiple notebooks as a gallery: Run a folder of notebooks with marimo run folder/ to serve them as a gallery with navigation.
Deploying

marimo features molab to host marimo apps instead of the streamlit community cloud. You can generate an "open in molab" button via the add-molab-badge skill.

Custom components

streamlit has a feature for custom components. These are not compatible with marimo. You might be able to generate an equivalent anywidget via the marimo-anywidget skill but discuss this with the user before working on that.

© marimo-team, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/streamlit-to-marimo of marimo-team/skills.

Open the folder on GitHubat commit 6454470

Compare with similar skills

Streamlit To Marimo next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Streamlit To Marimo compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Streamlit To Marimo this skillmarimo-team/skills174—~1.5kAutomated safety check: PassApache-2.0
Paper FiguresEvoScientist/EvoSkills4761 repos~4.4kAutomated safety check: PassApache-2.0
Wasm Compatibilityericmjl/llamabot1832 repos~1.6kAutomated safety check: PassNone
Marimo Paircosanlab/nltools1311 repos~3kAutomated safety check: PassMIT
Marimo Notebookcosanlab/nltools1314 repos~2.1kAutomated safety check: PassMIT
Marimo Batchkoaning/gitcharts1451 repos~819Automated safety check: NotesNone

Similar skills

  • Paper Figures

    EvoScientist/EvoSkills

    A skill your agent uses to produce standalone, publication-ready PNG graphics and reproducible matplotlib scripts from tabular data (CSVs or DataFrames).

    476 GitHub starsUsed in 1 repo~4.4k tokens
    Data & AnalyticsAuto-check passed
  • Wasm Compatibility

    ericmjl/llamabot

    Check if a marimo notebook is compatible with WebAssembly (WASM) and report any issues.

    183 GitHub starsUsed in 2 repos~1.6k tokens
    Data & AnalyticsAuto-check passed
  • Marimo Pair

    cosanlab/nltools

    Work inside a running marimo notebook's kernel — execute code, create cells, and build a notebook as an artifact.

    131 GitHub starsUsed in 1 repo~3k tokens
    Data & AnalyticsAuto-check passed
  • Marimo Notebook

    cosanlab/nltools

    Write a marimo notebook in a Python file in the right format.

    131 GitHub starsUsed in 4 repos~2.1k tokens
    Data & AnalyticsAuto-check passed
  • Marimo Batch

    koaning/gitcharts

    An opintionated skill to prepare a marimo notebook to make it ready for a scheduled run.

    145 GitHub starsUsed in 1 repo~819 tokens
    Data & AnalyticsAuto-check: notes
  • Marimo Pair

    PhySpace/SimpleCADAPI

    Drive a live marimo notebook as a workspace: run Python in the same kernel the user does, inspect live notebook state, and commit durable notebook changes.

    142 GitHub stars~3k tokensUpdated 6 days ago
    Data & AnalyticsAuto-check passed

More from marimo-team/skills

  • Auto Paper Demo

    marimo-team/skills

    Make a demo of a research paper in a marimo notebook fully automatically without extra user input.

    174 GitHub stars~1k tokensUpdated 1 mo ago
    Auto-check passed
  • Add Molab Badge

    marimo-team/skills

    Add "Open in molab" badge(s) linking to marimo notebooks. An agent skill from marimo-team/skills.

    174 GitHub stars~1.1k tokensUpdated 1 mo ago
    Auto-check passed
  • Implement Paper

    marimo-team/skills

    Implement a research paper as an interactive marimo notebook together with the user.

    174 GitHub stars~1.1k tokensUpdated 1 mo ago
    Auto-check passed

Works with

Questions about Streamlit To Marimo

What does Streamlit To Marimo do?

Convert a Streamlit app to a marimo notebook. An agent skill from marimo-team/skills. Streamlit To Marimo is an agent skill from marimo-team/skills.

When should I use Streamlit To Marimo?

Streamlit To Marimo fits situations like: tasks that involve Jupyter notebooks.

How do I install Streamlit To Marimo in Claude Code?

Run `npx skills add marimo-team/skills --skill streamlit-to-marimo -a claude-code`. Or copy the skill folder (skills/streamlit-to-marimo in marimo-team/skills) into .claude/skills/streamlit-to-marimo in your project. Claude Code loads it when a task matches its description.

How do I install Streamlit To Marimo in Codex?

Run `npx skills add marimo-team/skills --skill streamlit-to-marimo -a codex`. Or copy the skill folder (skills/streamlit-to-marimo in marimo-team/skills) into .agents/skills/streamlit-to-marimo in your project. Codex loads it when a task matches its description.

Can I use Streamlit To Marimo in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add marimo-team/skills --skill streamlit-to-marimo -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/streamlit-to-marimo, .gemini/skills/streamlit-to-marimo, .github/skills/streamlit-to-marimo and .opencode/skills/streamlit-to-marimo in your project.

What does Streamlit To Marimo need to run?

Going by SKILL.md and its folder, Streamlit To Marimo needs the command-line tools its instructions call (uvx). Our summary lists: Python 3.

Does Streamlit To Marimo access the network?

SKILL.md contains no URLs. Its commands use uvx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Streamlit To Marimo safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Streamlit To Marimo use?

Streamlit To Marimo is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Streamlit To Marimo use?

About 1.5k tokens (SKILL.md is roughly 6.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Streamlit To Marimo?

Skills that share tags, products or a category with Streamlit To Marimo: Paper Figures (EvoScientist/EvoSkills, 476 stars), Wasm Compatibility (ericmjl/llamabot, 183 stars), Marimo Pair (cosanlab/nltools, 131 stars) and Marimo Notebook (cosanlab/nltools, 131 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Streamlit To Marimo?

marimo-team (a GitHub organization) maintains it in marimo-team/skills, which has 174 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on August 19, 2026.

Source: marimo-team/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.