This page is for contributors and readers of the codebase.
Quick Rust check:
cargo checkBuild the extension and install it into the current environment:
uv run --with maturin maturin develop --releaseuv run pytestIf you want to focus on one area:
uv run pytest tests/test_run.py
uv run pytest tests/test_compat.py
uv run pytest tests/test_tls.pyWith MkDocs installed:
mkdocs serve
mkdocs buildOr with uv without adding a permanent dependency:
uvx --from mkdocs mkdocs serve
uvx --from mkdocs mkdocs buildIf you are new to the project, this order works well:
python/rsloop/__init__.pypython/rsloop/_run.pypython/rsloop/_loop_compat.pysrc/lib.rssrc/python_api.rssrc/loop_core.rs
This order moves from simple Python wrappers to the larger Rust internals.
When you add or debug a feature, it helps to ask:
- Is this a Python wrapper issue or a Rust implementation issue?
- Does the behavior need to match standard
asyncioexactly? - Is the feature cross-platform, Unix-only, or Windows-specific?
- Do the tests already describe the expected behavior?
Those four questions usually point you to the right part of the codebase.
Profiling support exists behind the Rust profiler feature and uses Tracy.
Example build:
uv run --with maturin maturin develop --release --features profilerThe Python API then exposes:
rsloop.profile()rsloop.start_profiler()rsloop.stop_profiler()
This is still an alpha-stage project.
It already covers a lot of asyncio surface area, but some areas are still evolving:
- TLS compatibility
- transport internals
- helper-thread removal in older paths
- platform-specific behavior differences
That makes the repository a good place to learn from, but also a project where careful testing matters.