Self-hosted · Authoritative · Version-controlled

DNS management
you actually own

Replace your cloud DNS panel with a self-hosted service built on Bind9. Every change is version-controlled in SVN, propagated instantly to your authoritative nameservers.

autodns.sh — DNS records
$ dig @ns1.autodns.sh svnforge.com ANY +short
143.198.x.x
mail.google.com.
"v=spf1 include:_spf.google.com ~all"
$ # Record created via API 3 seconds ago
autodns record add svnforge.com --type TXT --name @ --value "..."

Built for operators, not point-and-click

Everything you need to run authoritative DNS on your own hardware.

Truly authoritative

Your zones live on your Bind9 servers. No third-party intermediaries, no API rate limits, no surprise outages that aren't yours to fix.

Version-controlled zones

Every zone change is committed to SVN with a structured message. Full audit trail, rollback support, and diff history for every record.

Near-instant propagation

Changes commit to SVN, sync to Bind9 volumes, and trigger rndc reload in under 10 seconds. AXFR to secondaries follows immediately.

HTMX + JSON API

Manage records via the web UI or the full JSON API. Same domain logic, two inbound adapters. Automate with curl, use the UI when you prefer.

OAuth2 authentication

Sign in with Azure AD or Google. Multiple providers can link to one account by email. Encrypted session cookies, no session table needed.

Registry tracking

Track registrar logins, expiry dates, and notes for every domain. Highlights domains approaching expiry. Replaces your DNS spreadsheet entirely.

How a record change flows

From form submit to live DNS in under 10 seconds.

1

UI or API request

Submit a record change via the HTMX interface or POST to /api/v1/domains/{id}/records. Both paths hit the same domain service.

2

PostgreSQL + SVN commit

Record saved to PostgreSQL (source of truth). Zone file regenerated and committed to SVN with an auto-incremented SOA serial in YYYYMMDDNN format.

3

Sync container

svn update pulls the new zone. rsync copies it to the Bind9 volume. rndc reload fires. Polling interval: 5 seconds.

4

Authoritative + secondaries live

Primary Bind9 serves the new record. AXFR notifies ns1 and ns2, which transfer the zone. dig @ns1.autodns.sh returns the new value.

The whole stack, no surprises

Six containers. Everything runs in Docker. No managed services.

Go + Chi PostgreSQL 16 Bind9 9.20 SVN HTMX Nginx Docker Compose

Your DNS, your infrastructure

Stop paying a cloud provider to manage records you could own. Self-host in an afternoon.

Open the app