dns-sd-native
Access the operating system's built-in DNS-SD / mDNS stack for service registration.
This crate provides a cross-platform async API (using Tokio) to register DNS-SD services via native OS facilities — no bundled mDNS implementation, no extra system dependencies to install.
Note: This crate currently supports registration of services only, not browsing/discovery.
Platform Support
| Platform | Backend | Minimum Version |
|---|---|---|
| macOS | native DNS-SD framework | macOS 10.12 |
| Windows | native Win32 DNS-SD API | Windows 10 |
| Linux / BSD | Avahi via D-Bus | Avahi daemon running |
- macOS and Windows link against system libraries that are always present on supported OS versions.
- Linux/FreeBSD communicate with Avahi over D-Bus — there is no binary dependency on
libavahior the Bonjour compatibility layer. Binaries will run on systems without Avahi installed but return an error when attempting to register.
Why Use the OS Stack?
There exist various crates implementing DNS-SD/mDNS in pure Rust. Compared to these, using the operating system's DNS-SD stack has the following benefits:
- Battle-tested: OS stacks have been tested widely over many years (sometimes decades) to handle OS-dependent edge cases (sleep/wake, interface changes) properly
- Automatic cleanup: registered services are automatically deregistered when the process exits, even on crash or
SIGKILL. - Shared cache: all applications on the system share a single DNS-SD/mDNS responder & cache, reducing network traffic and keeping answers consistent.
- Smaller binary: no embedded mDNS responder; just thin FFI/D-Bus bindings.
There also exist various crates implementing a wrapper on top of the Apple DNS-SD API, which is natively available on macOS, but only on
Windows if users install Bonjour for Windows, and on Linux if the libavahi-compat-libdnssd library is installed. Compared to these, this
crate requires no additional dependencies to install for end users.
Example
Register a service of type _http._tcp on port 8080:
use ServiceRegistrationBuilder;
async
See the examples/ directory for a full CLI tool that registers arbitrary services.