- Added the
feed_data()method to theBufferedByteReceiveStreamclass, allowing users to inject data directly into the buffer - Added various class methods to wrap existing sockets as listeners or socket streams:
SocketListener.from_socket()SocketStream.from_socket()UNIXSocketStream.from_socket()UDPSocket.from_socket()ConnectedUDPSocket.from_socket()UNIXDatagramSocket.from_socket()ConnectedUNIXDatagramSocket.from_socket()
- Added a hierarchy of connectable stream classes for transparently connecting to various remote or local endpoints for exchanging bytes or objects
- Added context manager mix-in classes (
anyio.ContextManagerMixinandanyio.AsyncContextManagerMixin) to help write classes that embed other context managers, particularly cancel scopes or task groups (#905; PR by @agronholm and @tapetersen) - Added the ability to specify the thread name in
start_blocking_portal()(#818; PR by @davidbrochart) - Added
anyio.notify_closingto allow wakinganyio.wait_readableandanyio.wait_writablebefore closing a socket. Among other things, this prevents an OSError on theProactorEventLoop. (#896; PR by @graingert) - Incorporated several documentation improvements from the EuroPython 2025 sprint (special thanks to the sprinters: Emmanuel Okedele, Jan Murre, Euxenia Miruna Goia and Christoffer Fjord)
- Added a documentation page explaining why one might want to use AnyIO's APIs instead of asyncio's
- Updated the
to_interpretersmodule to use the publicconcurrent.interpretersAPI on Python 3.14 or later - Fixed
anyio.Path.copy()andanyio.Path.copy_into()failing on Python 3.14.0a7 - Fixed return annotation of
__aexit__on async context managers. CMs which can suppress exceptions should returnbool, orNoneotherwise. (#913; PR by @Enegg) - Fixed rollover boundary check in
SpooledTemporaryFileso that rollover only occurs when the buffer size exceedsmax_size(#915; PR by @11kkw) - Migrated testing and documentation dependencies from extras to dependency groups
- Fixed compatibility of
anyio.to_interpreterwith Python 3.14.0b2 (#926; PR by @hroncok) - Fixed
SyntaxWarningon Python 3.14 aboutreturninfinally(#816) - Fixed RunVar name conflicts. RunVar instances with the same name should not share storage (#880; PR by @vimfu)
- Renamed the
BrokenWorkerIntepreterexception toBrokenWorkerInterpreter. The old name is available as a deprecated alias. (#938; PR by @ayussh-verma) - Fixed an edge case in
CapacityLimiteron asyncio where a task, waiting to acquire a limiter gets cancelled and is subsequently granted a token from the limiter, but before the cancellation is delivered, and then fails to notify the next waiting task (#947)