Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/marimo-team/marimo/llms.txt

Use this file to discover all available pages before exploring further.

Integrations

marimo integrates seamlessly with popular development tools, frameworks, and the broader Python ecosystem. This guide covers editor integrations, framework connections, and third-party tool support.

VS Code Extension

marimo provides an official VS Code extension for editing and running notebooks directly in VS Code.

Installation

# Install from VS Code marketplace
# Search for "marimo" in Extensions
# Publisher: marimo-team

Features

  • Native notebook editing: Edit .py marimo notebooks as notebooks in VS Code
  • Cell execution: Run cells individually or all at once
  • Interactive outputs: View plots, tables, and UI elements inline
  • IntelliSense: Full Python language support with completions and hover info
  • Debugging: Use VS Code’s debugger with marimo notebooks
  • Git integration: Built-in diff and merge tools for notebook files

Usage

# Open a marimo notebook in VS Code
code my_notebook.py

# The extension automatically detects marimo notebooks
# and provides the notebook interface

Configuration

Configure the extension in VS Code settings:
{
  "marimo.pythonPath": "/path/to/python",
  "marimo.port": 2718,
  "marimo.host": "localhost"
}
The VS Code extension runs a marimo server in the background. All editing happens in the browser-based marimo interface embedded in VS Code.

File Watching Mode

Edit marimo notebooks in any text editor (Neovim, Zed, Emacs, etc.) with automatic reloading:
# Start marimo in watch mode
marimo edit --watch notebook.py

# Edit notebook.py in your favorite editor
# Changes automatically reload in the browser
This enables:
  • Using your preferred editor/IDE
  • Vim keybindings, custom themes, plugins
  • Local development without browser-based editing

Framework Integrations

marimo notebooks can be integrated with popular Python web frameworks.

FastAPI Integration

Embed marimo notebooks as interactive endpoints in FastAPI applications:
from fastapi import FastAPI
import marimo
import os

# Create marimo server with multiple notebooks
server = marimo.create_asgi_app()

# Add notebooks as routes
ui_dir = "./notebooks"
for filename in os.listdir(ui_dir):
    if filename.endswith(".py"):
        app_name = os.path.splitext(filename)[0]
        app_path = os.path.join(ui_dir, filename)
        server = server.with_app(path=f"/{app_name}", root=app_path)

# Create FastAPI app
app = FastAPI()

# Your FastAPI routes
@app.get("/api/health")
async def health():
    return {"status": "healthy"}

# Mount marimo server
app.mount("/notebooks", server.build())

# Run with: uvicorn main:app

FastAPI with Authentication

From examples/frameworks/fastapi/main.py:
from fastapi import FastAPI, Request, Depends, HTTPException
from starlette.middleware.sessions import SessionMiddleware
import marimo

app = FastAPI()

# Add session middleware
app.add_middleware(
    SessionMiddleware,
    secret_key="your-secret-key"
)

# Authentication middleware
@app.middleware("http")
async def auth_middleware(request: Request, call_next):
    if request.url.path.startswith("/notebooks"):
        if "username" not in request.session:
            raise HTTPException(status_code=401, detail="Not authenticated")
    return await call_next(request)

# Create and mount marimo server
server = marimo.create_asgi_app().with_app(
    path="/",
    root="notebook.py"
)

app.mount("/notebooks", server.build())

Flask Integration

from flask import Flask
import marimo

app = Flask(__name__)

# Create marimo ASGI app
marimo_server = marimo.create_asgi_app().with_app(
    path="/",
    root="notebook.py"
).build()

# Mount using ASGI middleware
from asgiref.wsgi import WsgiToAsgi
app.wsgi_app = WsgiToAsgi(marimo_server)

if __name__ == "__main__":
    app.run()

Starlette Integration

from starlette.applications import Starlette
from starlette.routing import Mount
import marimo

# Create marimo server
marimo_app = marimo.create_asgi_app().with_app(
    path="/",
    root="analysis.py"
).build()

# Create Starlette app with marimo mounted
app = Starlette(
    routes=[
        Mount("/dashboard", app=marimo_app),
    ]
)

Third-Party Library Integrations

marimo works with a wide ecosystem of Python libraries. Here are some highlighted integrations:

Data Visualization

import plotly.graph_objects as go
import marimo as mo

fig = go.Figure(data=go.Scatter(x=[1, 2, 3], y=[4, 5, 6]))
mo.ui.plotly(fig)  # Interactive Plotly charts

Data Processing

import polars as pl
import marimo as mo

df = pl.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
mo.ui.table(df)  # Interactive tables with filtering

Machine Learning

from sklearn.ensemble import RandomForestClassifier
import marimo as mo

model = RandomForestClassifier()
model.fit(X_train, y_train)

mo.md(f"Accuracy: {model.score(X_test, y_test):.2%}")

Geospatial

import leafmap
import marimo as mo

# Create interactive map
m = leafmap.Map(center=[40, -100], zoom=4)
m.add_basemap("OpenStreetMap")

mo.ui.anywidget(m)  # Embed leaflet maps

Database Connections

from sqlalchemy import create_engine
import marimo as mo

engine = create_engine('postgresql://user:pass@localhost/db')
df = mo.sql(
    f"SELECT * FROM users LIMIT 10",
    engine=engine
)

Model Context Protocol (MCP)

marimo supports the Model Context Protocol for AI-powered development workflows.

What is MCP?

MCP is a standard protocol for connecting AI models with development tools and data sources. It enables:
  • AI assistants to read and modify marimo notebooks
  • Context-aware code generation
  • Integration with Claude, GPT-4, and other LLMs
  • Tool-augmented AI interactions

Using MCP with marimo

import marimo as mo

# MCP-compatible AI completion
code_suggestion = mo.ai.complete(
    prompt="Create a bar chart of sales by region",
    context={"available_data": df.columns.tolist()}
)

mo.md(f"```python\n{code_suggestion}\n```")

Installing MCP Servers

marimo can connect to MCP servers for enhanced functionality:
# Install marimo MCP server
pip install marimo[mcp]

# Configure MCP in marimo settings
marimo config --mcp-servers '{"claude": {"endpoint": "..."}}}'

Custom MCP Tools

Create custom MCP tools for your workflows:
from marimo.mcp import Tool

class DataAnalysisTool(Tool):
    name = "analyze_dataframe"
    description = "Analyze a pandas DataFrame"
    
    def execute(self, df, analysis_type):
        if analysis_type == "summary":
            return df.describe()
        elif analysis_type == "missing":
            return df.isnull().sum()
        # Add more analysis types...

# Register tool with MCP
mo.mcp.register_tool(DataAnalysisTool())
MCP support is evolving. Check marimo’s documentation for the latest features.

Cloud Platforms

Deploying to Cloud

marimo notebooks can be deployed to various cloud platforms:
# Deploy marimo app to Railway
marimo export html notebook.py > index.html
# Or run as ASGI app
marimo run notebook.py --host 0.0.0.0 --port $PORT

marimo Cloud

Deploy notebooks with one command:
# Deploy to marimo cloud
marimo cloud deploy notebook.py

# Share with team
marimo cloud share notebook.py --team my-team

Development Tools

Git Integration

marimo notebooks are pure Python files with excellent git support:
# Notebooks are readable diffs
git diff notebook.py

# Merge conflicts are standard Python
git merge feature-branch

# Use .gitattributes for better diffs
*.py diff=python

Pre-commit Hooks

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/marimo-team/marimo
    rev: v0.15.0
    hooks:
      - id: marimo-format
        args: [--check]
      
      - id: marimo-test
        args: [--quiet]

CI/CD Pipelines

# .github/workflows/test-notebooks.yml
name: Test Notebooks

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      
      - name: Install marimo
        run: pip install marimo pytest
      
      - name: Test notebooks
        run: |
          marimo test notebooks/*.py
          pytest notebooks/
      
      - name: Export notebooks
        run: |
          marimo export html notebooks/*.py --output dist/

IDE Plugins

Beyond VS Code, marimo works with:
  • PyCharm: Edit as Python files with full IDE support
  • Jupyter Lab: Convert between formats with marimo export ipynb
  • Cursor: AI-powered editing with marimo notebooks
  • Zed: Fast, native editor with watch mode

Example Integration Workflows

Data Pipeline with FastAPI

# pipeline.py - marimo notebook
import marimo as mo
import polars as pl

app = mo.App()

@app.cell
def load_data():
    return pl.read_csv("data.csv")

@app.cell
def transform(data):
    return data.filter(pl.col("value") > 0)

@app.cell
def visualize(transformed):
    return mo.ui.plotly(create_chart(transformed))
# main.py - FastAPI app
from fastapi import FastAPI
import marimo

app = FastAPI()
marimo_server = marimo.create_asgi_app().with_app(
    path="/", root="pipeline.py"
).build()

app.mount("/pipeline", marimo_server)

ML Monitoring Dashboard

import marimo as mo
import mlflow

app = mo.App()

@app.cell
def connect_mlflow():
    mlflow.set_tracking_uri("http://mlflow-server:5000")
    client = mlflow.tracking.MlflowClient()
    return client,

@app.cell  
def show_experiments(client):
    experiments = client.search_experiments()
    return mo.ui.table(experiments)

@app.cell
def plot_metrics(client, selected_experiment):
    runs = client.search_runs(selected_experiment.experiment_id)
    metrics = extract_metrics(runs)
    return mo.ui.plotly(plot_training_curves(metrics))

Build docs developers (and LLMs) love