Skip to main content

DRONE

Distributed Reactive Orchestration Nodes Environment

build PyPI Python

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 an Atom subclass.
  • drone_publish="name" — tag a member so its changes are published under name.
  • drone_node="name" — tag a member so it receives updates for name.
  • drone_scope="instance" — restrict delivery to the instance whose drone_id matches (node name on the wire becomes name.<drone_id>).
  • Broker — pluggable transport (DroneBroker ABC); RedisBroker ships by default.
  • Serializer — pluggable (DroneSerializer ABC); PickleSerializer is 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

MIT

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)

Source distribution for drones 0.1.0
File Size Uploaded
drones-0.1.0.tar.gz 13.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for drones 0.1.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.1.0 This release

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