Skip to main content

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)

Source distribution for noio 0.1
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)

Table of built distributions (wheels) for noio 0.1
File Interpreter ABI Platform Actions
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page