noio
There are many opinions on the right way to do IO. There are so many libraries. Some use regular functions, while some use coroutines. Some use threads. Some use green threads. Some existing abstractions only work with coroutines on single threads. You just want people to be able to use your library.
noio is a minimal IO interface
that provides primitives that work no matter what IO the user chooses,
with clear documentation of any compatibility limitations.
Getting Started
noio believes that coroutines are an advanced feature
that should be avoided wherever reasonable.
That includes getting started writing a library with noio.
When writing a new library, start with regular functions,
which are able to support threads and green threads.
It might look something like this:
def greeting(name: str) -> str:
return f"Hello, {name}!"
assert greeting("world") == "Hello, world!"
When it's important for your function to also support coroutine libraries
like asyncio, trio and anyio,
just update it to look like something like this:
import asyncio
import noio
@noio.routine
async def greeting(name: str) -> str:
return f"Hello, {name}!"
@noio.routine
async def introduction(name: str) -> str:
return await greeting.a(name)
assert greeting("world") == "Hello, world!"
assert introduction("world") == "Hello, world!"
assert asyncio.run(introduction.a("world")) == "Hello, world!"
When existing callers call your function the same way they used to,
it will work without modification
because it will drive the coroutine implementation to completion directly.
Other routines will await a new .a() version
that allows the run loop to handle scheduling.
Finding all the places to convert can be tricky,
so noio will raise an error
if a routine implementation calls another routine with a regular function call.
Contributing
Before making changes, read CONTRIBUTING.md.
Metadata
Release files for noio 0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| noio-0.1.tar.gz | 12.6 kB | With provenance | Details for noio-0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| noio-0.1-py3-none-any.whl | Python 3 | none | any | Details for noio-0.1-py3-none-any.whl |
Total release size: 25.7 kB
Release files / noio-0.1.tar.gz
| Download URL | noio-0.1.tar.gz |
|---|---|
| Size | 12.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c649c84e4a231af2a2bc246c3ce7ecb770ed98e9096024bdb40eee566c424e1b
|
|
BLAKE2b-256 checksum How to use checksums |
3e042d1baaa7b04612779cb4c1026a82a02b491228b43b67b758637648b1f668
|
| 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 Oct 17, 2026.
Transparency logRelease files / noio-0.1-py3-none-any.whl
| Download URL | noio-0.1-py3-none-any.whl |
|---|---|
| Size | 13.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e4848fc00e1e7ad13a77f2acb668a1d07d1c9e50cc7e0130288622ac9257a4cd
|
|
BLAKE2b-256 checksum How to use checksums |
d4484cc08ed0e720a0d1edc6980385bc8c3bf78bf9bc0f37ce3c49b1f9c11dd9
|
| 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 Oct 17, 2026.
Transparency logSecurity for noio 0.1
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for noio-0.1.tar.gz
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 Oct 17, 2026.
Transparency logA 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.