Skip to content

anyio as Sole Async Backend

See also: Invariants · Migration: curio → anyio

Decision

3.0.0 removed curio support entirely. anyio (asyncio, trio, asyncio+uvloop) is the sole backend. BTreeRunner(backend=) replaces the old BTreeRunner(disable_curio=) parameter.

Context

The library originally supported curio as an alternative async backend alongside asyncio. Maintaining curio compatibility required conditional code paths in BTreeRunner, separate CI matrix entries, and a [curio] optional dependency group.

Why Drop Curio

curio is effectively unmaintained. No releases since 2021. The anyio abstraction covers asyncio and trio — the two backends with active development and ecosystem support.

Maintaining two backends doubled the test surface. Conditional code paths in BTreeRunner, separate CI matrix entries, and a [curio] optional dep group — all for a backend whose user base was small relative to asyncio and trio.

anyio's Backend literal ("asyncio", "trio", "asyncio+uvloop") provides the same flexibility with a maintained abstraction layer. Switching backends is a one-argument change at BTreeRunner construction.

Trade-offs

  • Existing curio users must migrate (migration guide at docs/migration/curio-to-anyio.md)
  • anyio adds a dependency that was previously optional — now always required