Git-free marimo notebook sharing via GitHub
Project description
⚓ mooring
Git-free marimo notebook sharing via GitHub.
Mooring is a single-file app (mooring.pyz / mooring.exe) that lets a team
of data analysts pull, edit, and push marimo notebooks stored in a shared
GitHub repo — without git installed on their machines. All sync happens
over the GitHub REST API; the only requirement on an analyst's machine is
Python 3.12 or newer.
Double-clicking the app opens a local browser hub: log in to GitHub with a one-time device code, see every team notebook with its sync status, pull the latest, open notebooks in the bundled marimo editor, and push your changes back — one commit per file, with conflicts detected and resolved per file (never silently overwritten).
How it works
- One shared team repo (e.g.
your-org/notebooks) holdsnotebooks/,data/, andreports/folders. Everyone pulls from and pushes to it. - No git anywhere. Pull walks the repo tree via the GitHub Git Data API and downloads only changed blobs; push uses the Contents API with the file's last-known SHA, so GitHub itself rejects writes that would clobber someone else's change.
- Conflicts are explicit. Pull never overwrites local edits; push blocks conflicted files, offering per-file resolution.
- Push or propose. Push commits straight to the shared branch; propose sends changes to a personal review branch so they can land via a pull request — protect the branch and propose becomes the only way in.
- Dependencies live with the repo. A repo declares its notebook packages in
a
pyproject.toml+uv.lockat its root (runmooring init, thenmooring deps add <pkg>), version-controlled alongside the notebooks. With uv, notebooks run in that locked environment automatically; mooring itself ships lean (no opinionated analyst stack baked in). For machines with no uv, an admin builds a frozen.pyzwhose bundle is generated from that samepyproject.toml— one source of truth, two delivery modes (see build & distribute). - Works on corporate GitHub. GitHub Enterprise instances are supported
(
mooring login --host ghe.example.com), and TLS is verified against the OS trust store, so SSL-intercepting proxies with an IT-installed root CA just work.
Install from PyPI
With Python 3.12+ and uv, run Mooring straight from PyPI — no frozen build needed:
uvx mooring # run it as a one-off tool
uv tool install mooring # …or install it as a persistent CLI
pip install mooring # …or into the active environment
Optional extras
Mooring ships lean; opt-in features live behind extras. Quote the brackets —
[...] is a shell glob, so an unquoted mooring[copilot] can expand to nothing:
| Extra | Enables |
|---|---|
copilot |
the AI copilot |
pii |
NER name detection for the PII guard |
pii-spacy |
offline name detection (air-gapped teams) |
uvx "mooring[copilot]" # one-off tool run
uv tool install "mooring[copilot]" # persistent CLI tool
uv add "mooring[copilot]" # add to your own uv project
pip install "mooring[copilot]" # plain pip
Combine with a comma ("mooring[copilot,pii]"). Full reference:
optional extras.
Documentation
Full docs live in docs/ and build into a searchable site with
zensical:
- For users — install Python, run the app, and pull / edit / push notebooks (daily workflow, conflicts, CLI).
- For admins — set up a team: GitHub setup (the repo, OAuth app, client id, scopes), configuration, and build & distribute.
- For developers — architecture and contributing.
Build & preview the docs
uv sync
uv run zensical serve # live-reloading preview at a local URL
uv run zensical build # static site into ./site
.github/workflows/docs.yml publishes the site to GitHub Pages on every push
to the default branch.
Develop
uv sync # install everything
uv run pytest # unit tests (no network needed)
uv run ruff check src tests # lint
uv run mooring hub # run the hub from source
See contributing for the architecture, integration testing, and project conventions.
Built with moonlit.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mooring-0.4.7.tar.gz.
File metadata
- Download URL: mooring-0.4.7.tar.gz
- Upload date:
- Size: 451.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7673bbf7dfa0a1c8172428cefa031e5c2b1fc00c8707b4590ed0ef29cd0423ca
|
|
| MD5 |
c11a2a6d6089f3e21688edcc4147ceca
|
|
| BLAKE2b-256 |
22e9938bedb20fc30e910c6297003421a9e50a4cb71a1d5b455d6b2782a30d34
|
File details
Details for the file mooring-0.4.7-py3-none-any.whl.
File metadata
- Download URL: mooring-0.4.7-py3-none-any.whl
- Upload date:
- Size: 201.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ddce04f58b949aae8e62f553ac136b138e57a4d2e1718bceb66aa902e9de83b4
|
|
| MD5 |
4efa891378d4bf10a3148221f868e1ae
|
|
| BLAKE2b-256 |
7712aba076e7c2812953302ea19ec7311cd09f5e69d5900442bef3d8d3178422
|