Skip to main content
Pre-release

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

Dropbear

Cloud robot policy inference — one function call.

0.1.0a3 is a pre-alpha release. Pin the exact version while the public API is still evolving.

Install

Add Dropbear to a Python 3.11–3.14 project:

uv add "dropbear==0.1.0a3"

Install the CLI as a standalone tool:

uv tool install "dropbear==0.1.0a3"
dropbear login

The base package contains cloud inference, transport, model contracts, and robot-neutral observation helpers. Install a hardware or simulator stack only when you need it:

uv add "dropbear[so101]==0.1.0a3"
uv add "dropbear[sim]==0.1.0a3"

The base SDK supports Python 3.11 through 3.14. The so101 extra currently supports Python 3.12 and 3.13 because its pinned LeRobot dependency requires Python 3.12 and does not yet provide a wheel-compatible Python 3.14 dependency stack.

The sim extra is currently Linux/WSL2 only because of upstream LIBERO/robosuite limitations.

Cloud policy inference

import dropbear

with dropbear.connect(model="molmoact2-so101") as policy:
    result = policy.predict(
        observation,
        instruction="pick up the cube",
    )

print(len(result.actions), len(result.actions[0]))

predict() returns one action chunk and does not actuate a robot. Build observation with the model-specific helper and validate every action locally before adding a motion path.

dropbear.connect() is the canonical SDK entrypoint. connect_so101() is a deprecated compatibility path for the legacy physical SO-101 safety loop and will be removed after that behavior is folded into the generic policy surface. New cloud-policy work should use dropbear.connect(). There is no first-class public connect_libero() or connect_franka() entrypoint; use dropbear.connect(model="molmoact2-libero") or select another checkpoint with model=.

Use a context manager so every cloud session closes deterministically:

import dropbear

with dropbear.connect(model="molmoact2-libero") as policy:
    result = policy.run(
        instruction="put the mug on the plate",
        observe=observe,
        act=act,
        max_actions=220,
        strategy=dropbear.RunStrategy.libero_default(),
    )

policy.run() returns one RunResult and prints the same run-scoped summary immediately. Its counters and stop condition are deliberately narrow:

  • result.done means the act() callback requested a stop; it does not assert task success or completion.
  • result.actions counts control callback steps, not confirmed physical robot execution.
  • result.policy_calls counts completed policy responses accepted by that run.
  • result.timing.policy_response_ms measures SDK observation submission through action-chunk receipt. It excludes observation construction and physical actuation.
  • result.timing.data_plane_rtt_ms is an authenticated application-path round trip measured with a clock probe. It includes transport framing and any accelerator or relay hops; it is not a one-way network-latency estimate.
  • Worker queue, preprocessing, inference, and postprocessing summaries are derived from per-response worker timestamps. Missing samples remain missing rather than being inferred from client-side residual time.

region="nearest" is the default and pins the lowest measured HTTPS-latency region, even when another region is already warm. region="available" reuses compatible warm compute in any measured candidate region before starting cold compute. Passing an AWS region is an exact constraint with no regional fallback. The latency check uses five serial samples per region and reports when partial or failed evidence required a deterministic fallback.

transport="auto" tries QUIC first and can use the hosted relay; transport="quic" requires QUIC, and transport="relay" uses the relay directly.

MolmoAct2-DROID on Franka

MolmoAct2-DROID consumes an exterior RGB view and wrist RGB view. A second exterior view is optional; when omitted, Dropbear reuses the first exterior frame for the checkpoint's second exterior slot.

Robot state is seven Franka joint positions in radians followed by a gripper value in [0, 1].

import numpy as np
import dropbear

exterior_rgb = np.zeros((480, 640, 3), dtype=np.uint8)
wrist_rgb = np.zeros((480, 640, 3), dtype=np.uint8)

observation = dropbear.franka.observe(
    exterior_frame=exterior_rgb,
    wrist_frame=wrist_rgb,
    joint_positions=[0.0] * 7,
    gripper=0.5,  # 0=open, 1=closed
)

with dropbear.connect(model="molmoact2-droid") as policy:
    result = policy.predict(
        observation,
        instruction="pick up the green block",
    )

assert len(result.actions) == 15
assert all(len(action) == 8 for action in result.actions)

The checkpoint returns a 15-step chunk at 15 Hz. Each action is an absolute target [joint_0, ..., joint_6, gripper]; joints are radians and the gripper is in [0, 1].

predict() does not actuate hardware or provide a Franka safety controller. Validate joint, velocity, acceleration, workspace, collision, and gripper limits before sending any target to a robot.

Manual action loop

For a caller-owned control loop, pass the task instruction to policy.next_action(...). Dropbear owns inference, refill, action buffering, calibration, and RTC prefix context; the caller owns sensing, actuation, and loop cadence.

import time

dt = 1.0 / policy.action_hz
while running:
    tick = time.perf_counter()
    action = policy.next_action(
        observe(),
        instruction="put the mug on the plate",
    )
    robot.execute(action)
    time.sleep(max(0.0, dt - (time.perf_counter() - tick)))

CLI

Sign in once. Credentials are stored in ~/.dropbear/config.toml.

dropbear login
dropbear status

For headless setup, use bare --api-key to paste a key into a hidden prompt:

dropbear login --api-key

Run robot-neutral setup checks:

dropbear doctor

SO-101 and simulation checks are explicit:

dropbear doctor so101
dropbear doctor sim

Install shell completion with:

dropbear --install-completion

Useful session commands:

dropbear sessions list
dropbear sessions stop <session-id>
dropbear sessions stop --all

Documentation: https://docs.dropbear.dreamscalelabs.com

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dropbear-0.1.0a3.tar.gz (132.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dropbear-0.1.0a3-py3-none-any.whl (153.4 kB view details)

Uploaded Python 3

File details

Details for the file dropbear-0.1.0a3.tar.gz.

File metadata

  • Download URL: dropbear-0.1.0a3.tar.gz
  • Upload date:
  • Size: 132.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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}

File hashes

Hashes for dropbear-0.1.0a3.tar.gz
Algorithm Hash digest
SHA256 1dbc61a0bb10e2cb0b83c5bcb88c55f5f96d9bd53abdf71c91dba5887e2bb303
MD5 4726b30ca24ba51f0d9030729961bf08
BLAKE2b-256 8a8e3e72a4dfff7a6b7af612ba9275550996d96f126f6228f67eda25f96be53b

See more details on using hashes here.

File details

Details for the file dropbear-0.1.0a3-py3-none-any.whl.

File metadata

  • Download URL: dropbear-0.1.0a3-py3-none-any.whl
  • Upload date:
  • Size: 153.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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}

File hashes

Hashes for dropbear-0.1.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 a4d0eba5611595f1efc12d554b66293f6473f768bfe051aa5fddc4fa92b1e189
MD5 c739f4e994fab05596a8a6445e70bb5a
BLAKE2b-256 a099df8ed378ab1857f6db9601c89f011fd104af6c58c7472fb9394ed6a1eafa

See more details on using hashes here.

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