# Ganymede > A Jupyter server in Rust for TypeScript notebooks, agent journals, and the Ganymede apps. Each link is a page's Markdown source. The HTML page is the same URL without `.md`. ## Get started - [Overview](https://ganymede-server.com/docs/index.md): Ganymede is a Jupyter server written in Rust, for TypeScript notebooks on cdp-kernel, agent journals over MCP, and its own Mac, iPad and iPhone apps. - [Install](https://ganymede-server.com/docs/install.md): Ganymede is one binary, `ganymede`. - [Getting started](https://ganymede-server.com/docs/getting-started.md): This page assumes `ganymede` and at least one kernel are installed; Install walks through both, and JupyterLab, step by step. ## Use the apps - [Ganymede's app](https://ganymede-server.com/docs/app.md): ganymede-ui is Ganymede's own notebook app. - [The Mac, iPad and iPhone apps](https://ganymede-server.com/docs/ganymede-ui/apps.md): Ganymede for Mac, iPad and iPhone runs the Ganymede server inside the app and shows the notebook in a window of its own, with a native sidebar, toolbar and menus. - [Keyboard shortcuts](https://ganymede-server.com/docs/ganymede-ui/shortcuts.md): The app binds JupyterLab's notebook shortcuts plus a few of its own. - [Device API](https://ganymede-server.com/docs/ganymede-ui/device.md): TypeScript cells in the Mac, iPad and iPhone apps can use native features of the device through a global named `device`. ## Notebooks as programs - [Parameters, results and runs](https://ganymede-server.com/docs/programs.md): A notebook can take parameters and hand back named results, so it runs like a function. ## Work with an agent - [Overview](https://ganymede-server.com/docs/agent-journals.md): Coding agents are good at exploratory analysis. - [Agents over MCP](https://ganymede-server.com/docs/mcp.md): `ganymede mcp` gives a coding agent (Claude Code, Codex, Cursor, or any other MCP client) tools to open, edit and run notebooks. - [Agents with nb-cli](https://ganymede-server.com/docs/agents.md): A coding agent that explores data usually runs code through its shell and, when asked, writes the work up as a notebook afterwards. - [Live editing and document rooms](https://ganymede-server.com/docs/rooms.md): A document room is a notebook held live in the server, so that several clients edit it at once and see each other's edits as they type. ## Use Jupyter tools - [JupyterLab and VS Code](https://ganymede-server.com/docs/frontends.md): Ganymede serves the same REST and websocket API as `jupyter_server`, so existing frontends connect to it without changes. - [Other kernels](https://ganymede-server.com/docs/kernels.md): Ganymede has no language of its own. - [Switching from jupyter_server](https://ganymede-server.com/docs/switching.md): Ganymede replaces the server, not the kernels. ## Examples - [All examples](https://ganymede-server.com/docs/examples.md): Notebooks to read before running anything. - [Start Here](https://ganymede-server.com/docs/examples/01-start-here.md): These notebooks show what a TypeScript notebook in Ganymede can do. - [Web APIs](https://ganymede-server.com/docs/examples/02-web-apis.md): Cells have the web platform's `fetch`, so any API that allows requests from a web page (CORS) is a few lines away. - [Charts and Diagrams](https://ganymede-server.com/docs/examples/03-charts-and-diagrams.md): Cells run in a Web Worker, which has no DOM, so the charts here are drawn as SVG in the kernel. - [DuckDB](https://ganymede-server.com/docs/examples/04-duckdb.md): DuckDB is an analytical SQL database. - [Generative Art](https://ganymede-server.com/docs/examples/05-generative-art.md): Pictures from rules and randomness. - [Widgets](https://ganymede-server.com/docs/examples/06-widgets.md): A widget is a control in a cell's output that stays connected to the kernel. - [UI Frameworks](https://ganymede-server.com/docs/examples/07-ui-frameworks.md): A cell can build its output with a UI framework, in two ways. - [Device](https://ganymede-server.com/docs/examples/08-device.md): In the Ganymede apps, TypeScript cells can use the device they run on through a global named `device`. - [Journal: Fremont Bridge](https://ganymede-server.com/docs/examples/journal-fremont.md): Summary. - [Journal: Oklahoma earthquakes](https://ganymede-server.com/docs/examples/journal-oklahoma.md): Summary. ## Reference - [CLI and configuration](https://ganymede-server.com/docs/reference.md): Every command, the server's flags and config file, environment variables, logging, and exit codes. - [MCP tools](https://ganymede-server.com/docs/mcp-tools.md): Every tool `ganymede mcp` and `ganymede serve --mcp` offer an agent, with its parameters, as the agent's `tools/list` shows them. - [The API by example](https://ganymede-server.com/docs/api.md): Ganymede serves `jupyter_server`'s REST and websocket API, so its REST reference and the messaging docs apply. - [Known gaps](https://ganymede-server.com/docs/known-gaps.md): What Ganymede doesn't do yet, or won't do, in one place. - [Roadmap](https://ganymede-server.com/docs/roadmap.md): What is done, and what comes next, in order. - [Changelog](https://ganymede-server.com/docs/changelog.md) ## Cell APIs - [jupyter](https://ganymede-server.com/docs/cell-api/jupyter.md): Every member of the `jupyter` global and the `prompt` and `confirm` globals, with their arguments, return values and an example. - [Widgets and comms](https://ganymede-server.com/docs/cell-api/widgets.md): The widget model that `jupyter.widget(options)` returns, and the comm API under `jupyter.comm`, with their arguments, return values and an example. - [device (macOS and iOS)](https://ganymede-server.com/docs/cell-api/device.md): Every method of the `device` global, with its arguments, return value, errors, where it works, and an example. ## How it works - [Architecture](https://ganymede-server.com/docs/architecture.md): Ganymede replaces one part of the Jupyter stack. - [Security](https://ganymede-server.com/docs/security.md): `ganymede serve` and `ganymede lab` start a server that runs code. - [Privacy and crash reporting](https://ganymede-server.com/docs/privacy.md): Ganymede is local-first. - [Embedding](https://ganymede-server.com/docs/embedding.md): An application can take the Ganymede crates it needs instead of running `ganymede` as a separate process. - [Replacing Python](https://ganymede-server.com/docs/python-free.md): The messaging protocol, the websocket framing, the REST API, and nbformat are language-neutral. ## Optional: Background - [Why Ganymede](https://ganymede-server.com/docs/why.md): Ganymede started as a way to write TypeScript notebooks and run them on an iPad. - [Protocol and kernel host](https://ganymede-server.com/docs/protocol.md): What a Jupyter server has to get right, component by component. - [User interfaces](https://ganymede-server.com/docs/ui.md): The UI is outside the Rust core. - [The iPad use case](https://ganymede-server.com/docs/ipados.md): The case that shaped Ganymede. - [In-app kernels as server kernels](https://ganymede-server.com/docs/in-app-kernel.md): A design note for #266. - [A host API for kernels](https://ganymede-server.com/docs/host-api.md): A design note for #647. - [Tables and charts for TypeScript notebooks](https://ganymede-server.com/docs/data-output.md): A design note for #747. - [An agent that responds to your edits](https://ganymede-server.com/docs/live-agent-edits.md): A design note for #761. - [Other Jupyter clients](https://ganymede-server.com/docs/clients.md): Jupyter frontends and clients other than JupyterLab and VS Code (see JupyterLab and VS Code), and whether each could run against Ganymede. - [Prior art](https://ganymede-server.com/docs/prior-art.md): What to read before working on a part of Ganymede. ## Optional: Contributing - [Development](https://ganymede-server.com/docs/development.md): Ganymede is a Cargo workspace, and `docs/` is this site. - [Releasing](https://ganymede-server.com/docs/releasing.md): How a release is cut, what it publishes, and what to do when it fails partway through. - [ganymede-ui architecture](https://ganymede-server.com/docs/ganymede-ui/architecture.md): How ganymede-ui is put together. - [Deploying ganymede-ui](https://ganymede-server.com/docs/ganymede-ui/deploying.md): The app is a static site. - [Releasing ganymede-ui](https://ganymede-server.com/docs/ganymede-ui/releasing.md): How a release is cut, what it publishes, and what to do when it fails partway through.