kains14 downloadsEdit and run reactive marimo notebooks with a native interface and a local Python runtime.
A native marimo notebook editor inside Obsidian, powered by your local Python environment.
Edit reactive Python notebooks using Obsidian's DOM, CodeMirror editors, theme colors and side panels. The main notebook view does not embed a website or webview. Files remain standard marimo .py notebooks.
简体中文 · Example notebook · Documentation · Releases
Early release, version 0.0.2. Obsidian community-directory approval is pending. Native rendering covers a subset of marimo, rather than every feature of the official editor.
.py files as static, read-only content first. New installations require an explicit connection before notebook code runs. Ordinary Python scripts stay read-only.mo.ui controls write values back to the kernel. Tables support search, sorting and row selection. Dataframe output provides a structural preview, not a full data editor.Mod+Enter runs the current cell; Shift+Enter runs it and moves to the next cell. For features unavailable in the native UI, the toolbar can explicitly open the notebook in the official browser editor.
Requirements: Obsidian desktop 1.13.0+, Python 3.12, and exactly marimo 0.25.2. Local GUI verification uses macOS and Obsidian 1.14.5. Windows and Linux GUI behavior has not been verified on real devices.
Use a dedicated virtual environment. Ruff 0.17.3 supplies the Format action; other notebook execution does not require Ruff. The plugin does not install or upgrade Python packages automatically.
macOS / Linux:
python3.12 -m venv ~/.venvs/obsidian-marimo
~/.venvs/obsidian-marimo/bin/python -m pip install marimo==0.25.2 ruff==0.17.3
Windows PowerShell:
py -3.12 -m venv "$env:USERPROFILE\.venvs\obsidian-marimo"
& "$env:USERPROFILE\.venvs\obsidian-marimo\Scripts\python.exe" -m pip install marimo==0.25.2 ruff==0.17.3
Packages used by your notebook, such as pandas or Altair, must be installed in the same environment. Other marimo versions are rejected because the plugin uses a version-specific protocol adapter.
Once a release is published, download its three individual assets: main.js, manifest.json and styles.css. Put them in <vault>/.obsidian/plugins/marimo-native/, then enable Marimo Native in Community plugins. No ZIP is needed for Obsidian's update mechanism.
For a source checkout before the first release:
npm ci
npm run build
Copy those same three files from dist/ into the plugin folder. Node.js 24+ is needed to build and test the source, but not to use an installed plugin.
In Marimo Native settings, select the environment's Python executable, not the marimo command. Open the example, inspect it, and choose Connect and run only if you trust its code.
Python file association can be disabled in settings. If another plugin owns .py, use the file context menu or command palette to open the native marimo view. Auto-connect on open is off for new installations; a previously saved explicit opt-in is preserved.
~/.local/state/obsidian-marimo/drafts/<vault-hash>/. They contain notebook code and are separate from saved .py files.<vault>/.obsidian/plugins/marimo-native/data.json. Vault synchronization tools may sync it. Do not publish that file or include keys in diagnostics.@app.cell structures. Unsupported or invalid structures fall back to complete read-only source instead of presenting a partial notebook..py notebooks.npm ci
npm test
npm run typecheck
npm run build
npm run check:release -- --artifacts
Use Python 3.12 with pip install -r requirements-dev.txt, then run python -m unittest discover -s tests -p 'test_*.py'. Tests include real local runtime interactions and execute test fixtures. Host verification is separate from unit/protocol testing.
Contributing · Security · Release process · Third-party notices
Plugin source is MIT licensed. This is an independent project, not an official marimo or Obsidian product. marimo is a separately installed, Apache-2.0-licensed runtime. Bundled libraries retain their own licenses; see third-party notices.