Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

updated: 2025-12-05T17:41:33.976811096-08:00[America/Los_Angeles]


README

ry

PyPI PyPI - Python Version PyPI - Wheel PyPI - Downloads PyPI - Status PyPI - License

A growing collection of Python shims around Rust crates; fast, async-first, and ergonomic.

DOCS: ryo3.dev (WIP)

API: ryo3.dev/api

This is a work in progress ~ feedback and PRs are welcome.

Highlights

  • Async-first HTTP client: Built on reqwest, with a fetch-like API. Supports streaming, zero-copy IO via the buffer protocol, timeouts, redirect-following, and native JSON parsing via jiter.
  • Async file I/O: Built on tokio, with an AsyncFile API similar to aiofiles and anyio’s async-file api. Supports buffered reads/writes, truncation, streaming reads, and anyio compatibility.
  • (de)compression: (de)compression tools for zstd, brotli, gzip, and bzip2.
  • Datetime utilities via jiff: Fast, accurate, timezone-aware datetime parsing and formatting, with datetime interop and much more
  • Miscellaneous bindings: Includes crates like globset, walkdir, sqlformat, unindent, twox-hash, and more.
  • Designed for ergonomics: Async where it matters. Simple where possible. Python-native behavior with minimal friction.
  • Type Annotated: All public APIs are (painstakingly) type annotated.
  • Performant: Speed without the words “blazingly fast.” 1

Install

pip install ry
uv add ry

# check install
python -m ry

Quickstart

Check out the examples directory for some quickstart examples.


What?

  • ry – the python package
  • ryo3-* – the rust crates that are used by ry and possibly your own pyo3-based python package

Who?

FAQ

(aka: questions that I have been asking myself)

  • Q: Why?
    • A: I (jesse) needed several hashing functions for python and then kept adding things as I needed them
  • Q: Does this have anything to do with the (excellent) package manager rye?
    • A: short answer: no. long answer: no, it does not.
  • Q: Why is the repo split into ry and ryo3?
    • A: ry is the python package, ryo3 is a rust crate setup to let you “register” functions you may want if you were writing your own pyo3-python bindings library; maybe someday the ryo3::libs module will be split up into separate packages

Crate bindings

crateryo3-crate
stdryo3-std
bytesryo3-bytes
bzip2ryo3-bzip2
dirsryo3-dirs
globryo3-glob
heckryo3-heck
httpryo3-http
jiterryo3-jiter
reqwestryo3-reqwest
serderyo3-serde
shlexryo3-shlex
sizeryo3-size
sqlformatryo3-sqlformat
tokioryo3-tokio
ulidryo3-ulid
unindentryo3-unindent
urlryo3-url
uuidryo3-uuid
whichryo3-which
Compression~
brotliryo3-brotli
flate2ryo3-flate2
zstdryo3-zstd
Hashing~
fnvryo3-fnv
twox-hashryo3-twox-hash
@BurntSushi~
globsetryo3-globset
jiffryo3-jiff
memchrryo3-memchr
regexryo3-regex
same-fileryo3-same-file
walkdirryo3-walkdir

DEV

  • just is used to run tasks
  • Do not use the phrase blazing fast or any emojis in any PRs or issues or docs
  • type annotations are required
  • ruff used for formatting and linting

SEE ALSO


  1. Release‑version benchmarks of ry (via pytest-benchmark) showed no real performance variance, regardless of whether “blazingly fast” appeared in the README or docs.