NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4546 most downloaded on crates.io
mDNS Service Discovery library with no async runtime dependency
Last release 3 days ago
05 Oct 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
5 years old
84 releases · first in 2021
One column per quarter.
Keep the daemon's timers on a monotonic clock. Previously, setting the system clock back stalled announcements, IP checks and other timers.
This is a bugfix release.
set_ip_check_interval immediately. Setting the interval to 0 now disablesFull Changelog: v0.21.4...v0.21.5
This is a bugfix release.
set_ip_check_interval immediately. Setting the interval to 0 now disables
the IP check, instead of re-running it in a busy loop. (#517)f76eedb 2026-10-04 refactor: remove the unused per-answer timestamp from DnsOutgoing (#519) (keepsimple1)8222d6d 2026-10-04 fix: count system sleep toward cached record TTLs (#518) (keepsimple1)6c50c9c 2026-10-03 fix: apply IP check interval changes immediately (#517) (keepsimple1)cba4ab4 2026-10-03 fix: keep the daemon's timers on a monotonic clock (#516) (Jesper L. Nielsen)37c8e24 2026-10-03 fix: interfaces sharing an IPv4 address no longer retry the multicast join (#513) (David Veszelovszki)a44e673 2026-10-01 refactoring: extract duplicated code into new_multicast_socket (#515) (keepsimple1)This is a bugfix release with query-handling fixes and internal refactoring.
This is a bugfix release with query-handling fixes and internal refactoring.
handle_query and insert_ipaddr for readability, with no behavior change. (#510, #511)Welcome and thank you!
Full Changelog: v0.21.3...v0.21.4
This is a bugfix release with query-handling fixes and internal refactoring.
handle_query and insert_ipaddr for readability, with no behavior change. (#510, #511)0d2477b 2026-09-20 refactor: extract answer_hostname_question from handle_query (#511) (keepsimple1)4d2ef74 2026-09-20 refactor: insert_ipaddr and handle_query (#510) (keepsimple1)7f6a723 2026-09-19 fix: preserve supported questions when unknown types are present (#508) (Joey)3ba9f03 2026-09-19 fix: preserve announcements after excluded address changes (#507) (Joey)aeb8c71 2026-09-17 fix: encode and send negative answers for absent hostname records (#509) (Joey)75d1941 2026-09-11 fix: keep re-querying unresolved instances while browsing (#494) (keepsimple1)This is a bugfix release that improves RFC 6762 section 6.7 compliance for legacy unicast responses.
This is a bugfix release that improves RFC 6762 section 6.7 compliance for legacy unicast responses.
assert with assert_eq in tests where possible for clearer failure output. (#456)Full Changelog: v0.21.2...v0.21.3
This is a bugfix release that improves RFC 6762 section 6.7 compliance for legacy unicast responses.
assert with assert_eq in tests where possible for clearer failure output. (#456)b61fee3 2026-09-07 fix: echo query id in legacy unicast responses (#498) (keepsimple1)217ed5a 2026-09-07 test: replace assert with assert_eq where possible (#456) (CosminPerRam)d8ab875 2026-09-07 fix: cap TTL to 10s in legacy unicast responses (#504) (keepsimple1)0ec8df3 2026-09-07 fix clippy (keepsimple1)Fix an out-of-bounds panic parsing a truncated HINFO record: read_char_string now checks that the length octet is present instead of indexing past the
This is a bugfix release.
read_char_string now checks that the length octet is present instead of indexing past the end of the packet. Found by fuzzing the packet parser. (#499)dns_parser: it now uses the canonical TxtProperty in service_info instead of its own copy. (#500)fuzz/ with a parse_packet target covering DnsIncoming::new, plus a fuzz build in CI. Publishing is unaffected: cargo package still excludes fuzz/. (#502)Full Changelog: v0.21.1...v0.21.2
This is a bugfix release.
read_char_string now
checks that the length octet is present instead of indexing past the end of the packet.
Found by fuzzing the packet parser. (#499, commit c65dd3c)30a22cf)dns_parser: it now uses the canonical
TxtProperty in service_info instead of its own copy. (#500, commit a6af4b5)fuzz/ with a parse_packet target covering
DnsIncoming::new, plus a fuzz build in CI. Publishing is unaffected: cargo package
still excludes fuzz/. (#502, commit 3656343)c65dd3c 2026-09-03 fix: out-of-bounds panic parsing a truncated HINFO record (#499) (keepsimple1)a6af4b5 2026-09-03 refactoring: remove the duplicated TXT decoding in dns_parser (#500) (keepsimple1)30a22cf 2026-09-04 fix: bound the raw packet dump in parse-failure messages (#501) (keepsimple1)3656343 2026-09-04 tests: add fuzzing support with a packet parser target (#502) (keepsimple1)Send goodbye (TTL=0) packets under conflict-resolved names. When probing renames a record due to a name conflict (RFC 6762 section 9), now the goodbye
This is a bugfix release.
fe525a6)read_name) and name compression handling: skip only the malformed record instead of the whole packet. (#492, commit 5bf6b7c)🚀 * @dhavli made their first contribution in #495
Full Changelog: v0.21.0...v0.21.1
This is a bugfix release.
fe525a6)read_name) and name compression handling: skip only the
malformed record instead of the whole packet. (#492, commit 5bf6b7c)5bf6b7c 2026-08-30 refactoring: read_name and name compression (#492) (keepsimple1)fe525a6 2026-08-26 fix: send goodbye packets under conflict-resolved names (#495) (dhavli)Thanks and welcome our new contributor @dhavli !
The max outgoing packet size is now 1452 bytes (based on Ethernet MTU), down from 8972 bytes, per RFC 6762 section 17 . A record too big for one packe
ServiceDaemon::set_max_packet_size().ServiceDaemon::set_max_packet_size() to change the max byte size of outgoing packets on the interfaces matching a given IfKind. (#487)RecvError, RecvTimeoutError and TryRecvError from flume, so that a caller can name them without adding flume as a direct dependency. (#488)Full Changelog: v0.20.3...v0.21.0
ServiceDaemon::set_max_packet_size().ServiceDaemon::set_max_packet_size() to change the max byte size of outgoing
packets on the interfaces matching a given IfKind, and export the new default as
MAX_PKT_DEFAULT. (#487, commit 82711a8)RecvError, RecvTimeoutError and
TryRecvError from flume, so that a caller can name them without adding flume
as a direct dependency. (#488, commit 20c0eac)82711a8)6bf2bdb 2026-08-09 refactor: extract the code that does cache flush (#490) (keepsimple1)20c0eac 2026-08-08 feat: re-export Receiver error types (#488) (#489) (keepsimple1)82711a8 2026-08-07 feat: limit generated packet size per RFC 6762 section 17 (#487) (keepsimple1)This is a small bugfix release.
This is a small bugfix release.
08362e3)Full Changelog: v0.20.2...v0.20.3
This is a small bugfix release.
08362e3)a574e93 2026-07-24 docs: add RFC 6762 compliance rows for v0.20.2 features (keepsimple1)08362e3 2026-07-24 fix: Panic in write_utf8 (assert s.len() < 64) (#484) (keepsimple1)This is a feature and bugfix release focused on improved RFC 6762 compliance.
This is a feature and bugfix release focused on improved RFC 6762 compliance.
76f42bd)a37e959)7c55c75)Full Changelog: v0.20.1...v0.20.2
This is a feature and bugfix release focused on improved RFC 6762 compliance.
76f42bd)a37e959)7c55c75)6f39a46)5cfa13a)5cfa13a 2026-07-15 fix: avoid leaking empty cache entries for records not for us (#481) (keepsimple1)7c55c75 2026-07-14 feat: add a jitter for initial query per RFC 6762 section 5.2 (#480) (keepsimple1)a37e959 2026-07-12 feat: delay PTR query responses per RFC 6762 section 6 (#479) (keepsimple1)6f39a46 2026-07-08 fix: space announcement retransmissions wider than the rate-limit window (#477) (keepsimple1)76f42bd 2026-07-07 feat: Implement RFC 6762 section 6 multicast rate limiting (#476) (keepsimple1)This is a small feature and maintenance release.
This is a small feature and maintenance release.
IfKind::Predicate and a new IfPredicate type, allowing interfaces to be selected with a custom predicate function (e.g. matching by interface name pattern). (#474, commit fd72146)IfPredicate for more flexible interface filtering by @MAlba124 in #474Full Changelog: v0.20.0...v0.20.1
This is a small feature and maintenance release.
IfKind::Predicate and a new IfPredicate type, allowing interfaces to be selected with a custom predicate function (e.g. matching by interface name pattern). (#474, commit fd72146)06bdad1)fd72146 2026-06-22 Add IfPredicate for more flexible interface filtering (#474) (MAlba124)06bdad1 2026-06-16 chore(deps): update (#454) (CosminPerRam)Thanks and welcome our new contributor @MAlba124 !
This release contains a small breaking change in the optional serde feature, hence the minor version bump.
This release contains a small breaking change in the optional serde feature, hence the minor version bump.
#[serde(untagged)] from ScopedIp. The serialized form of ScopedIp now includes its enum variant tag (V4 / V6), which improves compatibility with binary serde formats (e.g. MessagePack). Only affects users of the optional serde feature. (#472, commit 5fa4b92)Full Changelog: v0.19.2...v0.20.0
This release contains a small breaking change in the optional serde feature, hence the minor version bump.
#[serde(untagged)] from ScopedIp. The serialized form of ScopedIp now includes its enum variant tag (V4 / V6), which improves compatibility with binary serde formats (e.g. MessagePack). Only affects users of the optional serde feature. (#472, commit 5fa4b92)fee8ab7 2026-05-24 remove unused dev-dependency (keepsimple1)e745a2f 2026-05-23 tests: remove explicit port random assignments (#455) (CosminPerRam)5fa4b92 2026-05-22 Remove untagged attribute from ScopedIp (#472) (Rascal)This is a bugfix and small-feature release.
This is a bugfix and small-feature release.
5353, the daemon now replies directly to the querier's address/port instead of multicasting. This enables interoperability with one-shot / legacy mDNS queriers. (#469, commit 933bdbe)Error::DaemonShutdown variant, returned by ServiceDaemon methods after the daemon thread has exited (previously surfaced as a generic Error::Msg). The Error enum is #[non_exhaustive], so this is additive. (commit a457193)fb26d7f)println! in DnsHostInfo::write with debug!, so the library no longer writes to stdout. (#465, commit 96008a4)# Errors doc sections on the major ServiceDaemon APIs (new, new_with_port, browse, stop_browse, resolve_hostname, stop_resolve_hostname, register, unregister), documenting when Error::Again vs. Error::DaemonShutdown is returned. (#464, commit a457193)Thanks and welcome!
Full Changelog: v0.19.1...v0.19.2
This is a bugfix and small-feature release.
5353, the daemon now replies directly to the querier's address/port instead of multicasting. This enables interoperability with one-shot / legacy mDNS queriers. (#469, commit 933bdbe)Error::DaemonShutdown variant, returned by ServiceDaemon methods after the daemon thread has exited (previously surfaced as a generic Error::Msg). The Error enum is #[non_exhaustive], so this is additive. (commit a457193)fb26d7f)println! in DnsHostInfo::write with debug!, so the library no longer writes to stdout. (#465, commit 96008a4)# Errors doc sections on the major ServiceDaemon APIs (new, new_with_port, browse, stop_browse, resolve_hostname, stop_resolve_hostname, register, unregister), documenting when Error::Again vs. Error::DaemonShutdown is returned. (#464, commit a457193)933bdbe 2026-05-15 Add support for RFC 6762 legacy unicast responses (#469) (Luqmaan)fb26d7f 2026-04-30 Optimize dns outgoing serialization (#467) (Alexander)a457193 2026-04-28 docs: add doc comments for error handling on major APIs (#464) (keepsimple1)96008a4 2026-04-28 Replace println with debug log (#465) (Alexander)Thanks and welcome our new contributors @luqs1 and @anti-social !
When responding to a query, pick a source IP that matches the querier's subnet, so responses are reachable on multi-homed hosts. ( #460 , commit d2103
This is a bugfix release.
d210372)ServiceInfo constructor, catching oversized properties at registration time instead of at send time. (#458, commit cc81eec)Full Changelog: v0.19.0...v0.19.1
This is a bugfix release.
d210372)ServiceInfo constructor, catching oversized properties at registration time instead of at send time. (#458, commit cc81eec)d210372 2026-04-18 fix: use a source IP matching the querier's subnet when responding (#460) (keepsimple1)cc81eec 2026-04-12 fix: check TXT property length in ServiceInfo constructor (#458) (keepsimple1)ScopedIpV4 now carries interface_ids tracking which network interfaces discovered the address. The derived Eq/Hash now includes interface_ids, so two
ScopedIpV4 now carries interface_ids tracking which network interfaces discovered the address. The derived Eq/Hash now includes interface_ids, so two ScopedIpV4 values with the same IP but different interface lists are no longer equal. (commits 43bd8f3, 0661bf1, 247447b)serde feature: adds Serialize/Deserialize on InterfaceId, ScopedIpV4, ScopedIpV6, ScopedIp, TxtProperties, TxtProperty, and ResolvedService. (commit c2c2f75)ScopedIpV4::new(), ScopedIpV4::interface_ids(), InterfaceId::get_addrs().Full Changelog: v0.18.2...v0.19.0
ScopedIpV4 now carries interface_ids tracking which network interfaces discovered the address. The derived Eq/Hash now includes interface_ids, so two ScopedIpV4 values with the same IP but different interface lists are no longer equal. (commits 43bd8f3, 0661bf1, 247447b)serde feature: adds Serialize/Deserialize on InterfaceId, ScopedIpV4, ScopedIpV6, ScopedIp, TxtProperties, TxtProperty, and ResolvedService. (commit c2c2f75)ScopedIpV4::new(), ScopedIpV4::interface_ids(), InterfaceId::get_addrs().468c5ee)ServiceResolved events reflect updated addresses. (commit 7daa1d4)3903f09 2026-04-04 refactoring: simplify handle_query (#452) (keepsimple1)b6ddc18 2026-04-04 refactoring: move add_answer_with_additionals into struct DnsOutgoing (#451) (keepsimple1)468c5ee 2026-04-03 fix: avoid known-answer suppression when querying on a new interface (#450) (keepsimple1)7daa1d4 2026-04-01 fix: track modified_instances when removing records from an interface (#448) (keepsimple1)247447b 2026-03-26 fix: ScopedIp considered Eq when interface_ids change (#446) (keepsimple1)0661bf1 2026-03-24 refactoring: ScopedIpV4 to use multiple InterfaceIds (#444) (keepsimple1)c2c2f75 2026-03-15 Serde Deserialize+Serialize implementation (#440) (Rascal)43bd8f3 2026-03-13 add interface_id in ScopedIpV4 (#439) (keepsimple1)Thanks and welcome our new contributor @Rascal !
A bugfix: refresh of address records didn't work when hostname is not lowercase.
A bugfix: refresh of address records didn't work when hostname is not lowercase.
Full Changelog: v0.18.1...v0.18.2
ec1e733 2026-03-11 fix: Refresh of A and AAAA records (#441) (hrzlgnm)A bugfix for disable_interface with an IPv4 address: clarified that the semantics is to disable IPv4 on the interface identified by the IPv4 address.
disable_interface with an IPv4 address: clarified that the semantics is to disable IPv4 on the interface identified by the IPv4 address.IfKind enum: IndexIPV4(u32) and IndexIPV6(u32).Full Changelog: v0.18.0...v0.18.1
disable_interface with an IPv4 address: clarified that the semantics is to disable IPv4 on the interface identified by the IPv4 address.IfKind enum: IndexIPV4(u32) and IndexIPV6(u32).7e04122 2026-02-28 fix(test): use all IPv4 interfaces in test_disable_interface_cache (#435) (keepsimple1)A few new features, documentation enhancements and breaking changes.
A few new features, documentation enhancements and breaking changes.
reuseport. It is handled transparently now. (see commit 58bc8c5). and \ in instance names (see commit 3481b94)8d24304)85b6cd9)b694333 2026-02-12 Added documentation about service name length (FelixSelter)85b6cd9 2026-02-10 fix for macOS: exclude IFF_POINTTOPOINT interfaces and exclude Apple P2P interfaces by default (#425) (keepsimple1)58bc8c5 2026-02-09 fix: invert reuseport feature (#430) (keepsimple1)8d24304 2026-02-07 feat: add proper cleanup on daemon shutdown (#421) (Thibaut M.)69418d6 2026-02-05 chore: update some comments (#429) (keepsimple1)3481b94 2026-02-06 feat: implement RFC 6763 Section 4.3 escaping for instance names (#420) (Thibaut M.)58c15b4 2026-01-27 fix: only add a scope in Display to unicast link local v6 addresses (#424) (hrzlgnm)3f34136 2026-01-24 Return errors from send_dns_outgoing (#419) (keepsimple1)0e323f6 2026-01-21 ci: update github action checkout (#422) (Thibaut M.)Thanks and welcome new contributors: @thibaut-pascal, @FelixSelter
A new 'feature' literally: a default feature reuseport to control if SO_REUSEPORT should be used. Useful for old Linux kernels (before 3.9).
A new 'feature' literally: a default feature reuseport to control if SO_REUSEPORT should be used. Useful for old Linux kernels (before 3.9).
466d373 2026-01-15 feat: add reuseport feature (#414) (Hanssen)1770d01 2025-12-31 exmaples: add --verify option in the query example (#412) (keepsimple1)Thanks and welcome our new contributor @Hanssen0 !
ServiceDaemon::new_with_port(port: u16) allows using a custom port for mainly development / testing purposes.
ServiceDaemon::new_with_port(port: u16) allows using a custom port for mainly development / testing purposes.
9088f8b 2025-12-04 feat: use Self on impl return of itself for RRType (#409) (CosminPerRam)91b3e66 2025-12-02 Add a custom port option (#408) (Kaido Kert)3e7a582 2025-11-30 handle empty return from send_dns_outgoing (#407) (keepsimple1)Thanks and welcome our new contributor @kaidokert !
Loopback interfaces are enabled by default now. The main reason is that some user reported a failure of publishing services locally. I think this chan
Loopback interfaces are enabled by default now. The main reason is that some user reported a failure of publishing services locally. I think this change probably only impacts very few.
A couple of new APIs are added for ServiceInfo: set_interfaces and set_link_local_only based on some real world use cases.
6752eaf 2025-11-04 feat: service registration with granular iface/ip conditions (#398) (twizansk)7293e7c 2025-11-02 Enable loopback interfaces by default (#397) (keepsimple1)505bd71 2025-11-02 Fix clippy for tests and remove unnecessary tests (#403) (keepsimple1)A bugfix release. But we also bumped up rustc MSRV to 1.71.0, hence bumping our own minor version.
A bugfix release. But we also bumped up rustc MSRV to 1.71.0, hence bumping our own minor version.
6c01cf6 2025-10-27 Handle IPv6 disabled in kernel (#396) (keepsimple1)b15c4c3 2025-10-23 log the interface name when joining multicast group (#394) (keepsimple1)382521c 2025-10-15 refactoring only: make resolve_updated_instances easier to understand (#393) (keepsimple1)Nothing published for this version
New feature: cache only browsing. Check out the new methods browse_cache and accept_unsolicited.
New feature: cache only browsing. Check out the new methods browse_cache and accept_unsolicited.
3f6d6e9 2025-09-04 feat: support cache only browsing (#388) (twizansk)Thanks and welcome our new contributor @twizansk !
ServiceEvent::ServiceData is merged back with ServiceResolved (i.e. replacing it). The end result is: we have a single ServiceEvent::ServiceResolved(R
ServiceEvent::ServiceData is merged back with ServiceResolved (i.e. replacing it). The end result is: we have a single ServiceEvent::ServiceResolved(ResolvedService) going forward.Hence, a service is respresented by ResolvedService on the client side, and by ServiceInfo on the server side.
And user_service_data() is no longer needed and removed.
Sorry about the confusions but I think this helps for the long term. I think / hope the required code changes are minimal for most users.
221e0be 2025-08-29 feat: impl AsIpAddrs for Box<dyn AsIpAddrs> (#387) (Jean-Gab)f88fae1 2025-08-27 merge ServiceData with ServiceResolved (#386) (keepsimple1)Thanks our new contributor @Jean-Gab, welcome!
This is a bugfix release with only a doc comments change.
This is a bugfix release with only a doc comments change.
ec4fb9a 2025-08-18 doc: add a missing line in doc code example (#384) (keepsimple1)ServiceEvent::ServiceData to support IPv6 with scope_id. It will deprecate ServiceEvent::ServiceResolved.
ServiceEvent::ServiceData to support IPv6 with scope_id. It will deprecate ServiceEvent::ServiceResolved.Users must call ServiceDaemon.use_service_data to use ServiceData instead of ServiceResolved event.
HostnameResolutionEvent::AddressesFound uses the new ScopedIp instead of IpAddr.ServiceEvent is non_exhaustive now.MyUdpSocket that uses PKTINFO. It also prepares for supporting unicast.MyIntf to better handle multiple addresses on an interface.123ecba 2025-08-08 rename HostIp to ScopedIp (#382) (keepsimple1)0c9395f 2025-08-07 rename ServiceDetailed to ServiceData (#381) (keepsimple1)52cc67c 2025-08-06 refactoring: define our own interface struct to allow multiple addresses (#380) (keepsimple1)1b194de 2025-08-01 feat: Remove unneeded multicast send tracking (#377) (hrzlgnm)8cb1a59 2025-07-30 refactoring only: move run into ZeroConf (#376) (keepsimple1)2eddad3 2025-07-30 ServiceEvent: add non_exhaustive and fix clippy (#375) (keepsimple1)0d6ba35 2025-07-28 bugfix: remove duplicated address record for IPv6 on a wrong interface (#373) (keepsimple1)45b3cdd 2025-07-16 fix repetitive ServiceRemoved and Resolve again after interface up (#371) (keepsimple1)eb90591 2025-07-13 Exclude interfaces that are operational down (#369) (keepsimple1)1103ab2 2025-07-08 feat: new API to use ResolvedService instead of ServiceInfo for resolved service event (#362) (keepsimple1)This is a small bugfix release before we add potential breaking changes.
This is a small bugfix release before we add potential breaking changes.
8b221d2 2025-06-22 derive Clone for ServiceEvent and HostnameResolutionEvent (#366) (Shadowcat650)Welcome our new contributor @Shadowcat650 !
14841ac 2025-06-21 add comments for setting TTL (#364) (keepsimple1)
This is a bugfix release.
14841ac 2025-06-21 add comments for setting TTL (#364) (keepsimple1)3db5e1b 2025-06-17 bugfix: set multicast TTL to 255 (#361) (Sameer Puri)22a2688 2025-05-20 doc: add a section for Conflict resolution (#359) (keepsimple1)60888b7 2025-05-13 Refactoring only: extract parts of probing_handler into functions (#357) (keepsimple1)db2f484 2025-05-11 bugfix: not to resolve records that expires soon (#353) (keepsimple1)Welcome our new contributor @sameer !
a734dd2 2025-05-02 bugfix: refresh TXT when needed (#354) (keepsimple1)
This is a bugfix release.
a734dd2 2025-05-02 bugfix: refresh TXT when needed (#354) (keepsimple1)51c03c3 2025-05-01 bugfix: TXT records should use OTHER_TTL same as PTR (#355) (keepsimple1)07750cb 2025-04-25 bugfix: only remove a service instance if all its SRV are gone (#350) (keepsimple1)This is a bugfix release that also prepares for adding InterfaceId in resolved service info.
This is a bugfix release that also prepares for adding InterfaceId in resolved service info.
2d49195 2025-04-22 bugfix: should keep A records for hostname queriers (#348) (keepsimple1)fe08df1 2025-04-22 bump up version to 0.13.8 (#347) (keepsimple1)f6c7e80 2025-04-22 feat: extend DnsAddress with an InterfaceId (#342) (hrzlgnm)513372d 2025-04-20 remove address filter for multicast loopback (#346) (keepsimple1)This is a bugfix release that further reduces the memory footprint of DNS cache.
This is a bugfix release that further reduces the memory footprint of DNS cache.
a6a0961 2025-04-15 optimization: remove cache entries when stop_browse (#344) (keepsimple1)This is a bugfix release that reduces / limits the memory footprint of the cached records and timers.
This is a bugfix release that reduces / limits the memory footprint of the cached records and timers.
5fa1b31 2025-04-07 optimization: remove expired timers and skip DNS datagrams that are not for us (#338) (keepsimple1)3e3aec9 2025-03-29 refactoring: make tiebreaking more modular (#336) (keepsimple1)This is a patch fix release as the previous release (0.13.4) was broken in service resolution.
This is a patch fix release as the previous release (0.13.4) was broken in service resolution.
e65757f 2025-03-26 bugfix: make get_addr method use lowercase hostname (#332) (Justus K)Thanks @Stupremee for the fix and welcome!
New API for host IP check: ServiceDaemon::set_ip_check_interval and ServiceDaemon::get_ip_check_interval.
ServiceDaemon::set_ip_check_interval and ServiceDaemon::get_ip_check_interval.e64c0d4 2025-03-24 bugfix: hostname resolution should be case insensitive (#330) (keepsimple1)5e4df27 2025-03-19 bugfix: when now equals next_ip_check (#328) (keepsimple1)9538120 2025-03-12 examples: support logfile in the register example (#326) (keepsimple1)8422690 2025-03-13 chore(deps): update fastrand and socket2 (#324) (CosminPerRam)dd2d868 2025-03-07 feat: add boxed in DnsRecordExt to reduce Box::new usage (#323) (CosminPerRam)3ea6cf1 2025-03-05 Detect IP changes: reduce the interval (#313) (keepsimple1)7feabc9 2025-03-04 feat: handle DnsIncoming IPv4, 6 and String read parsing errors (#309) (CosminPerRam)TxtProperties: Support into_property_map_str.
TxtProperties: Support into_property_map_str.ResolvedService that can be created from ServiceInfo.enable_interface.3e6842f 2025-02-28 enable_interface: support loopback interface (#317) (keepsimple1)7e77a5e 2025-02-26 fix: remove related addresses in the cache when disabling an interface (#316) (keepsimple1)735fb22 2025-02-22 refactoring: move handle_poller_events into Zeroconf impl (#315) (keepsimple1)e886787 2025-02-20 ci: add doc check and fail if there are any warnings (#310) (CosminPerRam)9d92545 2025-02-18 refactoring: make e_fmt! available within the crate (#311) (keepsimple1)4b671d4 2025-02-14 ResolvedService: a new plain struct for attributes of a service (#302) (keepsimple1)349de66 2025-02-13 fix: include loopback addresses in filtering criteria (#306) (Minetake)026a745 2025-02-09 refactoring: property length check (#305) (keepsimple1)818f37c 2025-02-10 TXT record: docs to remind users of the maximum length of the attribute. (#304) (Lazy Panda)fba8025 2025-02-09 TxtProperties: new method to get a HashMap of properties (#303) (keepsimple1)4288190 check any match for address records in conflict handler (#294) (keepsimple1)
This is a bugfix release.
This is a bugfix release. Fixed a bug where upper case service names failed to publish.
This is a bugfix release. Fixed a bug where upper case service names failed to publish.
There are no breaking changes in API. Bump the minor version due to the change of rustc version to Rust 1.70.0.
There are no breaking changes in API. Bump the minor version due to the change of rustc version to Rust 1.70.0.
mio instead of polling to poll sockets.set_multicast_loop_v4 and set_multicast_loop_v6 of ServiceDaemon.debug or trace levels only.There are no breaking changes in API. Bump the minor version due to new features and the change of rustc version.
There are no breaking changes in API. Bump the minor version due to new features and the change of rustc version.
verify API. RFC 67622829d8e tests: fix remove addr test (#258) (keepsimple1)
This is a bugfix release.
Bugfixes. Added checks for corrupted RR data to prevent unnecessary panics. Thanks for new contributor @rise0chen !
Bugfixes. Added checks for corrupted RR data to prevent unnecessary panics. Thanks for new contributor @rise0chen !
Sorry that this release has a few merged small commits as I didn't know how to properly
merge in a PR that targets a fetaure branch used in another PR, instead of main branch.
A release of bugfixes and refactorings.
A release of bugfixes and refactorings.
ip (intf-name) (#245) (hrzlgnm) (2024-08-22).browse queriers (#240) (hrzlgnm) (2024-08-17)Mostly a bugfix and refactoring release, with limited support added for:
Mostly a bugfix and refactoring release, with limited support added for:
Start to honor cache flush bit.
Welcome our new contributor: @lyager ! Thanks!
Now ServiceDaemon::register() requires hostname to end with ".local."
ServiceDaemon::register() requires hostname to end with ".local."ServiceDaemon::resolve_hostname()Welcome our new contributor: @oysteintveit-nordicsemi ! Thanks!
Port 0 is now considered valid in ServiceInfo
Welcome our new contributors: @hrzlgnm and @irvingoujAtDevolution ! Thanks!
Add sanity checks in DNS message decoding
This is a bug fix release.
Welcome our new contributor @amfaber ! Thanks!
This is a bug fix release.
Welcome our new contributor @amfaber ! Thanks!
use human-readable address in error log of send_packet
This is a bug fix release.
Welcome our new contributor @Raphiiko ! Thanks!
Happy new year 2024!
bugfix: signal event key is possible to overlap with socket poll ids
This is a bug fix release.
Related to the breaking change, a client can receive DaemonStatus to be sure the daemon is shutdown.
ServiceDaemon::shutdown() return type changed from Result<()> to Result<Receiver<DaemonStatus>> (#149)DaemonStatus to be sure the daemon is shutdown.DaemonStatus and a new API ServiceDaemon::status() are introduced.actions-rs with dtolnay/rust-toolchain.apply interface selections when IP addresses change
This is a bugfix release.
p.s. Happy Halloween!
The release includes a bugfix, thanks to @Mornix !
The release includes a bugfix, thanks to @Mornix !
DnsCache::add_or_update.Added two new methods for ServiceDaemon: enable_interface and disable_interface, and some refactoring.
There are no breaking changes.
Added two new methods for ServiceDaemon: enable_interface and disable_interface, and some refactoring.
This is a breaking change, including:
This is a breaking change, including:
AsIpv4Addrs changes to AsIpAddrs to support both IPv4 and IPv6.ServiceInfo::new() uses the new AsIpAddrs trait.ServiceInfo::get_addresses() returns both IPv4 and IPv6 addresses, while a new convenience method get_addresses_v4 returns IPv4 only.But in general, because the trait hides away details, the user code is likely keeping working without code changes.
Improvements:
Remove env_logger in dev-dependencies and lower MSRV to 1.60.0.
No breaking changes in API. This release brings two potential user-visible changes:
No breaking changes in API. This release brings two potential user-visible changes:
This change reduces CPU utilization of the daemon thread as well as its latency to the user commands. Internally it uses local UDP sockets to signal the daemon.
This change makes link-local interfaces visible to users in Windows where they didn't show up previously.
Revert the changes in v0.7.4 and support link-local addrs alongside routable addrs.
Not to use link-local addrs if routable addrs exist
Internal refactoring: always use DnsCache to resolve Servive Instances. When processing incoming packets, we used to update the cache one record at a
Internal refactoring: always use DnsCache to resolve Servive Instances. When processing incoming packets, we used to update the cache one record at a time and also build separate service info structs to resolve. Now we finish the cache updates first, and then resolve instances from the cache.
Added env_logger for the examples code and enhanced the examples as well.
Implemented Display trait for TxtProperty: print using key=value format, where value is same as .get_property_val_str().
Highlights:
Implemented Display trait for TxtProperty: print using
key=value format, where value is same as .get_property_val_str().
Implemented Debug trait for TxtProperty: print using
a struct format, where value prints as a string if it is UTF-8, or
prints as hex if it is not UTF-8.
Your coding agent can read these notes before it upgrades. Set up the MCP server →