Durable Actors for Python
Durable actors and typed clients, backed by the Rust runtime.
Quickstart · Reference · Runnable example
Quickstart
Requires Node.js 22.19+, pnpm, Python 3.11+, and uv.
pnpm dlx durable-actors init my-actors --template python
cd my-actors
pnpm install
uv sync
Define src/actors.py. Every instance field must use persisted() or ephemeral(). Persisted fields are stored in SQLite. Litestream is installed and managed automatically with the runtime; local development persists to the filesystem. Wrap persisted fields with emitted() to broadcast saved changes.
from durable_actors import Actor, emitted, persisted
class Counter(Actor):
count: int = emitted(persisted(0))
def increment(self, amount: int = 1) -> int:
self.count += amount
return self.count
pnpm exec durable-actors dev
Call an actor
In another terminal in the same directory, generate the client:
pnpm exec durable-actors generate
Save as client.py and run uv run client.py:
from generated import actors
counter = actors.Counter.get("one")
print(counter.increment())
Use the client in another application
Copy the entire generated package, including its helper modules, into the application. From that application's root, install the client runtime:
uv add durable-actors
This installs the runtime dependencies automatically. The [codegen] extras are only needed to generate or regenerate clients, not to run them.
Subscribe to state
Callbacks receive complete typed snapshots on a background thread. Keep the process running while listening; the context manager closes the subscription.
from generated import actors
counter = actors.Counter.get("one")
with counter.subscribe(lambda state: print(state.count), on_error=print):
counter.increment()
input("Press Enter to stop.\n")
Metadata
Release files for durable-actors 0.7.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| durable_actors-0.7.10.tar.gz | 140.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| durable_actors-0.7.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 194.9 kB
Release files / durable_actors-0.7.10.tar.gz
| Download URL | durable_actors-0.7.10.tar.gz |
|---|---|
| Size | 140.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
48258a43b0e9ecb8049e9b349ec6409a0b787c8056fadb1344e89e39116da86f
|
|
BLAKE2b-256 checksum How to use checksums |
28e670f1a0821a26be43462e7b20f1ad71f463a1e24fca680c0438ce89883e06
|
| 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 3, 2026.
Transparency logRelease files / durable_actors-0.7.10-py3-none-any.whl
| Download URL | durable_actors-0.7.10-py3-none-any.whl |
|---|---|
| Size | 54.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e9246080e8053abe0ddc10958f4cc97a435c372109cff16040371d19d73bac94
|
|
BLAKE2b-256 checksum How to use checksums |
50b44b020c05e3812c34e7bc2286747545f2aa2da3bc7a99dfbe9f99d049fe41
|
| 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 3, 2026.
Transparency log