Finally a simple interface for domain names
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Renovate Bot 7312a6d336
continuous-integration/drone/push Build is passing Details
chore(deps): lock file maintenance
3 days ago
actions Fix typo 12 months ago
admin Use identifiers globally 3 months ago
api General message clarifications 2 weeks ago
config Sanitize base64 in URLs 3 months ago
forms Translate custom form buttons 2 months ago
generators This is happyDomain now 1 year ago
internal/app This is happyDomain now 1 year ago
model General message clarifications 2 weeks ago
providers ovh: Save endpoint 1 month ago
services General message clarifications 2 weeks ago
storage Save time.Duration as seconds instead of nanoseconds 1 month ago
ui chore(deps): lock file maintenance 3 days ago
utils Add option to skip SMTP server certificate verification 1 month ago
.dockerignore happydomain is required by Dockerfile-builded 1 month ago
.drone-manifest-local.yml CI/CD: Publish Docker images to local registry 1 year ago
.drone-manifest.yml CD: Deploy on Docker Hub into happydomain organisation 1 year ago
.drone.yml Fix build on arm 2 months ago
.gitignore This is happyDomain now 1 year ago
Dockerfile build: Update Dockerfile: remove Vue deps 2 months ago
Dockerfile-builded Update alpine Docker tag to v3.17 4 months ago
LICENSE Rename project happyDomain 1 year ago General message clarifications 2 weeks ago
generate.go This is happyDomain now 1 year ago
go.mod chore(deps): update module to v1.1.52 2 weeks ago
go.sum chore(deps): update module to v1.1.52 2 weeks ago This is happyDomain now 1 year ago
main.go General message clarifications 2 weeks ago
renovate.json renovate: Enable lock-file maintenance 2 months ago


Finally a simple, modern and open source interface for domain name.

It consists of a HTTP REST API written in Golang (primarily based on and with a nice web interface written with Svelte. It runs as a single stateless Linux binary, backed by a database (currently: LevelDB, more to come soon).


  • An ultra fast web interface without compromise
  • Multiple domains management
  • Support for 36+ DNS providers (including dynamic DNS, RFC 2136) thanks to DNSControl
  • Support for the most recents resource records thanks to CoreDNS's library
  • Zone editor with a diff view to review the changes before propagation
  • Keep an history of published changes
  • Contextual help
  • Multiple user with authentication or one user without authtication
  • Compatible with external authentication (through JWT tokens: Auth0, ...)

Using Docker

We are a Docker sponsored OSS project! Thus you can easily try and/or deploy our app using Docker/podman/kubernetes/...:

docker run -e HAPPYDOMAIN_NO_AUTH=1 -p 8081:8081 happydomain/happydomain

This command will launch happyDomain in a few seconds, for evaluation purposes (no authentication, volatile storage, ...). With your browser, just go to http://localhost:8081 and enjoy!

In order to deploy happyDomain, check the Docker image documentation.



In order to build the happyDomain project, you'll need the following dependencies:

  • go at least version 1.18;
  • nodejs tested with version 18 and 19.


  1. First, you'll need to prepare the frontend, by installing the node modules dependencies:
pushd ui; npm install; popd
  1. Then, generate assets files used by Go code:
go generate
go generate
  1. Finaly, build the Go code:
go build -v

This last command will create a binary happydomain you can use standalone.

Install at home

The binary comes with sane default options to start with. You can simply launch the following command in your terminal:


After some initialization, it should show you:

Admin listening on ./happydomain.sock
Ready, listening on :8081

Go to http://localhost:8081/ to start using happyDomain.

Database configuration

By default, the LevelDB storage engine is used. You can change the storage engine using the option -storage-engine other-engine.

The help command ./happydomain -help shows you the available engines:

    -storage-engine value
    	Select the storage engine between [leveldb mysql] (default leveldb)


LevelDB is a small embedded key-value store (as SQLite it doesn't require an additional daemon to work).

    -leveldb-path string
    	Path to the LevelDB Database (default "happydomain.db")

By default, a new directory is created near the binary, called happydomain.db. This directory contains the database used by the program. You can change it to a more meaningful/persistant path.

Persistent configuration

The binary will automatically look for some existing configuration files:

  • ./happydomain.conf in the current directory;
  • $XDG_CONFIG_HOME/happydomain/happydomain.conf;
  • /etc/happydomain.conf.

Only the first file found will be used.

It is also possible to specify a custom path by adding it as argument to the command line:

./happydomain /etc/happydomain/config

Config file format

Comments line has to begin with #, it is not possible to have comments at the end of a line, by appending # followed by a comment.

Place on each line the name of the config option and the expected value, separated by =. For example:


Environment variables

It'll also look for special environment variables, beginning with HAPPYDOMAIN_.

You can achieve the same as the previous example, with the following environment variables:


You just have to replace dash by underscore.

Development environment

If you want to contribute to the frontend, instead of regenerating the frontend assets each time you made a modification (with go generate), you can use the development tools:

In one terminal, run happydomain with the following arguments:

./happydomain -dev

In another terminal, run the node part:

cd ui; npm run dev

With this setup, static assets integrated inside the go binary will not be used, instead it'll forward all requests for static assets to the node server, that do dynamic reload, etc.