NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2438 most downloaded on PyPI
A pure python implementation of multicast DNS service discovery
Last release 19 days ago
30 Aug 2026
Release timing varies
gaps range from 2 weeks to 7 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
271 releases · first in 2014
Improve performance by adding cython pxd for RecordManager (#1241) (`a7dad3d`)
One column per quarter.
Build wheels for cpython 3.12 (#1239) (`58bc154`)
Simplify code to unpack properties (#1237) (`68d9998`)
Context managers in ServiceBrowser and AsyncServiceBrowser (#1233) (`bd8d846`)
Co-authored-by: J. Nick Koston nick@koston.org
Rebuild wheels with cython 3.0.2 (#1236) (`dd637fb`)
Speed up question and answer history with a cython pxd (#1234) (`703ecb2`)
Build failures with older cython 0.29 series (#1232) (`30c3ad9`)
Optimize processing of records in RecordUpdateListener subclasses (#1231) (`3e89294`)
Speed up the service registry with a cython pxd (#1226) (`47d3c7a`)
Optimize unpacking properties in ServiceInfo (#1225) (`1492e41`)
Refactor notify implementation to reduce overhead of adding and removing listeners (#1224) (`ceb92cf`)
Add cython pxd file for _listener.py to improve incoming message processing performance (#1221) (`f459856`)
Cythonize _listener.py to improve incoming message processing performance (#1220) (`9efde8c`)
Improve performance responding to queries (#1217) (`69b33be`)
Expose flag to disable strict name checking in service registration (#1215) (`5df8a57`)
Speed up unpacking text records in ServiceInfo (#1212) (`99a6f98`)
Add a cache to service_type_name (#1211) (`53a694f`)
Revert adding typing to DNSRecord.suppressed_by (#1210) (`3dba5ae`)
Revert DNSIncoming cimport in _dns.pxd (#1209) (`5f14b6d`)
Race with InvalidStateError when async_request times out (#1208) (`2233b6b`)
Speed up processing incoming records (#1206) (`126849c`)
Improve performance of ServiceInfo.async_request (#1205) (`8019a73`)
Cleanup naming from previous refactoring in ServiceInfo (#1202) (`b272d75`)
Pin python-semantic-release to fix release process (#1200) (`c145a23`)
No change re-release to fix wheel builds (#1199) (`8c3a4c8`)
Add missing if TYPE_CHECKING guard to generate_service_query (#1198) (`ac53adf`)
Improve incoming data processing performance (#1194) (`a56c776`)
Add support for sending to a specific addr and port with ServiceInfo.async_request and ServiceInfo.request (#1192) (`405f547`)
Cython3 support (#1190) (`8ae8ba1`)
Reduce debug logging overhead by adding missing checks to datagram_received (#1188) (`ac5c50a`)
Reduce overhead to handle queries and responses (#1184) (`81126b7`)
Speed up answering incoming questions (#1186) (`8f37665`)
Optimize construction of outgoing dns records (#1182) (`fc0341f`)
Reduce overhead to enumerate ip addresses in ServiceInfo (#1181) (`6a85cbf`)
Small internal typing cleanups (#1180) (`f03e511`)
Speed up processing incoming records (#1179) (`d919316`)
74d7ba1)If the exact same packet with a QU question is asked from two different sources in a 1s window we end up ignoring the second one as a duplicate. We should still respond in this case because the client wants a unicast response and the question may not be answered by the previous packet since the response may not be multicast.
fix: include NSEC records in initial broadcast when registering a new service
This also revealed that we do not send NSEC records in the initial broadcast. This needed to be fixed in this PR as well for everything to work as expected since all the tests would fail with 2 updates otherwise.
Small speed up to fetch dns addresses from ServiceInfo (#1176) (`4deaa6e`)
Improve performance of ServiceBrowser outgoing query scheduler (#1170) (`963d022`)
Speed up parsing NSEC records (#1169) (`06fa94d`)
Speed up processing incoming data (#1167) (`fbaaf7b`)
Speed up decoding dns questions when processing incoming data (#1168) (`f927190`)
Re-release to rebuild failed wheels (#1165) (`4986271`)
Reduce cast calls in service browser (#1164) (`c0d65ae`)
Speed up incoming parser (#1163) (`4626399`)
Speed up incoming data parser (#1161) (`cb4c3b2`)
Reduce denial of service protection overhead (#1157) (`2c2f26a`)
Improve performance of processing incoming records (#1155) (`b65e279`)
Avoid waking async_request when record updates are not relevant (#1153) (`a3f970c`)
Addresses incorrect after server name change (#1154) (`41ea06a`)
Improve ServiceBrowser performance by removing OrderedDict (#1148) (`9a16be5`)
9b6adcf)ServiceInfo.parsed_addresses are now stringified using the python ipaddress library which may format them differently than socket.inet_ntop depending on the operating system. It is recommended to use ServiceInfo.ip_addresses_by_version instead going forward as it offers a stronger guarantee since it returns ipaddress objects.9b6adcf)Small cleanups to cache cleanup interval (#1146) (`b434b60`)
b434b60)524494e)6a327d0)68871c3)da10a3b)Improve performance of constructing ServiceInfo (#1141) (`36d5b45`)
Small speed up to handler dispatch (#1140) (`5bd1b6e`)
Speed up processing incoming records (#1139) (`7246a34`)
Reduce overhead to send responses (#1135) (`c4077dd`)
Correct duplicate record entries in windows wheels by updating poetry-core (#1134) (`a43055d`)
Hold a strong reference to the query sender start task (#1128) (`808c3b2`)
Missing c extensions with newer poetry (#1129) (`44d7fc6`)
The equality checks for DNSPointer and DNSService should be case insensitive (#1122) (`48ae77f`)
Optimize equality checks for DNS records (#1120) (`3a25ff7`)
Your coding agent can read these notes before it upgrades. Set up the MCP server →