<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/lib-re-bonjour-1jxlji9gy" -->

---
title: ((lib)Re)bonjour | daily.dev
description: A developer introduces librebonjour, a new asynchronous DNS-SD and mDNS client library for GLib applications, built on top of libdex futures. Rather than...
canonical: https://daily.dev/posts/lib-re-bonjour-1jxlji9gy
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: ((lib)Re)bonjour | daily.dev
og:description: A developer introduces librebonjour, a new asynchronous DNS-SD and mDNS client library for GLib applications, built on top of libdex futures. Rather than...
og:url: https://daily.dev/posts/lib-re-bonjour-1jxlji9gy
og:image: https://api.daily.dev/og/posts/1JxLjI9Gy.png
og:image:alt: ((lib)Re)bonjour
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# ((lib)Re)bonjour

**[Happenings in GNOME](https://daily.dev/sources/chergert)** · 5 min read · 0 upvotes · 0 comments

## Summary

A developer introduces librebonjour, a new asynchronous DNS-SD and mDNS client library for GLib applications, built on top of libdex futures. Rather than linking directly against Avahi or systemd-resolved, it talks to whichever is available over D-Bus, exposing a single GObject API for one-shot discovery, browser-style discovery via GListModel, and service registration/advertising. The post explains why two backends exist, how auto-refresh smooths over their differing browsing models, and notes that registration still runs into polkit and mDNS policy constraints that the library cannot abstract away. It's a personal side project, not an officially maintained platform component.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blogs.gnome.org/chergert/2026/05/23/librebonjour>

## Questions this post answers

### How can a GLib application do mDNS/DNS-SD discovery without hardcoding whether Avahi or systemd-resolved is installed?

librebonjour is a GObject library that talks to either backend purely over D-Bus and exposes one API regardless of which is present: it uses Avahi via org.freedesktop.Avahi when available, and falls back to systemd-resolved's org.freedesktop.resolve1 otherwise. It supports one-shot lookups, live browsing through a GListModel, and service registration, all built on libdex futures for async operation.

_Developers weighing service-discovery approaches for Linux GTK apps can track library releases like this on daily.dev._

### Why doesn't browsing for mDNS services update live when using systemd-resolved instead of Avahi?

systemd-resolved's DNS-SD and mDNS operations over D-Bus are lookup-based rather than event-driven, so it lacks the add/remove signal stream that Avahi's D-Bus API provides for live browsing. To compensate, librebonjour's browser exposes auto-refresh and refresh-interval properties that poll and update the service model automatically when running against systemd-resolved.

_Anyone debugging inconsistent local-network discovery behavior across Linux backends can follow deep dives like this on daily.dev._

### What systemd-resolved configuration is required to advertise (not just browse) mDNS services?

Full mDNS support requires MulticastDNS=yes in systemd-resolved configuration; the weaker MulticastDNS=resolve setting is only sufficient to browse and resolve existing services, not to respond as an advertised service. Registration itself goes through the polkit-protected RegisterService and UnregisterService D-Bus methods, so applications must still handle authorization failures and sandbox policy.

_Engineers configuring service advertising on Linux can keep up with backend-specific gotchas like this via daily.dev._

## Similar posts on daily.dev

- [Linux Fu: The Local Phonebook](https://daily.dev/posts/linux-fu-the-local-phonebook-zzl0xhqjs) · Hackaday · 0 upvotes · 0 comments
- [async dns](https://daily.dev/posts/async-dns-n83nfjb7t) · Hacker News · 0 upvotes · 0 comments

---

Tags: [#linux](https://daily.dev/tags/linux), [#networking](https://daily.dev/tags/networking)

[View this post on daily.dev](https://daily.dev/posts/lib-re-bonjour-1jxlji9gy)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"((lib)Re)bonjour","url":"https://daily.dev/posts/lib-re-bonjour-1jxlji9gy","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/lib-re-bonjour-1jxlji9gy"},"datePublished":"2026-08-31T05:54:37.257Z","dateModified":"2026-09-01T06:17:42.441Z","description":"A developer introduces librebonjour, a new asynchronous DNS-SD and mDNS client library for GLib applications, built on top of libdex futures. Rather than...","image":"https://media.daily.dev/image/upload/s--VDukGCjf--/f_auto/v1722860399/public/Placeholder%2002","thumbnailUrl":"https://media.daily.dev/image/upload/s--VDukGCjf--/f_auto/v1722860399/public/Placeholder%2002","isAccessibleForFree":true,"articleSection":"Happenings in GNOME","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Happenings in GNOME","logo":"https://media.daily.dev/image/upload/logos/placeholder.jpg","url":"https://daily.dev/sources/chergert"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/lib-re-bonjour-1jxlji9gy","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"linux,networking","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Happenings in GNOME","item":"https://daily.dev/sources/chergert"},{"@type":"ListItem","position":3,"name":"((lib)Re)bonjour"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/lib-re-bonjour-1jxlji9gy#faq","mainEntity":[{"@type":"Question","name":"How can a GLib application do mDNS/DNS-SD discovery without hardcoding whether Avahi or systemd-resolved is installed?","acceptedAnswer":{"@type":"Answer","text":"librebonjour is a GObject library that talks to either backend purely over D-Bus and exposes one API regardless of which is present: it uses Avahi via org.freedesktop.Avahi when available, and falls back to systemd-resolved's org.freedesktop.resolve1 otherwise. It supports one-shot lookups, live browsing through a GListModel, and service registration, all built on libdex futures for async operation. Developers weighing service-discovery approaches for Linux GTK apps can track library releases like this on daily.dev."}},{"@type":"Question","name":"Why doesn't browsing for mDNS services update live when using systemd-resolved instead of Avahi?","acceptedAnswer":{"@type":"Answer","text":"systemd-resolved's DNS-SD and mDNS operations over D-Bus are lookup-based rather than event-driven, so it lacks the add/remove signal stream that Avahi's D-Bus API provides for live browsing. To compensate, librebonjour's browser exposes auto-refresh and refresh-interval properties that poll and update the service model automatically when running against systemd-resolved. Anyone debugging inconsistent local-network discovery behavior across Linux backends can follow deep dives like this on daily.dev."}},{"@type":"Question","name":"What systemd-resolved configuration is required to advertise (not just browse) mDNS services?","acceptedAnswer":{"@type":"Answer","text":"Full mDNS support requires MulticastDNS=yes in systemd-resolved configuration; the weaker MulticastDNS=resolve setting is only sufficient to browse and resolve existing services, not to respond as an advertised service. Registration itself goes through the polkit-protected RegisterService and UnregisterService D-Bus methods, so applications must still handle authorization failures and sandbox policy. Engineers configuring service advertising on Linux can keep up with backend-specific gotchas like this via daily.dev."}}]}
```

