rpds-py
Python bindings to Rust's persistent data structures (rpds)
Install
rpds-py on PyPI
pip
pip install rpds-pyuv
uv add rpds-pypoetry
poetry add rpds-pyPackage facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.11) |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | none |
| Maintenance | actively maintained — 44 days since the last release |
| First released | |
| Popularity | one of the 100 most-downloaded packages on PyPI (30-day window, as of 2026-08-13) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-13) |
Evidence: rpds_py-2026.6.3-cp311-cp311-macosx_10_12_x86_64.whl; rpds_py-2026.6.3-cp311-cp311-macosx_11_0_arm64.whl; rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl; rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl; rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl; rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; rpds_py-2026.6.3-cp311-cp311-manylinux_2_31_riscv64.whl; rpds_py-2026.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl; rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_aarch64.whl; rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_i686.whl; rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_x86_64.whl; rpds_py-2026.6.3-cp311-cp311-win32.whl; rpds_py-2026.6.3-cp311-cp311-win_amd64.whl; rpds_py-2026.6.3-cp311-cp311-win_arm64.whl; rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl; rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl; rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl; rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Keywords: data structures, rust, persistent
About rpds-py
from the package's own PyPI description — quoted content, verbatim
===========
rpds.py
===========
|PyPI| |Pythons| |CI|
.. |PyPI| image:: https://img.shields.io/pypi/v/rpds-py.svg :alt: PyPI version :target: https://pypi.org/project/rpds-py/
.. |Pythons| image:: https://img.shields.io/pypi/pyversions/rpds-py.svg :alt: Supported Python versions :target: https://pypi.org/project/rpds-py/
.. |CI| image:: https://github.com/crate-py/rpds/workflows/CI/badge.svg :alt: Build status :target: https://github.com/crate-py/rpds/actions?query=workflow%3ACI
.. |ReadTheDocs| image:: https://readthedocs.org/projects/referencing/badge/?version=stable&style=flat :alt: ReadTheDocs status :target: https://referencing.readthedocs.io/en/stable/
Python bindings to the Rust rpds crate <https://docs.rs/rpds/>_ for persistent data structures.
What's here is quite minimal (in transparency, it was written initially to support replacing pyrsistent in the referencing library <https://github.com/python-jsonschema/referencing>_).
If you see something missing (which is very likely), a PR is definitely welcome to add it.
Installation
The distribution on PyPI is named rpds.py (equivalently rpds-py), and thus can be...
Read as markdown · JSON record · Source repository · Homepage · Docs
AI interpretation — verify before relying
AI-generated interpretation of the package facts above; every digit, version, license, or vulnerability id it cites is grounded in the facts already shown on this page
rpds-py provides Python bindings to Rust's rpds crate, offering persistent (immutable) data structures including hash trie maps, hash trie sets, and linked lists with structural sharing for efficient memory use.
Medium install friction due to Rust compilation requirement at build time; wheels are pre-built for common platforms (CPython 3.11–3.15, multiple architectures) but source installs need a Rust toolchain. Package is actively maintained with a recent release 44 days ago.
MIT license permits commercial and private use with minimal restrictions, making it suitable for most projects.
Usage
pip install rpds-py
from rpds import HashTrieMap, HashTrieSet, List
m = HashTrieMap({"foo": "bar"})
m_updated = m.insert("baz", "quux")
s = HashTrieSet({"a", "b"})
s_updated = s.insert("c")
L = List([1, 2, 3])
L_updated = L.push_front(0)
Requires Python ≥3.11; if installing from source, a Rust toolchain must be available at build time.
Verdict: rpds-py is a well-maintained, actively developed binding to a mature Rust library, offering high-performance persistent data structures with no runtime dependencies. The MIT license is permissive, and pre-built wheels minimize friction on common platforms. Suitable for projects needing efficient immutable collections, though source builds require Rust.
Needs verification
- Performance characteristics compared to pyrsistent or standard Python collections in typical use cases
- Completeness of the rpds crate API surface exposed by the Python bindings
- Community adoption and real-world usage patterns beyond the referencing library
Similar packages
permissive · top 100 on PyPI
pyrsistentpermissive · top 1,000 on PyPI
immutabledictpermissive · top 1,000 on PyPI
referencingpermissive · top 100 on PyPI
jsonschema-specificationspermissive · top 100 on PyPI
uuid-utilspermissive · top 1,000 on PyPI
yarlpermissive · top 100 on PyPI
databricks-labs-blueprintunclear · top 1,000 on PyPI
srslypermissive · top 1,000 on PyPI
jsonschemapermissive · top 100 on PyPI