Skip to content

Saturn

Local-network discovery for AI endpoints. Zero config, zero registry, RFC-grade.

Saturn is a DNS-SD/mDNS protocol — service type _saturn._tcp.local. — for OpenAI-compatible AI backends on a LAN. Run a Saturn responder once on your home, lab, or office network; every device on that network discovers it the same way it discovers a printer.

  • Zero-config. No accounts, no per-app keys, no manual endpoint URLs.
  • RFC-based. RFC 6762 (mDNS) + RFC 6763 (DNS-SD). The wire format is the contract.
  • Multi-language. Reference implementations in Go, Python, Rust, TypeScript, and Lua interoperate with no shared SDK.
  • Encrypted-aware. Cloud backends ship 10-minute ephemeral JWTs in TXT records, rotated every 5 minutes.
  • Sub-second discovery on a quiet LAN.

See it work

$ dns-sd -B _saturn._tcp local.            # macOS / Bonjour
Browsing for _saturn._tcp.local.
Add  3   ollama       _saturn._tcp.   local.
Add  3   openrouter   _saturn._tcp.   local.

$ curl http://macbook.local:11434/v1/models
{"object":"list","data":[{"id":"llama3.2","object":"model"}, ...]}
// saturnd/cmd/saturnd — see implementations/go
func main() {
    for s := range saturn.Browse(ctx, "_saturn._tcp.local.") {
        fmt.Printf("%s  prio=%d  %s\n", s.Name, s.Priority, s.URL())
    }
}
from saturn import discover
for s in discover(timeout=2.0):
    print(s.name, s.priority, s.effective_endpoint)
$ saturn discover
ollama       prio=10  http://macbook.local:11434
openrouter   prio=20  https://openrouter.ai/api/v1

Quickstart → Protocol Spec →

Saturn on the wire

Three DNS record types — PTR, SRV, TXT — carry every Saturn advertisement. There is no Saturn-specific transport, no Saturn handshake, and no Saturn registry. If you can send a UDP/5353 multicast and parse a DNS message, you can implement Saturn.

client                                      server (Saturn responder)
  │                                                   │
  │  PTR query: _saturn._tcp.local.    (224.0.0.251)  │
  │ ───────────────────────────────────────────────► │
  │  PTR answer: ollama._saturn._tcp.local.           │
  │ ◄─────────────────────────────────────────────── │
  │  SRV+TXT query: ollama._saturn._tcp.local.        │
  │ ───────────────────────────────────────────────► │
  │  SRV answer: macbook.local.  port 11434           │
  │  TXT answer: version=1 api_type=openai ...        │
  │ ◄─────────────────────────────────────────────── │
  │  HTTP GET http://macbook.local:11434/v1/models    │
  │ ───────────────────────────────────────────────► │

The first two messages are mDNS. The third is plain HTTP, not part of the Saturn protocol — Saturn ends once the client has a URL. Full byte-annotated TXT layout and a tcpdump capture: Spec → Saturn on the Wire.

Implementations

Language Package mDNS library
Go saturnd/ grandcat/zeroconf
Python saturn-ai python-zeroconf
Rust saturn-router mdns-sd
TypeScript ai-sdk-provider-saturn multicast-dns
Lua vlc_extension dns-sd CLI
CLI saturn

Seven artifacts across five languages and four mDNS libraries, sharing no Saturn-specific code (Saturn.md:976). Interoperability comes from the wire format alone.

Three routes from here

  • Use Saturn — point a tool at a discovered endpoint. → Quickstart
  • Build a client — write code that browses _saturn._tcp.local. and routes by priority. → Implementations
  • Implement Saturn — write a responder in a new language. → Spec v0.2

What is mDNS?

Multicast DNS is a UDP/5353 protocol that lets devices on a LAN answer DNS queries for each other without a central server. DNS-SD layers a service-discovery convention on top: a service type (_saturn._tcp.local.) maps to instance names (PTR), each instance resolves to a host/port (SRV), and metadata travels in key-value records (TXT). Bonjour and Avahi are the two dominant implementations; both are Saturn-compatible without modification. → Concepts: protocol

Project status

Saturn is the artifact of a master's thesis at UC Santa Cruz (Joey Perrello, advised by Adam Smith). Thesis: Saturn: Zero-Configuration AI Service Discovery (eScholarship, 2026). Citations in this documentation reference the source manuscript by line number where applicable.