dynibo provides robot kinematics and dynamics for controller development
through a Python API backed by a Rust core. It loads robot models from URDF
and supports manipulators, humanoids, and other robots with fixed or floating
bases.
Features
Fast
Each robot owns reusable storage for native calculations. Contiguous float64
NumPy inputs avoid copies, and array-returning methods accept reusable out=
buffers to avoid allocating a new output array on every call.
To put computation speed in context, we benchmark Dynibo against Pinocchio, an open-source library for robot kinematics and dynamics. The benchmarks use Franka, a fixed-base manipulator with 7 joints, and unitree G1, a floating-base humanoid with 29 joints. The table below shows Dynibo's speedup using the Python interfaces of both libraries.
| Operation | Franka | unitree G1 |
|---|---|---|
| Jacobian | 1.28× | 1.38× |
| RNEA | 1.17× | 1.54× |
| ABA | 1.81× | 1.89× |
Source code to reproduce these results is available in
benches/.
Reliable
Tests cover fixed and floating bases, mixed joint types, external loads, invalid inputs, and repeated use of calculation storage. Numerical results are checked against finite differences, consistency relations between algorithms, and an independent Pinocchio reference. The installed Python package is tested separately. See the test architecture for details.
Easy to Use
Load a URDF with Robot or FloatingRobot, then call kinematics and dynamics
methods directly. Each object manages its internal calculation storage, so
there are no separate Model and Data objects to maintain. Inputs accept
NumPy arrays or Python sequences, and errors are reported as Python exceptions.
Dependencies
Requires Python 3.9 or newer and NumPy 1.23 or newer. Prebuilt wheels bundle the native library.
Quick start
Install the Python package from PyPI:
python -m pip install dynibo
Load a URDF, compute a target-link pose, and reuse an output buffer for its Jacobian:
import numpy as np
from dynibo import Robot
with Robot.from_urdf("robot.urdf") as robot:
tool = robot.link_id("tool")
q = np.zeros(robot.joint_count)
pose = robot.forward_kinematics(q, tool)
jacobian = np.empty(6 * robot.generalized_count)
robot.jacobian(q, tool, out=jacobian)
print(pose.translation)
Replace robot.urdf and tool with your model path and target-link name.
Vector and matrix results are one-dimensional float64 NumPy arrays;
matrices use column-major order.
Floating bases
Use FloatingRobot for floating-base models and pass a BaseState explicitly
to each calculation:
import numpy as np
from dynibo import BaseState, FloatingRobot, Pose
with FloatingRobot.from_urdf("robot.urdf") as robot:
tool = robot.link_id("tool")
q = np.zeros(robot.joint_count)
base = BaseState(frame=Pose(translation=(0.2, 0.0, 0.0)))
pose = robot.forward_kinematics(base, q, tool)
mass = robot.mass_matrix(base, q)
For floating robots, generalized_count == joint_count + 6. Generalized
velocities and forces begin with world-frame angular then linear base components.
Examples and documentation
Complete Python examples are available in
examples/python/.
See the Python guide
for array layouts, output reuse, and thread safety, and the
Python API reference
for complete method documentation.
License
Dynibo code is licensed under MIT.
Metadata
Release files for dynibo 0.5.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 | |
|---|---|---|---|
| dynibo-0.5.0.tar.gz | 182.5 kB | Details |
Built distributions (wheels)
Total release size: 10.7 MB
Release files / dynibo-0.5.0.tar.gz
| Download URL | dynibo-0.5.0.tar.gz |
|---|---|
| Size | 182.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6ea74603f45342cc4c0f250fe4c632565c1d690ad0946ec5ec79537aa20d36cc
|
|
BLAKE2b-256 checksum How to use checksums |
95106ba1f3f83374cbd4f5ec6a40cb1bd1cdd291f111d68b632f741bed034044
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp314-cp314-win_amd64.whl
| Download URL | dynibo-0.5.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 537.8 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
515320e312ee78f77d25beacd6e82961fdf60300b4b38c6bd96c13935b2bb5de
|
|
BLAKE2b-256 checksum How to use checksums |
8bc2aeaceed1d9730797665e23c9bde389a494cf3f70c03b2af93442c6252a78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp314-cp314-manylinux_2_28_x86_64.whl
| Download URL | dynibo-0.5.0-cp314-cp314-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 633.2 kB |
| Tags | CPython 3.14 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4b33f5cc0940fafceda626617b0a1cef70c84c56a627c56ebfc19fb8fad36a15
|
|
BLAKE2b-256 checksum How to use checksums |
366dc81880262d5d770b4e7801d4c1144049ff612bfaf77531833eb442a70e59
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | dynibo-0.5.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 563.7 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
52bb88231ea8b30f36bdee67d42c0033fa453bddbfaa85b9bfbdbe52b3de1a6a
|
|
BLAKE2b-256 checksum How to use checksums |
8a07915abd64d2cb9c4139f799196583e1d80e084057a3b01fc2a92ad33ee0a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp313-cp313-win_amd64.whl
| Download URL | dynibo-0.5.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 538.9 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f43a4a32940e8acafd9930b61cc19279c3e18ea91d49dfe5b0d2917235aabf3a
|
|
BLAKE2b-256 checksum How to use checksums |
4649bd9ed8e378340e55a98c597df0da26b1f163060c4a07b420495e6aa9ce03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | dynibo-0.5.0-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 633.5 kB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
7e28e2dfdf143c670e994dd1649c23d3aec89bf0ec0f60e35100b24242d8975d
|
|
BLAKE2b-256 checksum How to use checksums |
5760647a4f0c07db63c208d837e51e7eb79e0cc8a5c9d9045769c99810fdc429
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | dynibo-0.5.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 564.0 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a4a0323bb65e715eec30adcb64cc2eaa2fe202d6f31572d4c5cfa413b4aaba58
|
|
BLAKE2b-256 checksum How to use checksums |
fd9862453f9e380dcb9a35ff3489629261c8ab3236cdd1895c5c4301eb906151
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp312-cp312-win_amd64.whl
| Download URL | dynibo-0.5.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 538.6 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8bd9ef992224ac8ecff6d362fda1a5307920f283e8fd90933a8c9304551285a5
|
|
BLAKE2b-256 checksum How to use checksums |
9eb2f98267fca86b569f36931b1ffe64314877c3ca9d9057ce2e47f9a1fdbc50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | dynibo-0.5.0-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 633.4 kB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
11d9f876d04fd72756a8700410f0d863aee538eedf0550f098342897d6798727
|
|
BLAKE2b-256 checksum How to use checksums |
ea3d95ec5e77924ddd7397da38234f853af9edcceccb0b5f69a8cc147a675903
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | dynibo-0.5.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 564.0 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
61c418bd087d32efe3a6b4d3b36e4cf2dc15296f42b5aa804c24a8676a833f82
|
|
BLAKE2b-256 checksum How to use checksums |
a46bbec698d987184730e8e0975c46bbcf388e1b8c56a0ba276b7eec924c32fa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp311-cp311-win_amd64.whl
| Download URL | dynibo-0.5.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 545.1 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
0f91dd46daba4e5d975cc697da58d078b966a362499941ce60a91666bc3fba89
|
|
BLAKE2b-256 checksum How to use checksums |
0374f3f01fedbafbcd968342869831a1e4bd4e86ba3e6892d1f287c9987e4945
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | dynibo-0.5.0-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 635.3 kB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
5b1dfea266fe50ed0c8cceee36aa717c0942aa0d95cc8ed4910a5bb12f731a42
|
|
BLAKE2b-256 checksum How to use checksums |
aced4c8a586e79a989912ee18e826404d76479ea34d6154a704ed8485e674ea3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | dynibo-0.5.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 570.5 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6f03dd314a427f672beb29ad336c5d4755f8962f39529b32c81c8b1aaa43b438
|
|
BLAKE2b-256 checksum How to use checksums |
bef47200fc89e6b32c283d3726b40cfe3225f7f2ed0fa7ce9bfab044e50032c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp310-cp310-win_amd64.whl
| Download URL | dynibo-0.5.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 545.5 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a9cc297581f52b43bf15ea007a25ec6b6c1266043076716b8dde60a4f6f8b2b8
|
|
BLAKE2b-256 checksum How to use checksums |
95edab4ccaa1d0b74f3ab46e958a68e710e72265ab8c6eda4daf1b6d225aabb5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | dynibo-0.5.0-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 635.5 kB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
cb93e975470a97d89f432627a8a6db181f767e6b283bd84b9dc37f148cfddad7
|
|
BLAKE2b-256 checksum How to use checksums |
479d17b4ecec285bb56531483ed8e1876750986955f61cfd8bb51f200c88896c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | dynibo-0.5.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 570.8 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e8df5debfc549f2982d56be9b9de32d138acfec0e195c1e4fe5b84e3c335d48c
|
|
BLAKE2b-256 checksum How to use checksums |
b9e179d32d158548468d8264462802645f8c4728b608aa58168d2d610bee05a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp39-cp39-win_amd64.whl
| Download URL | dynibo-0.5.0-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 549.0 kB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
da91ee25ec80a2d4ae954e7e9c1a52295928ffde4f46d10ad5403a72dffa81d1
|
|
BLAKE2b-256 checksum How to use checksums |
84bf46393bf1a4b0c9998391c7c7910dcad5acdf82e070709706fb6a79138f0f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp39-cp39-manylinux_2_28_x86_64.whl
| Download URL | dynibo-0.5.0-cp39-cp39-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 638.4 kB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
e35446f8cb3fcad486846b9cc2733678a96643d449b5d11ba53c5b9a1079e1e9
|
|
BLAKE2b-256 checksum How to use checksums |
472b978a74c76748ca98c24f91c3bc22196f6bca69a6a5ae9708fccdf350f066
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency logRelease files / dynibo-0.5.0-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | dynibo-0.5.0-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 572.9 kB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
03e12b584fa46950b3d1a630f694ce5160e46d6682534b0d3855136bd4e57e41
|
|
BLAKE2b-256 checksum How to use checksums |
ee694902a68bb8bae5aae5c15461583d651eefde9cc5b1d5a945239f9c833a68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 1, 2026.
Transparency log