NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #67 most downloaded on PyPI
Happy Eyeballs for asyncio
Last release 3 months ago
01 Jul 2026
Ships unpredictably
gaps range from 2 weeks to 1.2 years
Nearly every release is documented
notes for 45 of 45 stable releases
1 version withdrawn
withdrawn after publishing
3 years old
46 releases · first in 2023
Use defaultdict to help with performance ( #239 , e10f335 )
One column per month.
Clear error on empty addr_infos in start_connection ( #222 , 55dd76a )
55dd76a)ce43beb)02a7029)Resolve TypeError on import for Python < 3.9.2 ( #151 , 2042c82 )
2042c82)docs : Publish documentation ( #149 , 4235273 )
Creates an api_reference.rst file to expose the existing documentation for the few functions that have docstrings, as well as add documentation for AddrInfoType and SocketFactoryType. Now, these can be properly pointed to by other projects' documentation.
Detailed Changes: v2.5.0...v2.6.0
Add callback for users to customize socket creation ( #147 , 8e1bc6a )
8e1bc6a)Close runner up sockets in the event there are multiple winners ( #143 , 476a05b )
The first attempt to fix this was to use the cpython staggered race updates in #142 but there is still a race there where there can be multiple winners. Instead we now accept that we will not be able to cancel all coros in time and there will always be a risk of multiple winners. We store all sockets in a set that were not already cleaned up and we close all but the first winner after the staggered race finishes.
Detailed Changes: v2.4.7...v2.4.8
Resolve warnings when running tests ( #144 , e96264a )
Instead of raising SystemExit which causes a RuntimeError,
mock out SystemExit to a new exception
Make sure the event loop is closed in tests
fixes #97
Detailed Changes: v2.4.6...v2.4.7
e96264a)Ensure all timers are cancelled when after staggered race finishes ( #136 , f75891d )
Keep classifiers in project to avoid automatic enrichment ( #134 , 99edb20 )
Co-authored-by: J. Nick Koston nick@koston.org
Co-authored-by: Martin Styk martin.styk@oracle.com
Co-authored-by: J. Nick Koston nick@koston.org
Detailed Changes: v2.4.4...v2.4.5
fix: handle OSError on failure to close socket instead of raising IndexError
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: J. Nick Koston <nick@koston.org> (c542f68)
c542f68)fix: rewrite staggered_race to be race safe
fix: rewrite staggered_race to be race safe (#101)
fix: re-raise RuntimeError when uvloop raises RuntimeError during connect (#105) (c8f1fa9)
fix: copy staggered from standard lib for python 3.12+ (#95) (`c5a4023`)
c5a4023)fix: avoid passing loop to staggered.staggered_race (#94) (`5f80b79`)
5f80b79)docs: fix a trivial typo in README.md (#84) (`f5ae7d4`)
4f2152f)f5ae7d4)fix: correct classifier for license Python-2.0.1 (#83) (`186be05`)
186be05)fix: adjust license to Python-2.0.1 (#82) (`30a2dc5`)
docs: add link to Happy Eyeballs explanation (#73) (`077710c`)
0de1e53)7bbb2bf)56e7ba6)077710c)fix: add missing asyncio to fix truncated package description (#67) (`2644df1`)
2644df1)2644df1)fix: add missing python version classifiers (#65) (`489016f`)
fix: update urls for the new home for this library (#43) (`c6d4358`)
c6d4358)fix: remove test import from tests (#31) (`c529b15`)
feat: avoid _interleave_addrinfos when there is only a single addr_info (#29) (`305f6f1`)
305f6f1)305f6f1)feat: make interleave with pop_addr_infos_interleave optional to match cpython (#28) (`adbc8ad`)
adbc8ad)adbc8ad)feat: add addr_to_addr_info util for converting addr to addr_infos (#27) (`2e25a98`)
2e25a98)2e25a98)feat!: require the full address tuple for the remove_addr_infos util (#26) (`d7e5df1`)
d7e5df1)d7e5df1)fix: move types into a single file (#24) (`8d4cfee`)
feat: add utils (#23) (`d89311d`)
feat: add some more examples to the docs (#21) (`6cd0b5d`)
feat: add coverage for multiple and same exceptions (#20) (`2781b87`)
2781b87)feat: add coverage for setblocking failing (#19) (`f759a08`)
fix: ensure exception error is stringified (#17) (`747cf1d`)
747cf1d)feat: add coverage for unexpected exception (#16) (`bad4874`)
bad4874)feat: add coverage for bind failure with local addresses (#15) (`f71ec23`)
f71ec23)f71ec23)feat: add coverage for passing local addresses (#14) (`72a92e3`)
72a92e3)feat: add example usage (#13) (`707fddc`)
feat!: rename create_connection to start_connection (#12) (`f8b6038`)
f8b6038)feat: add coverage for interleave (#11) (`62817f1`)
feat: add coverage for multi ipv6 (#10) (`6dc8f89`)
feat: add coverage for ipv6 failure (#9) (`7aee8f6`)
feat: improve test coverage (#8) (`afcfe5a`)
feat: improve doc strings (#7) (`3d5f7fd`)
feat: add more tests (#6) (`4428c07`)
feat: optimize for single case (#5) (`c7d72f3`)
feat: optimize for single case (#4) (`d371c46`)
# v0.1.0 (2023-12-09) ## Feature * feat: init (#2) (`c9a9099`)
fix: reserve name on pypi (#1) (`2207f8d`)
Your coding agent can read these notes before it upgrades. Set up the MCP server →