Skip to main content

fiberd for Python

The Python SDK. fiberd.template is for code that runs inside a fiber, such as an AI agent. fiberd.client is for callers of fiberd, such as the activator that asks for one.

Install

pip install fiberd

The wheels are for CPython 3.14 or later on Linux, x86_64 or aarch64, with glibc 2.28 or later. Anywhere else pip builds the sdist. On Linux that needs a C compiler and the Python headers. Off Linux it builds without the extension. There fiberd.client works and fiberd.template raises ImportError when used.

Template

A template warms up once and forks a fiber for every Clone. Call init() first, do the warm-up, then serve(on_fiber).

import json
import fiberd.template as ft

ft.init()                                # first line, before any thread

# Your own slow setup goes here (imports, model weights, config). It runs
# once, and every fiber is a fork of this process, born with it loaded.
with open("prompts.json") as fp:
    prompts = json.load(fp)

def on_fiber(f: ft.Fiber) -> int:        # runs in the fiber
    task = json.loads(f.payload)         # the bytes the caller sent with the Clone
    def handle(conn):
        question = conn.recv(4096).decode()
        conn.sendall(f"{prompts[task['kind']]} {question}".encode())
    f.serve(handle)                      # listens on f.endpoint, reports ready, hands each connection over
    return 0

ft.serve(on_fiber)

fiberd-template pkg.module:on_fiber runs a module the same way, with init() before the import.

A Fiber carries fence, fence_parts, endpoint, kind (unix, tcp or handoff), payload, session, env, incarnation and backend (fork or gvisor). listen() returns a bound socket for an author who runs their own server, ready() reports to fiberd once listening, check_fence() notices a resume, and stopping is set when the fiber is asked to stop. @ft.on_incarnation runs a function in every copy of the template, after random and OpenSSL are reseeded. The rules serve() enforces, and why, are in docs/design/sdk.md.

A handoff fiber listens on nothing. f.serve(handle) works the same there. Each conn is an ssl.SSLSocket, with TLS terminated under the grant's identity and the bound caller's certificate the one the handshake admits, as f.accept() returns it.

on_fiber may be async def. Then await f.serve_async(handler) serves an async def handler(reader, writer), and async for reader, writer in f.connections() is the async twin of accept().

Client

A caller holds a signed grant and asks a home for fibers under it. pip install 'fiberd[client]' adds grpcio and protobuf, which a template never needs.

import time
from fiberd.client import Client, Shed, Deferred

def clone(c, jwt, session):
    while True:
        try:
            return c.clone(jwt, session=session, payload=b'{"task":1}')  # a Fiber, with id, fence, endpoint and kind
        except Shed as e:                                                 # the home is busy, retry after the hint
            time.sleep(e.retry_after)

with Client.dial_tls("home:7443", cert="me.pem", key="me-key.pem", ca="ca.pem") as c:
    try:
        f = clone(c, jwt, "conv-42")
    except Deferred as e:              # this home cannot serve it, take the ordinary path or go to e.preferred_home
        raise SystemExit(f"deferred: {e.reason}")
    with f.dial() as sock:             # its unix or tcp endpoint
        sock.sendall(b"hello\n")
    c.park(f)                          # checkpoint it and free its place
    f = clone(c, jwt, "conv-42")       # kind RESUME, under the next fence
    c.release(f, discard=True)         # end it, and drop its parked delta

Client.dial(addr) is the plaintext form for a home started with -insecure-plaintext. A handoff fiber is reached with f.dial_handoff(cert, key), which sends its routing key as the server name, admits only the fiber's certificate from the Clone in the handshake and checks its key pin after it. TierGap and NotFound are the other typed outcomes, and any other failure is the grpc.RpcError as raised. c.watch() yields one status per grant as the home publishes it. fiberd.client.aio.Client has the same methods as coroutines, with watch as an async iterator. The token is accepted as a string or a callable that returns one, and it is never stored, logged or shown by a repr.

Build and test

The extension needs Linux and a C toolchain. In the dev container, from the repository root.

make python-test            # build the extension in place and run the unit tests
make conform-proc-python    # C1-C10 against the reference template, fiberd.template.ref
make conform-gvisor-python  # the same on gVisor, from a rootfs hack/python/rootfs.sh builds with CPython in it
make conform-runc-python    # and on runc, from the same rootfs
make python-dist            # the sdist, a wheel built from it, and the unit tests against that wheel

The same template serves on proc, runc and gVisor. On runc and gVisor it runs from a root filesystem that holds the interpreter and the package, which hack/python/rootfs.sh <dir> builds from the dev image for those runs.

Elsewhere, pip install -e 'sdk/python[client]' cryptography builds it with what the client's tests import, and python3 -m pytest sdk/python runs the unit tests, which start no process.

Metadata

Release files for fiberd 0.2.0

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

Source distribution (sdist)

Source distribution for fiberd 0.2.0
File Size Uploaded
fiberd-0.2.0.tar.gz 105.5 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for fiberd 0.2.0
File Interpreter ABI Platform
fiberd-0.2.0-cp314-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 abi3 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
fiberd-0.2.0-cp314-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 abi3 Linux glibc 2.28+ ARM64, Linux glibc 2.17+ ARM64 Details

Total release size: 346.2 kB

Release files / fiberd-0.2.0.tar.gz

Download URL fiberd-0.2.0.tar.gz
Size 105.5 kB
Tags Source
SHA-256 checksum
How to use checksums
b8944f59dddd396d3be3c735f8eb7d74d5fa7ba8dbe347848d79cc7f9cf19af7
BLAKE2b-256 checksum
How to use checksums
11824fb68f021ca5bfce75a1a345e50db82b779f1bea05b18f670782ecfdd35b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / fiberd-0.2.0-cp314-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL fiberd-0.2.0-cp314-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 120.2 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
8a23f782896b787936e1c4dac69dd987bc66c42c47545c64ce3c1d13fe3c2bc3
BLAKE2b-256 checksum
How to use checksums
fbbce699f5d800fd98fd7e042d92285885bb60a541c32d2aad241b5fe053cd15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / fiberd-0.2.0-cp314-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL fiberd-0.2.0-cp314-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 120.6 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
da93306d452da26a85f0af53e94cdd6f7de22486fd868ca9c1cbf4b0d8d2b290
BLAKE2b-256 checksum
How to use checksums
c3b53c5109ad97ae9639bc802202eeed372ef0bbe51c8285cdf7a40e1f7ac40e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

3 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