- Added the
feed_data()
method to theBufferedByteReceiveStream
class, 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.ContextManagerMixin
andanyio.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_closing
to allow wakinganyio.wait_readable
andanyio.wait_writable
before 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_interpreters
module to use the publicconcurrent.interpreters
API 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
, orNone
otherwise. (#913; PR by @Enegg) - Fixed rollover boundary check in
SpooledTemporaryFile
so 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_interpreter
with Python 3.14.0b2 (#926; PR by @hroncok) - Fixed
SyntaxWarning
on Python 3.14 aboutreturn
infinally
(#816) - Fixed RunVar name conflicts. RunVar instances with the same name should not share storage (#880; PR by @vimfu)
- Renamed the
BrokenWorkerIntepreter
exception toBrokenWorkerInterpreter
. The old name is available as a deprecated alias. (#938; PR by @ayussh-verma) - Fixed an edge case in
CapacityLimiter
on 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)