{"id":21659707,"url":"https://github.com/keepsimple1/mdns-sd","last_synced_at":"2025-12-24T06:15:46.858Z","repository":{"id":37025390,"uuid":"418001962","full_name":"keepsimple1/mdns-sd","owner":"keepsimple1","description":"Rust library for mDNS based Service Discovery","archived":false,"fork":false,"pushed_at":"2024-10-24T05:24:43.000Z","size":600,"stargazers_count":97,"open_issues_count":9,"forks_count":37,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-10-24T23:24:57.842Z","etag":null,"topics":["rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/keepsimple1.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-17T02:45:44.000Z","updated_at":"2024-10-13T18:12:34.000Z","dependencies_parsed_at":"2024-01-14T19:55:25.862Z","dependency_job_id":"e08e8a99-205c-4bfb-9a31-e37375e2ba64","html_url":"https://github.com/keepsimple1/mdns-sd","commit_stats":{"total_commits":77,"total_committers":7,"mean_commits":11.0,"dds":0.1298701298701299,"last_synced_commit":"41b01a06b53d5d8a6389703a7e4616f8144a80f3"},"previous_names":[],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keepsimple1%2Fmdns-sd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keepsimple1%2Fmdns-sd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keepsimple1%2Fmdns-sd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keepsimple1%2Fmdns-sd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keepsimple1","download_url":"https://codeload.github.com/keepsimple1/mdns-sd/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226233394,"owners_count":17592877,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rust"],"created_at":"2024-11-25T09:31:24.502Z","updated_at":"2025-12-24T06:15:46.851Z","avatar_url":"https://github.com/keepsimple1.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# mdns-sd\n\n[![Build](https://github.com/keepsimple1/mdns-sd/actions/workflows/build.yml/badge.svg)](https://github.com/keepsimple1/mdns-sd/actions)\n[![Cargo](https://img.shields.io/crates/v/mdns-sd.svg)](https://crates.io/crates/mdns-sd)\n[![docs.rs](https://img.shields.io/docsrs/mdns-sd)](https://docs.rs/mdns-sd/latest/mdns_sd/)\n[![Rust version: 1.70+](https://img.shields.io/badge/rust%20version-1.70+-orange)](https://blog.rust-lang.org/2022/08/11/Rust-1.70.0.html)\n\nThis is a small implementation of mDNS (Multicast DNS) based service discovery in safe Rust, with a small set of dependencies. Some highlights:\n\n- supports both the client (querier) and the server (responder) uses.\n- supports macOS, Linux and Windows.\n- supports IPv4 and IPv6.\n- works with both sync and async code.\n- no dependency on any async runtimes.\n\n## Approach\n\nWe are not using async/.await internally, instead we create a new thread to run a mDNS daemon.\n\nThe API interacts with the daemon via [`flume`](https://crates.io/crates/flume) channels that work easily with both sync and async code. For more details, please see the [documentation](https://docs.rs/mdns-sd).\n\n## Compatibility and Limitations\n\nThis implementation is based on the following RFCs:\n- mDNS:   [RFC 6762](https://tools.ietf.org/html/rfc6762)\n- DNS-SD: [RFC 6763](https://tools.ietf.org/html/rfc6763)\n- DNS:    [RFC 1035](https://tools.ietf.org/html/rfc1035)\n\nThis is still beta software. We focus on the common use cases at hand. And we tested with some existing common tools (e.g. `Avahi` on Linux, `dns-sd` on MacOS, and `Bonjour` library on iOS) to verify the basic compatibility.\n\nThe following table shows how much this implementation is compliant with RFCs regarding major features:\n\n| Feature | RFC section | Compliance | Notes |\n| ------- | ----------- | ---------- | ----- |\n| One-Shot Multicast DNS Queries (i.e. Legacy Unicast Responses) | RFC 6762 [section 5.1][ref1] [section 6.7][ref9] | ❌ | because we don't support Unicast yet. |\n| Unicast Responses | RFC 6762 [section 5.4][ref2] | ❌ |\n| Known-Answer Suppression | RFC 6762 [section 7.1][ref3] | ✅ |\n| Multipacket Known Answer Suppression querier | RFC 6762 [section 7.2][ref4] | ✅ |\n| Multipacket Known Answer Suppression responder | RFC 6762 [section 7.2][ref4] | ❌ | because we don't support Unicast yet. |\n| Probing | RFC 6762 [section 8.1][ref5] | ✅ |\n| Simultaneous Probe Tiebreaking | RFC 6762 [section 8.2][ref6] | ✅ |\n| Conflict Resolution | RFC 6762 [section 9][ref7] | ✅ | see `DnsNameChange` type |\n| Goodbye Packets | RFC 6762 [section 10.1][ref10] | ✅ |\n| Announcements to Flush Outdated Cache Entries | RFC 6762 [section 10.2][ref11] | ✅ | i.e. `cache-flush` bit |\n| Cache Flush on Failure Indication | RFC 6762 [section 10.4][ref8] | ✅ | API: `ServiceDaemon::verify()` |\n\n[ref1]: https://datatracker.ietf.org/doc/html/rfc6762#section-5.1\n[ref2]: https://datatracker.ietf.org/doc/html/rfc6762#section-5.4\n[ref3]: https://datatracker.ietf.org/doc/html/rfc6762#section-7.1\n[ref4]: https://datatracker.ietf.org/doc/html/rfc6762#section-7.2\n[ref5]: https://datatracker.ietf.org/doc/html/rfc6762#section-8.1\n[ref6]: https://datatracker.ietf.org/doc/html/rfc6762#section-8.2\n[ref7]: https://datatracker.ietf.org/doc/html/rfc6762#section-9\n[ref8]: https://datatracker.ietf.org/doc/html/rfc6762#section-10.4\n[ref9]: https://datatracker.ietf.org/doc/html/rfc6762#section-6.7\n[ref10]: https://datatracker.ietf.org/doc/html/rfc6762#section-10.1\n[ref11]: https://datatracker.ietf.org/doc/html/rfc6762#section-10.2\n\n## License\n\nLicensed under either of\n\n * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n## Contribution\n\nContributions are welcome! Please open an issue in GitHub if any questions.\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the above license(s), shall be\ndual licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeepsimple1%2Fmdns-sd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeepsimple1%2Fmdns-sd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeepsimple1%2Fmdns-sd/lists"}