Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

runtimed

Python bindings for the nteract runtime daemon. Execute code, manage kernels, and interact with notebooks programmatically.

Download the nteract desktop app — it ships the runtimed daemon and gives you a visual interface for your notebooks.

Using runtimed with agents? The nteract MCP server is built on runtimed and provides a ready-made agentic interface for AI assistants. It's also a great example of how to use runtimed in practice.

Installation

pip install --pre runtimed
# or: uv pip install --prerelease allow runtimed

Only pre-release wheels are being published while the library surface settles. The stable channel is frozen at the last-shipped release; the --pre channel tracks the nightly desktop app and discovers the nightly daemon socket automatically. See #2217 for context.

Client() and the high-level Python API use default_socket_path() by default. That helper respects RUNTIMED_SOCKET_PATH, so exported test or MCP sockets take precedence over the package's default channel.

Quick Start

All examples use await — run them inside asyncio.run(main()), a Jupyter notebook, or a Python REPL with top-level await (e.g. python -m asyncio).

import asyncio
import runtimed

async def main():
    client = runtimed.Client()
    notebook = await client.create_notebook()

    # Create and execute cells
    cell = await notebook.cells.create("print('hello')")
    execution = await cell.execute()
    result = await execution.result()
    print(execution.execution_id)  # durable execution UUID
    print(result.stdout)  # "hello\n"
    recovered = await client.get_execution_result(execution.execution_id)
    print(recovered.stdout)

    # Read cell properties (sync — local CRDT replica)
    print(cell.source)      # "print('hello')"
    print(cell.cell_type)   # "code"

    # Edit cells
    await cell.set_source("x = 42")
    execution = await cell.execute()
    await execution.result()

    # Save the notebook
    path = await notebook.save_as("/tmp/my-notebook.ipynb")

asyncio.run(main())

Features

  • Document-first model with Automerge CRDT sync
  • Sync reads, async writes — reads from local replica, writes sync to peers
  • Multi-client support for shared notebooks
  • Rich output capture (stdout, stderr, display_data, errors)

API Overview

Client

client = runtimed.Client()

# Discover active notebooks
notebooks = await client.list_active_notebooks()
for info in notebooks:
    print(f"{info.name} [{info.status}] ({info.active_peers} peers)")

# Open, create, or join notebooks
notebook = await client.open_notebook("/path/to/notebook.ipynb")
notebook = await client.create_notebook(runtime="python")
notebook = await client.join_notebook(notebook_id)

If you need to target a specific release channel instead of the current process default:

import os
import runtimed

os.environ["RUNTIMED_SOCKET_PATH"] = runtimed.socket_path_for_channel("nightly")
client = runtimed.Client()

Use default_socket_path() for normal current-process behavior. Use socket_path_for_channel("stable"|"nightly") only for explicit channel targeting or cross-channel discovery because it intentionally ignores RUNTIMED_SOCKET_PATH.

Notebook

async with await client.create_notebook() as notebook:
    # Cells collection (sync reads, async writes)
    print(len(notebook.cells))
    for cell in notebook.cells:
        print(f"{cell.id[:8]}: {cell.source[:40]}")

    # Runtime state (sync read from local doc)
    if notebook.runtime.kernel.status == runtimed.KERNEL_STATUS.IDLE:
        print("kernel is idle")

    # Runtime lifecycle
    await notebook.start(runtime="python")
    await notebook.restart()
    await notebook.interrupt()
    await notebook.save()
# Session closed automatically on exit

Cells

# Create cells
cell = await notebook.cells.create("import math")
cell = await notebook.cells.insert_at(0, "# Title", cell_type="markdown")

# Access cells
cell = notebook.cells.get_by_index(0)    # by position
cell = notebook.cells.get_by_id(cell_id) # by ID
matches = notebook.cells.find("import")  # search source

# Read properties (sync)
print(cell.source, cell.cell_type, cell.outputs)

# Mutate (async)
await cell.set_source("x = 2")
await cell.append("\ny = 3")
result = await cell.run()
await cell.delete()

Requirements

Documentation

See crates/runtimed/AGENTS.md for architecture and Python binding usage.

Metadata

Release files for runtimed 2.8.7a202610150158

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for runtimed 2.8.7a202610150158
File
runtimed-2.8.7a202610150158-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details
runtimed-2.8.7a202610150158-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
runtimed-2.8.7a202610150158-cp39-abi3-manylinux_2_39_x86_64.whl CPython 3.9 abi3 Linux glibc 2.39+ x86-64 Details
runtimed-2.8.7a202610150158-cp39-abi3-manylinux_2_39_aarch64.whl CPython 3.9 abi3 Linux glibc 2.39+ ARM64 Details
runtimed-2.8.7a202610150158-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
runtimed-2.8.7a202610150158-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 126.7 MB

Release files / runtimed-2.8.7a202610150158-cp39-abi3-win_arm64.whl

Download URL runtimed-2.8.7a202610150158-cp39-abi3-win_arm64.whl
Size 19.0 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
b418a2b5bdd07942f5194fb9d9487f7049d619d5f63ab495a579be4f3a7d86ff
BLAKE2b-256 checksum
How to use checksums
de6d71308342852d10c0412d34ba222c38ab456d818c7bc6c0a2a85efd92ac2b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}

Release files / runtimed-2.8.7a202610150158-cp39-abi3-win_amd64.whl

Download URL runtimed-2.8.7a202610150158-cp39-abi3-win_amd64.whl
Size 19.6 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
2380fbe6b91096a3781515e1ea275f2251fbad0eba26aa491345a17e5e73237d
BLAKE2b-256 checksum
How to use checksums
56ec5656d526670ab5b1a37e1e17e4d35eeacde9f00921f1a008c1a8c2424dec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}

Release files / runtimed-2.8.7a202610150158-cp39-abi3-manylinux_2_39_x86_64.whl

Download URL runtimed-2.8.7a202610150158-cp39-abi3-manylinux_2_39_x86_64.whl
Size 23.2 MB
Tags CPython 3.9 Linux glibc 2.39+ x86-64 abi3
SHA-256 checksum
How to use checksums
548fd7657193d8fdb8bf3cb44df5d41c5093ad74e1d3a1af616db8a5902a105e
BLAKE2b-256 checksum
How to use checksums
d7e188cf426d71d31a1a190862b3aa5d4dcd17ddefa6d5319fdd4d87c5068a55
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}

Release files / runtimed-2.8.7a202610150158-cp39-abi3-manylinux_2_39_aarch64.whl

Download URL runtimed-2.8.7a202610150158-cp39-abi3-manylinux_2_39_aarch64.whl
Size 24.6 MB
Tags CPython 3.9 Linux glibc 2.39+ ARM64 abi3
SHA-256 checksum
How to use checksums
d5774eeb6c81dfdf54e0c605056d27ba23ce6edef1b51632c6e58113d69a1196
BLAKE2b-256 checksum
How to use checksums
fb88ea71cf9ab11b7fa4ee2fc90295c0901a74e72728346db2da453253bc700f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}

Release files / runtimed-2.8.7a202610150158-cp39-abi3-macosx_11_0_arm64.whl

Download URL runtimed-2.8.7a202610150158-cp39-abi3-macosx_11_0_arm64.whl
Size 20.2 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d531a48f803e0d7632fa741b0117a13caebb3eebf689dcc08ed47a307cccdbf6
BLAKE2b-256 checksum
How to use checksums
7ec190ed3354d1ff1f9ade81e4d474624d98817e490f740cbfc1fe170f69934f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}

Release files / runtimed-2.8.7a202610150158-cp39-abi3-macosx_10_12_x86_64.whl

Download URL runtimed-2.8.7a202610150158-cp39-abi3-macosx_10_12_x86_64.whl
Size 20.0 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
e3b13f7db7bafa7535220a71a5a2db4d6fcd36231bcad8ca3d9d6f7a6b9c0679
BLAKE2b-256 checksum
How to use checksums
5a3205735be0304596aa59e8d51fc8ee997355530da35810434c0450a0ce5a45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}

Release history Release notifications | RSS feed

This release

2.8.6

6 release files

2.8.2

6 release files

2.8.1

6 release files

2.8.0

6 release files

2.7.6

4 release files

2.7.5

4 release files

2.7.4

4 release files

2.7.3

4 release files

2.7.1

4 release files

2.7.0

4 release files

2.6.2

4 release files

2.6.1

4 release files

2.6.0

4 release files

2.5.1

4 release files

2.5.0

4 release files

2.4.8

4 release files

2.4.7

4 release files

2.3.1

4 release files

2.3.0

4 release files

2.2.0

3 release files

2.1.3

3 release files

2.1.2

3 release files

2.1.1

3 release files

2.1.0

3 release files

2.0.8

3 release files

2.0.7

3 release files

2.0.6

3 release files

2.0.5

3 release files

2.0.4

3 release files

2.0.3

3 release files

2.0.2

3 release files

2.0.0

2 release files

1.9.0

3 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

1 release file

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page