Skip to main content

rb_sdk

Unified Rainbow Robotics Python SDK. Controls AMRs, manipulators and the RB-Y1 dual-arm robot, and integrates with Rainbow Robot Service (common), through a single API.

Entry points

Class Purpose
RBAmrSDK AMR (autonomous mobile robot) control
RBManipulateSDK Collaborative robot manipulator control
RBRby1SDK RB-Y1 dual-arm robot control (C++ implementation, rb_sdk.rb_sdk_cpp binding)
RBBaseSDK Common base (not needed unless you subclass it)

Internally it runs on a Zenoh pub/sub/query mesh. When running on the same PC as the robot, it works out of the box with no extra configuration.


1. Installation

pip install rainbow-rb-sdk

The PyPI package is published under the rainbow namespace. The examples in this document use the monorepo workspace names (rb_sdk, rb_zenoh, rb_flat_buffers …), so if you installed from PyPI, prefix imports with rainbow..

from rainbow.rb_sdk import RBManipulateSDK                      # workspace: from rb_sdk import ...
from rainbow.rb_flat_buffers.IPC.State_Core import State_CoreT   # workspace: from rb_flat_buffers...

Wheels are published for Linux (x86_64/aarch64) and Windows only. On macOS you can install only the stubs for editor autocompletion and type checking (no runtime import — run on Docker/Linux):

pip install rainbow-rb-sdk-stubs

For RB-Y1 (RBRby1SDK), the official rby1-sdk (C++) is vendored directly into rb_sdk.rb_sdk_cpp, so no separate installation is needed.

The PyPI package provides wheels for Python 3.11–3.13 (monorepo development/build is 3.12 only).


2. Basic usage (running on the robot)

Scripts running on the same PC as the common service can use the SDK as-is with no extra configuration.

from rb_sdk import RBAmrSDK, RBManipulateSDK

amr = RBAmrSDK()
manipulate = RBManipulateSDK()

# At this point ZenohClient automatically connects to 127.0.0.1:7447 (common)
manipulate.move.call_move_j(
    robot_model="C500920",
    target={"tar_values": [0, 0, 0, 0, 0, 0], "tar_frame": 0, "tar_unit": 0},
)

3. Using from an external PC (Remote Connect)

To talk to the robot from a machine other than the robot (e.g. a development laptop), fill in ConnectOptions and call sdk.connect(). connect() is a synchronous call (blocks until registration and mesh check complete), and disconnect() is awaitable.

import asyncio
import time

from rb_sdk import RBManipulateSDK
from rb_sdk.rb_sdk_cpp import ConnectOptions
from rb_flat_buffers.IPC.State_Core import State_CoreT

sdk = RBManipulateSDK()

opts = ConnectOptions()
opts.token = "service token"
opts.host = "192.168.1.100"
# opts.ttl = 30
# opts.zenoh_port = None
# opts.heartbeat = 15.0

# ⚠️  Register subscriptions only after connect().
# connect() reopens the zenoh session, so subscriptions registered before it are lost with the old session.
peer_id = sdk.connect(opts)  # On the robot itself (same PC) this does nothing and returns None


@sdk.zenoh_subscribe("C500920/state_core", flatbuffer_obj_t=State_CoreT)
def on_state_core(*, obj_payload: State_CoreT | None, **kwargs):
    if obj_payload is None:
        return
    print("motion mode:", obj_payload.motionMode)


try:
    # The heartbeat runs on an SDK-internal thread — the process just needs to stay alive.
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    pass
finally:
    asyncio.run(sdk.disconnect())

Key features

  • Local IP auto-detection: finds the IP of the interface routing toward host and announces it to the robot
  • Automatic port assignment: the OS picks a free port, so no port conflicts
  • Automatic heartbeat: a background thread periodically extends the TTL. On script exit / crash, the server cleans up when the TTL expires
  • Same-PC detection: if host is localhost or the machine's own IP, connect() does nothing and returns None (already in the mesh)
  • Calling it again while registered returns the existing peer id. Raises on registration/reconnection failure

ConnectOptions fields

Field Type Default Description
token str (required) common service JWT
host str (required) IP of the robot running common
zenoh_port int | None None Local Zenoh listen port. None = automatic
ttl int 30 Server-side session TTL (seconds)
heartbeat float | None None Heartbeat interval (seconds). None = ttl/2 (min 1 second)
mesh_timeout float | None None Max time to wait for the mesh to form (seconds). None = wait forever
mesh_probe_timeout float 1.0 Timeout of a single probe query (seconds)
mesh_probe_interval float 0.5 Probe retry interval (seconds)

4. use_directly mode

Passing use_directly=True to the RBBaseSDK constructor routes a method call to {name}_directly if that method exists. Otherwise the original method is called.

class MySDK(RBManipulateSDK):
    def call_move_j_directly(self, *, robot_model, target, **kwargs):
        # Implementation that controls hardware directly, bypassing Zenoh
        ...

# use_directly=True → calling call_move_j routes to call_move_j_directly
sdk = MySDK(use_directly=True)
sdk.move.call_move_j(robot_model="C500920", target={...})  # → calls call_move_j_directly

# use_directly=False (default) or no _directly method → original method is used
sdk2 = MySDK(use_directly=False)
sdk2.move.call_move_j(...)  # → calls call_move_j

use_directly is updated on every constructor call, even if the singleton instance already exists.


5. AMR SDK (RBAmrSDK)

from rb_sdk import RBAmrSDK

sdk = RBAmrSDK()

Submodules

Attribute Class Main features
sdk.move AmrMoveSDK Move to goal, jog, stop/pause/resume, linear/arc/rotation moves
sdk.control AmrControlSDK Safety field/flag/IO settings, docking/undocking, LED/motor/jog control, obstacle box
sdk.localization AmrLocalizationSDK Pose init, random/auto/semi-auto init, start/stop localization
sdk.map AmrMapSDK Map list/load/delete, topology get/set, start/stop/save mapping
sdk.setting AmrSettingSDK Robot type, setting categories/parameters, PDU/drive/sensor settings
sdk.status AmrStatusSDK Status, move status, LiDAR, path queries
sdk.file AmrFileSDK Map and resource file management
sdk.capability AmrCapabilitySDK Robot capability queries
sdk.accessory AmrAccessorySDK Accessory control
sdk.program AmrProgramSDK AMR program execution/control

Move examples

# Move to a goal node
sdk.move.send_move_goal(
    robot_model="AMR001",
    goal_type=0,
    goal_node_name="node_A",
)

# Wait for the move result (async)
result = await sdk.move.get_move_result(robot_model="AMR001")

# Jog
sdk.move.send_move_jog(robot_model="AMR001", vx=0.3, vy=0.0, wz=0.0)

# Multi-path
sdk.move.send_multi_path(robot_model="AMR001", path=["node_A", "node_B", "node_C"])

6. Manipulate SDK (RBManipulateSDK)

from rb_sdk import RBManipulateSDK

sdk = RBManipulateSDK()

Submodules

Attribute Class Main features
sdk.move ManipulateMoveSDK Joint/linear/arc moves, jog, servo/online, admittance, weaving, conveyor
sdk.program ManipulateProgramSDK Program run/stop/resume, pinpoint, tool output
sdk.config ManipulateConfigSDK Tool, user frame, collision parameters, speed/impedance/freedrive settings
sdk.io ManipulateIOSDK Side/flange/ext DIO·AIO output, pulses, bit combinations, IO function settings
sdk.get_data ManipulateGetDataSDK Variable queries, relative/absolute coordinate calculation
sdk.point ManipulatePointSDK Point and coordinate registration
sdk.service ManipulateServiceSDK Mini tab features
sdk.maintenance ManipulateMaintenanceSDK Administrator settings
sdk.state ManipulateStateSDK whoami, power/servo/reference control, real-time state subscription

move module — main methods

Method Description
call_move_j Joint-space move
call_move_l Linear move
call_move_cir_axis Axis-based arc move
call_move_cir_threepoint Three-point arc move
call_move_home Move to home position
call_move_jb_clr/add/run Register/run joint blending path
call_move_lb_clr/add/run Register/run linear blending path
call_move_xb_clr/add/run Register/run X blending path
call_smoothjog_j/l Smooth jog (joint/linear)
call_tickjog_j/l Tick jog (joint/linear)
call_approach_j/l Approach move
call_servo_j/l Servo-mode joint/linear move
call_online_j/l Online trajectory joint/linear
call_admittance_force_on/off/change Admittance force control
call_arc_sensing_on/off Arc sensing control
call_tcp_weaving_on/off TCP weaving control
call_base_conveyor_on/off/speed Base conveyor control

Move examples

# Joint move
sdk.move.call_move_j(
    robot_model="C500920",
    target={"tar_values": [0, 0, 90, 0, 90, 0], "tar_frame": 0, "tar_unit": 1},
    speed={"spd_mode": 1, "spd_vel_para": 60, "spd_acc_para": 120},
)

# Linear move
sdk.move.call_move_l(
    robot_model="C500920",
    target={"tar_values": [400, 0, 500, 0, 180, 0], "tar_frame": 1, "tar_unit": 0},
)

# Move relative to a reference position
sdk.move.call_move_j(
    robot_model="C500920",
    target={"tar_values": [10, 0, 0, 0, 0, 0], "tar_frame": 0, "tar_unit": 1},
    reference_value=[0, 0, 90, 0, 90, 0],  # current reference value
)

# Power and servo control
sdk.state.call_powercontrol(robot_model="C500920", control=1)
sdk.state.call_servocontrol(robot_model="C500920", control=1)

7. RB-Y1 SDK (RBRby1SDK)

An implementation that binds the official rby1-sdk (C++) directly with pybind11. The pure-Python wrappers (rby1.py, rby1_sdk/*) are deprecated; the same entry point name (RBRby1SDK) now comes from rb_sdk.rb_sdk_cpp (C++ extension). Official types (RobotCommandBuilder, etc.) are accessed via from rb_sdk import rby1.

It is a process singleton. Every public method is an async def by default, with robot_model as the first argument and flow_manager_args as the last, and each has a synchronous counterpart at sdk.sync.<method>.

from rb_sdk import RBRby1SDK, rby1

sdk = RBRby1SDK()

async def main():
    # If endpoint is omitted, env RBY1_HOST is used (default 192.168.30.1:50051). Re-calling with the same endpoint/model is idempotent.
    await sdk.connect_robot(endpoint="192.168.100.51:50051", model="a")
    print(sdk.model, sdk.is_robot_connected())

    await sdk.power_on(robot_model="a", dev_name=".*")
    await sdk.servo_on(robot_model="a", dev_name=".*")

    state = await sdk.get_state(robot_model="a")  # rby1.RobotState_A

    # State stream: a 2-arg callback receives (state, control_manager_state). Coroutine callbacks run on the event loop, latest value only
    async def on_state(state, cms):
        ...
    await sdk.start_state_update(robot_model="a", callback=on_state, rate=20)

    builder = rby1.RobotCommandBuilder()  # build commands with the official builder
    handle = await sdk.send_command(robot_model="a", builder=builder)
    await handle.wait()  # cancelling the await also stops the robot command via the official SDK Cancel

In synchronous contexts (PyFM Steps, etc.), call sdk.sync.<method> directly.

sdk.sync.connect_robot(model="a")
sdk.sync.power_on(robot_model="a", dev_name=".*")
state = sdk.sync.get_state(robot_model="a")

Errors are raised as RBY1Error / RBY1ConnectionError (both RuntimeError subclasses).

Submodule initialization (required for developers)

rby1-sdk/qdldl are vendored as git submodules (backend/packages/rb_sdk/src/rb_sdk/cpp/lib/{rby1-sdk,qdldl}), so they must be initialized after the first clone. Builds run only in the Docker build image (make backend.sdk-core; direct local builds are not supported).

git submodule update --init --recursive
# When bumping the upstream version (e.g. v0.10.0 → next tag)
cd backend/packages/rb_sdk/src/rb_sdk/cpp/lib/rby1-sdk
git fetch --tags && git checkout <tag>
cd - && git submodule update --init --recursive
make backend.sdk-core

The mingw build patch (backend/packages/rb_sdk/src/rb_sdk/cpp/cmake/rby1_sdk_mingw.patch) is applied against the upstream sources, so if the submodule version changes and the patch no longer applies, the CMake configure step fails immediately (in that case, regenerate the patch against the new version).


8. FlowManagerArgs integration (PyFM)

When calling SDK methods from a PyFM Step, passing flow_manager_args automatically handles the done callback, waiting for motion completion, variable binding, and so on.

# Inside a PyFM Step
def execute(self, flow_manager_args):
    sdk.move.call_move_j(
        robot_model="C500920",
        target={"tar_values": [0, 0, 0, 0, 0, 0], "tar_frame": 0, "tar_unit": 0},
        flow_manager_args=flow_manager_args,  # done() callback is called automatically
    )

If flow_manager_args is omitted, the call is blocking.


9. Architecture notes

Per-process singleton

RBBaseSDK (RBAmrSDK, RBManipulateSDK) is a singleton keyed by (pid, cls). Calling the constructor multiple times in the same process returns the same instance. The ZenohClient is also shared, one per PID.

a = RBManipulateSDK()
b = RBManipulateSDK()
assert a is b  # True

Automatic error wrapping

Every public instance method of a class inheriting RBBaseSDK is automatically wrapped in a common try/except by __init_subclass__. On ZenohNoReply / ZenohTransportError, it reconnects automatically and retries once.

Shutting down the SDK

sdk.close()                         # clean up the current instance
RBBaseSDK.close_all_for_pid()       # clean up all SDK instances in the current process

10. Notes

  • RBRby1SDK is a process singleton, and there is one robot gRPC connection per process (swap it with connect_robot).
  • If the connection targets (zenoh, rby1 endpoint, Muscat HTTP) are not ready, a runtime exception is raised.
  • When using the SDK from an external PC, the firewall must allow 7447/TCP (zenoh) and 8000/TCP in both directions.
  • use_directly=True is applied even on singleton re-entry. However, it does not propagate to sub-SDKs (sdk.move, etc.), so _directly methods must be defined on the top-level SDK.

11. Subscribe / Queryable

You can subclass or use the SDK directly to receive Zenoh events (subscribe) or register RPC responders (queryable).

11-1. zenoh_subscribe — topic subscription (decorator)

from rb_sdk import RBManipulateSDK
from rb_zenoh.schema import SubscribeOptions, OverflowPolicy

sdk = RBManipulateSDK()

# ── Pattern 1: dict payload (JSON topic) ──
@sdk.zenoh_subscribe("amr/AMR001/status")
def on_status(*, dict_payload: dict | None, **kwargs):
    print("status:", dict_payload)

# ── Pattern 2: Object API (T class) — recommended ──
# With flatbuffer_obj_t, a T object deserialized via InitFromPackedBuf is passed as obj_payload
# T class fields are accessed directly as attributes
from rb_flat_buffers.IPC.State_Core import State_CoreT

@sdk.zenoh_subscribe(
    "C500920/state_core",
    flatbuffer_obj_t=State_CoreT,
    opts=SubscribeOptions(parse_dict_payload=False),
)
def on_state_core(*, obj_payload: State_CoreT | None, **kwargs):
    if obj_payload is None:
        return
    print("motion mode:", obj_payload.motionMode)  # attribute access

# ── Pattern 3: Table API (mv + GetRootAs) — lazy access, when performance matters ──
# Without flatbuffer_obj_t → receive mv (memoryview) and parse manually
# GetRootAs lazily accesses only the fields you need, so it is faster than the T class
from rb_flat_buffers.IPC.State_Core import State_Core

@sdk.zenoh_subscribe(
    "C500920/state_core",
    opts=SubscribeOptions(parse_dict_payload=False),
)
def on_state_core_mv(*, mv=None, **kwargs):
    if mv is None:
        return
    obj = State_Core.GetRootAs(mv, 0)
    print("motion mode:", obj.MotionMode())  # method call

zenoh_subscribe arguments

Argument Type Default Description
topic str (required) Zenoh key expression (e.g. "amr/{model}/status")
flatbuffer_obj_t FlatBuffer T class | None None Set to deserialize as FlatBuffer. If None, the callback receives mv: memoryview
opts SubscribeOptions | None None Dispatch / overflow options

SubscribeOptions fields

Field Default Description
dispatch "immediate" "immediate": callback runs on the receive thread. "queue": C++ bounded queue + dedicated dispatch thread
parse_dict_payload True Set to False when receiving FlatBuffers
overflow DROP_OLDEST DROP_OLDEST / DROP_NEW / LATEST_ONLY
maxsize 50 Max size of the C++ queue in "queue" mode
rate_limit_per_sec None Max callback invocations per second
sample_every 1 Deliver only 1 of every N samples (1 = all)
max_async_inflight 1 Number of async callbacks allowed to run concurrently

Direct subscribe (when you need to keep the handle)

Calling zenoh_client.subscribe() directly instead of the decorator lets you manage the handle yourself.

sub_handle = sdk.zenoh_client.subscribe(
    "amr/AMR001/moveStatus",
    callback,
    flatbuffer_obj_t=MoveStatusT,
    options=SubscribeOptions(dispatch="queue", overflow=OverflowPolicy.LATEST_ONLY),
)

# Unsubscribe
sub_handle.close()

11-2. zenoh_queryable — RPC responder (decorator)

When a remote get(keyexpr) request arrives, the registered handler is called and returns the reply.

from rb_sdk import RBManipulateSDK

sdk = RBManipulateSDK()

# dict request (no payload) → dict reply
# params is a dict[str, str] parsed from the URL query string (e.g. ?model=C500920)
@sdk.zenoh_queryable("my_service/robot_status")
def handle_status_query(*, params: dict[str, str]) -> dict:
    return {"status": "ok", "model": params.get("model")}

# FlatBuffer request → FlatBuffer reply
from rb_flat_buffers.manipulate.RB_Functions import RB_FunctionsT

@sdk.zenoh_queryable(
    "my_service/move_j",
    flatbuffer_req_T_class=RB_FunctionsT,
    flatbuffer_res_buf_size=256,
)
def handle_move_j(*, req: RB_FunctionsT, params: dict[str, str]) -> RB_FunctionsT:
    res = RB_FunctionsT()
    res.returnValue = 0
    return res

zenoh_queryable arguments

Argument Type Default Description
keyexpr str (required) Zenoh key expression (e.g. "my_service/status")
flatbuffer_req_T_class FlatBuffer T class | None None Set to deserialize the request payload as FlatBuffer
flatbuffer_res_buf_size int | None None FlatBuffer reply serialization buffer size (bytes). Required for FlatBuffer replies

Duplicate registration guard

If a queryable is already registered with the same keyexpr, a warning is printed and the existing handler is kept. It is released automatically on SDK close().


12. License / Contact

© Rainbow Robotics. Issues/questions: GitHub Issues

Metadata

Release files for rainbow-rb-sdk 0.10.6

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

Built distributions (wheels)

Table of built distributions (wheels) for rainbow-rb-sdk 0.10.6
File Actions
rainbow_rb_sdk-0.10.6-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for rainbow_rb_sdk-0.10.6-cp313-cp313-win_amd64.whl
rainbow_rb_sdk-0.10.6-cp313-cp313-manylinux_2_35_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.35+ x86-64 Details for rainbow_rb_sdk-0.10.6-cp313-cp313-manylinux_2_35_x86_64.whl
rainbow_rb_sdk-0.10.6-cp313-cp313-manylinux_2_35_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.35+ ARM64 Details for rainbow_rb_sdk-0.10.6-cp313-cp313-manylinux_2_35_aarch64.whl
rainbow_rb_sdk-0.10.6-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for rainbow_rb_sdk-0.10.6-cp312-cp312-win_amd64.whl
rainbow_rb_sdk-0.10.6-cp312-cp312-manylinux_2_35_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.35+ x86-64 Details for rainbow_rb_sdk-0.10.6-cp312-cp312-manylinux_2_35_x86_64.whl
rainbow_rb_sdk-0.10.6-cp312-cp312-manylinux_2_35_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.35+ ARM64 Details for rainbow_rb_sdk-0.10.6-cp312-cp312-manylinux_2_35_aarch64.whl
rainbow_rb_sdk-0.10.6-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for rainbow_rb_sdk-0.10.6-cp311-cp311-win_amd64.whl
rainbow_rb_sdk-0.10.6-cp311-cp311-manylinux_2_35_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.35+ x86-64 Details for rainbow_rb_sdk-0.10.6-cp311-cp311-manylinux_2_35_x86_64.whl
rainbow_rb_sdk-0.10.6-cp311-cp311-manylinux_2_35_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.35+ ARM64 Details for rainbow_rb_sdk-0.10.6-cp311-cp311-manylinux_2_35_aarch64.whl

Total release size: 148.8 MB

Release files / rainbow_rb_sdk-0.10.6-cp313-cp313-win_amd64.whl

Download URL rainbow_rb_sdk-0.10.6-cp313-cp313-win_amd64.whl
Size 14.9 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
87fb713f44ed073140aeca2c740571018717ceeebeae42445c3fd183abce3462
BLAKE2b-256 checksum
How to use checksums
8aa65e80e37106e388194b3f9bce704c07e6898659e6dc9a9a0e0d6cfbe2f339
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_sdk-0.10.6-cp313-cp313-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_sdk-0.10.6-cp313-cp313-manylinux_2_35_x86_64.whl
Size 17.8 MB
Tags CPython 3.13 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
956dcfa807b749927eabb7e066dcacc0534a57ab95717b873835b024cf64f3bb
BLAKE2b-256 checksum
How to use checksums
d93a7b678eff0813eedfc478a066011506e808fad3c0c4a9f7cd1b6a8cb157ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_sdk-0.10.6-cp313-cp313-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_sdk-0.10.6-cp313-cp313-manylinux_2_35_aarch64.whl
Size 17.0 MB
Tags CPython 3.13 Linux glibc 2.35+ ARM64
SHA-256 checksum
How to use checksums
e4d975a00bfccc12d58c445cb4f55a5202a9cef1afb1e339ac432f769ac18b3b
BLAKE2b-256 checksum
How to use checksums
a99fe82e14b4870c5415372ec5d8d51662f25385df3b607d6049904739575697
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_sdk-0.10.6-cp312-cp312-win_amd64.whl

Download URL rainbow_rb_sdk-0.10.6-cp312-cp312-win_amd64.whl
Size 14.9 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
3e7eb299d84048cf9befe51af5eddb8bc730e9700f9783d4e032fd89c10f4918
BLAKE2b-256 checksum
How to use checksums
ecc7272b45fb6b04c6ba445d90a4b4f913258ca13c0bf5d1a0f6789366b4577f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_sdk-0.10.6-cp312-cp312-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_sdk-0.10.6-cp312-cp312-manylinux_2_35_x86_64.whl
Size 17.8 MB
Tags CPython 3.12 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
f5d43c53eb91af6252aa4a1f8e2662a45efe0b388727775d2f3540a1a9035032
BLAKE2b-256 checksum
How to use checksums
76c1d2501bdcf1dad23de0b0340d1c182901afefff205cb5c1b863d507874f5d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_sdk-0.10.6-cp312-cp312-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_sdk-0.10.6-cp312-cp312-manylinux_2_35_aarch64.whl
Size 17.0 MB
Tags CPython 3.12 Linux glibc 2.35+ ARM64
SHA-256 checksum
How to use checksums
87676a0eece7b3a382a5da50cf7a5d4f4cb7fab3ca0c83de2b4ec2e8cbd5a6e9
BLAKE2b-256 checksum
How to use checksums
f0c0b69699f3ed68f40c0b5285fa5701cac1c01fc2fe81b0f74d0e55ee86b62b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_sdk-0.10.6-cp311-cp311-win_amd64.whl

Download URL rainbow_rb_sdk-0.10.6-cp311-cp311-win_amd64.whl
Size 14.6 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
9f0a86a645fddd39c13d16f8b51b207636e0a4e0b12edd1f1dad17e5d322e244
BLAKE2b-256 checksum
How to use checksums
1332c3963a3aa14e6e28b9e1df33094332cacf482da39a178bf50b68fc336acd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_sdk-0.10.6-cp311-cp311-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_sdk-0.10.6-cp311-cp311-manylinux_2_35_x86_64.whl
Size 17.8 MB
Tags CPython 3.11 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
23009b268aec1312c394e13a446d1ef01b3de934427383c1bd1853cf14df9eaa
BLAKE2b-256 checksum
How to use checksums
99d1acf2882cac3b82feebdeaa809d5a0c7c097c7240d4b3ba99323197895998
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_sdk-0.10.6-cp311-cp311-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_sdk-0.10.6-cp311-cp311-manylinux_2_35_aarch64.whl
Size 17.0 MB
Tags CPython 3.11 Linux glibc 2.35+ ARM64
SHA-256 checksum
How to use checksums
fbbec0b5e4725b45d7c3bad3710eb8e705ac5925ce19683c0e4dbdbd5ca87d24
BLAKE2b-256 checksum
How to use checksums
01b0f0e14422ae51cd25f5fe274a0233b6651b8d1b2e8a3a0d69f15e71735c9b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Security for rainbow-rb-sdk 0.10.6

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.10.6 This release

9 release files No provenance

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