The ML Platform Behind Uber's AI
Michelangelo AI: 우버의 엔드‑투‑엔드 머신러닝 플랫폼
Python-free Jupyter server in Rust. Runs JupyterLab and VS Code notebooks against any kernelspec, with no Python install.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A notebook runtime with a Rust core, and the Mac, iPad and iPhone apps built on it. The apps run the server inside the app; the same core is a command-line server and a library to embed.
ganymede:// link or Shortcut on the Mac, or another notebook
(Notebooks as programs).ganymede mcp lets Claude
Code or another MCP client work in a notebook as it goes, so the
notebook it leaves reruns from the top (Agents).jupyter_server and launches kernels from installed kernelspecs, so
JupyterLab, VS Code and ipykernel work with it unchanged. The server
itself needs no Python.Named for Jupiter's largest moon, and for the cupbearer who served the gods on Olympus.
Documentation: ganymede-server.com
(sources in docs/). Start with
the apps, or Install for the command
line, step by step from a clean machine with no Python or Jupyter. Worked
notebooks are in Examples, and
Why Ganymede has the background.
ganymede execute -p NAME=VALUE --results, POST /api/notebooks/run, and a host API through which a
notebook runs others it has been granted (Host API).ganymede mcp for agents, with ganymede nb publish to turn a
notebook into a page (Agents over MCP).jupyter_server REST and websocket API, so JupyterLab and VS Code
connect unchanged. ganymede lab serves JupyterLab itself.jupyter execute, and notebook saves that match
Python's nbformat byte for byte, with atomic writes and checkpoints
outside the notebook folder.ganymede-engine, a library for embedding, which builds for iOS,
Android, and wasm (Embedding).curl -fsSL https://ganymede-server.com/install.sh | sh # ganymede, plus cdp-kernel if Node 22.18+ is there
ganymede lab install # JupyterLab's frontend, from PyPI, without Python
ganymede lab # opens JupyterLab in the browser
Prebuilt binaries for Linux (x86_64, aarch64), macOS (Apple silicon,
Intel), and Windows (x86_64) are on the
releases page. Linux
and macOS are tested end to end; the Windows build is untested and best
effort (Known gaps). The
script above downloads the latest, checks its SHA-256, installs
ganymede into ~/.local/bin, and installs
cdp-kernel if Node 22.18 or later is there. Pass
options after sh -s --: --version 0.1.0 pins a release, --bin-dir DIR installs elsewhere, --no-kernel skips cdp-kernel. To build from
source: cargo install --path crates/ganymede-cli.
Install has each step by hand and the platform notes.
ganymede run -k fake 'hello' # a built-in kernel, for trying things out
ganymede run -k cdp-node 'const x = 2; x * 21' # any installed kernelspec
ganymede console -k cdp-node # completion, multiline, Ctrl-C interrupts
ganymede execute notebook.ipynb -o out.ipynb # like `jupyter execute`
ganymede trust notebook.ipynb # like `jupyter trust`
ganymede serve --root-dir . --port 8888 # point VS Code or JupyterLab at the URL
ganymede lab # JupyterLab, opened in the browser
Getting started walks through these, and CLI and configuration lists every command and flag.
Early software. The protocol, kernel host, nbformat, executor, contents,
API, and server pass their tests, and an end-to-end suite compares
Ganymede against jupyter execute and jupyter server on cdp-kernel and
ipykernel. The VS Code Jupyter extension's remote-server flow passes, and
JupyterLab's own bundle, served at /lab, runs notebooks in a browser. The
engine builds for iOS, Android, and wasm. See the
roadmap and known gaps.
The server has no Python runtime or Python dependency; Replacing Python says where Python still appears and why, and Switching from jupyter_server what a move from Jupyter's own server keeps and loses. UIs are clients of the API and live outside the core.
Cargo workspace at this directory. docs/ and site/ are the website, and
validation/ holds scripts that drive real JupyterLab and VS Code clients.
Ganymede's own UI, and the shared TypeScript protocol package that used to
be frontend/ here, live in
tlockney/ganymede-ui.
The crates, and how they depend on each other, are on the Architecture page.
Work is tracked in GitHub issues:
each task and each bug found gets an issue before work starts, and every
pull request links the issue it resolves (Closes #N), which CI checks,
and adds what it learned to the development log as a new
file in docs/notes/, so open PRs don't conflict there. The
Development page has the rules and how to build the
docs.
Releases go through a pull request like any other change; Releasing has the steps.
MIT; see LICENSE. Every dependency linked into the binary is
under a permissive license; about.toml lists the accepted ones, CI fails on
any other, and each release archive carries THIRD-PARTY-NOTICES generated
by cargo about.