DRONE
Distributed Reactive Orchestration Nodes Environment
DRONE is a Python framework built on top of Atom that turns reactive object graphs into distributed ones. When a member value changes in one process, it is automatically pushed through a message broker to all subscribers on any machine — triggering their local Atom observers as if the change had happened locally.
Installation
pip install drones
A running Redis instance is required for the default RedisBroker.
Quick start
Publisher (process A)
from atom.api import Atom, Float
from drones import Drone, RedisBroker, drone
@drone
class MarketFeed(Atom):
price = Float().tag(drone_publish="price")
Drone.bind(pubsub_channel="my-app", broker=RedisBroker("redis://localhost:6379"))
feed = MarketFeed()
feed.price = 185.0 # published to every subscriber on the "my-app" channel
Subscriber (process B)
from atom.api import Atom, Float, Int, observe
from drones import Drone, RedisBroker, drone
@drone
class Portfolio(Atom):
price = Float().tag(drone_node="price") # fed remotely
quantity = Int(10)
total = Float()
@observe("price")
def _refresh(self, change):
self.total = self.price * self.quantity
Drone.bind(pubsub_channel="my-app", broker=RedisBroker("redis://localhost:6379"))
portfolio = Portfolio()
# portfolio.price is updated whenever MarketFeed.price changes in process A,
# firing _refresh through Atom's native observation.
See the examples/ directory for a runnable publisher/subscriber
pair, and SPEC.md for the full design specification.
Core concepts
@drone— class decorator that instruments anAtomsubclass.drone_publish="name"— tag a member so its changes are published undername.drone_node="name"— tag a member so it receives updates forname.drone_scope="instance"— restrict delivery to the instance whosedrone_idmatches (node name on the wire becomesname.<drone_id>).- Broker — pluggable transport (
DroneBrokerABC);RedisBrokerships by default. - Serializer — pluggable (
DroneSerializerABC);PickleSerializeris the default.
Development
This project uses pixi for local development.
pixi run test # run the test suite
pixi run lint # ruff check
pixi run format # ruff format
pixi run typecheck # mypy
Releasing
Versions are derived from git tags via
hatch-vcs. To publish a release, push a
tag and the GitHub Actions workflow builds and publishes to PyPI using
trusted publishing:
git tag v0.1.0
git push origin v0.1.0
License
Metadata
Release files for drones 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| drones-0.1.0.tar.gz | 13.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| drones-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.7 kB
Release files / drones-0.1.0.tar.gz
| Download URL | drones-0.1.0.tar.gz |
|---|---|
| Size | 13.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8889220ebd838b9accf5a5e363d39ba16d69b97d72f0086bb85767fc5f0e4208
|
|
BLAKE2b-256 checksum How to use checksums |
98e5333a48f9ea65b98614e0eb9de03fbd81a30fbfc66e00323e92930817400e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Jun 18, 2026.
Transparency logRelease files / drones-0.1.0-py3-none-any.whl
| Download URL | drones-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
def8283e5846765d44daa8ee39760259932ce3ae035675950900c6f108d141db
|
|
BLAKE2b-256 checksum How to use checksums |
615c0d5ce4cab83120c911eb95c9a0f55229621effc23810deb755d2f70fd728
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Jun 18, 2026.
Transparency log