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.4

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.4
File Actions
rainbow_rb_sdk-0.10.4-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for rainbow_rb_sdk-0.10.4-cp313-cp313-win_amd64.whl
rainbow_rb_sdk-0.10.4-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.4-cp313-cp313-manylinux_2_35_x86_64.whl
rainbow_rb_sdk-0.10.4-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.4-cp313-cp313-manylinux_2_35_aarch64.whl
rainbow_rb_sdk-0.10.4-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for rainbow_rb_sdk-0.10.4-cp312-cp312-win_amd64.whl
rainbow_rb_sdk-0.10.4-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.4-cp312-cp312-manylinux_2_35_x86_64.whl
rainbow_rb_sdk-0.10.4-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.4-cp312-cp312-manylinux_2_35_aarch64.whl
rainbow_rb_sdk-0.10.4-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for rainbow_rb_sdk-0.10.4-cp311-cp311-win_amd64.whl
rainbow_rb_sdk-0.10.4-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.4-cp311-cp311-manylinux_2_35_x86_64.whl
rainbow_rb_sdk-0.10.4-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.4-cp311-cp311-manylinux_2_35_aarch64.whl

Total release size: 148.8 MB

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

Download URL rainbow_rb_sdk-0.10.4-cp313-cp313-win_amd64.whl
Size 14.9 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
a4b494ae2a9da699c9becec8a9bf14216f13c9f666ae3a3b061fdebe8d65ce8c
BLAKE2b-256 checksum
How to use checksums
68db6e3ed87e322f0a4850709e2a001a460ef1aeec8c4012f5517656c593b254
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.4-cp313-cp313-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_sdk-0.10.4-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
d95d9ae8328e06defa00123f2e03a6fc26f8ed8577e468e065f40069e594701c
BLAKE2b-256 checksum
How to use checksums
5eb06ff09da4ec16472fe7536c4672697c66515ae6294a64c31459f423d264b4
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.4-cp313-cp313-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_sdk-0.10.4-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
e131c7d71b755bef18ae01713a0502fc941ca0daf89bbfbcafde597ea4a07007
BLAKE2b-256 checksum
How to use checksums
89d1412f04c27f896b246c981f3e50ca9d11fdd45ec2d19033d642e63069f46b
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.4-cp312-cp312-win_amd64.whl

Download URL rainbow_rb_sdk-0.10.4-cp312-cp312-win_amd64.whl
Size 14.9 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
9607ed079540be395de989394ed34c59e5ddc2649ad0f56374ca817a55bc56b8
BLAKE2b-256 checksum
How to use checksums
3b19667c161cdf782c507397bc8d05f430f14e70debb3f823271a42d05aa596a
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.4-cp312-cp312-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_sdk-0.10.4-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
1899a2b91b144292292dc9fbfef48719be21bbf038d9d4a18dfc7a3be53a40ad
BLAKE2b-256 checksum
How to use checksums
c0848f0af353347ed7910e7bbadafddbcf12513cd403ebfdb4fd385141cafd7e
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.4-cp312-cp312-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_sdk-0.10.4-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
7ee0c2e5790590dc246c74c3a099317ca1cb6e99be40abb33b7ab6d47b11fc9f
BLAKE2b-256 checksum
How to use checksums
3fd122ad951acc80c3d49b40910f59d74454a069dceb1583cdbcea3bfac3f98b
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.4-cp311-cp311-win_amd64.whl

Download URL rainbow_rb_sdk-0.10.4-cp311-cp311-win_amd64.whl
Size 14.6 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
80a105588b78a6b4316012f0b312e8c718b9c3446c2ff625eb57bf6837c1dec0
BLAKE2b-256 checksum
How to use checksums
20cbef77fa75c0d82d44f64fcc63138dcd48ce16fed6355d7603b936b89dc88a
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.4-cp311-cp311-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_sdk-0.10.4-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
b6099ecdc5bb15dc94ea916e6d9f22ccab0378e7e88bb909ae1b0ddc9338c44d
BLAKE2b-256 checksum
How to use checksums
643d1ceecde3aee23b7c795c6ec00c5c7aab7d53f30cff22f54844d470ad71d3
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.4-cp311-cp311-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_sdk-0.10.4-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
7881a0238019a2f3d58505fd22eb3bab4aef9e45c75eec9cd20e237b156b652f
BLAKE2b-256 checksum
How to use checksums
563dd57ea305bbab5759bbaa614402d8e64366853d6ce2417d36171edeeb908b
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.4

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.4 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