Skip to main content

Native Installation and Uninstallation

This page covers one-command installation, version selection, portable mode, and uninstallation on Linux, macOS, and Windows. See the other installation guides for Docker, release archives, Debian packages, and OpenWrt.

One-command installation

The installer detects the current platform, downloads the matching GitHub Release archive, installs oxidns / oxidns.exe, config.yaml, and webui/, then registers and starts a system service by default.

curl -fsSL https://oxidns.org/install.sh | sudo sh

Default layout:

Platform / modeInstallation directoryCommand and service
Linux / macOS service install/opt/oxidns/usr/local/bin/oxidns link; installs and starts a system service
Windows administrator install%ProgramFiles%\OxiDNSAdded to Machine PATH; installs and starts a Windows service
Linux / macOS portable install~/.oxidns~/.local/bin/oxidns link; no service
Windows portable install%LOCALAPPDATA%\OxiDNSAdded to user PATH; no service

Running the installer again updates the binary and webui/. An existing config.yaml is preserved, while the release copy is written as config.yaml.example.

Verify the installation

oxidns --version
oxidns build-info
curl -fsS http://127.0.0.1:9199/api/readyz
dig @127.0.0.1 example.com

The default WebUI address is http://SERVER_IP:9199/. Enable authentication and read Security Hardening before exposing it to other devices.

Select a version or bundle

curl -fsSL https://oxidns.org/install.sh | \
sudo env OXIDNS_VERSION=vX.Y.Z OXIDNS_BUNDLE=full sh

Common variables:

VariablePurpose
OXIDNS_VERSIONRelease tag; defaults to latest
OXIDNS_INSTALL_DIROverrides the installation directory
OXIDNS_BIN_DIRLinux/macOS command-link directory
OXIDNS_TARGETForces a specific release target
OXIDNS_BUNDLEfull, standard, or minimal; defaults to full
OXIDNS_NO_PATH=1Does not create a command link or modify PATH
OXIDNS_INSTALL_SERVICE=0Uses portable mode without installing a service
OXIDNS_START_SERVICE=0Installs the service without starting it immediately
OXIDNS_OPENWRT_INSTALL=0Forces the normal Linux archive path on OpenWrt

minimal and standard releases currently cover selected Linux musl targets only. See Custom Builds for the full capability matrix.

Portable installation

curl -fsSL https://oxidns.org/install.sh | \
env OXIDNS_INSTALL_SERVICE=0 sh

oxidns start -c ~/.oxidns/config.yaml -d ~/.oxidns
Privileged ports

The default service configuration may listen on port 53. A regular Unix user normally cannot bind a privileged port. Use :5353 for local validation, or use a system service, a controlled capability, or port forwarding in production.

Uninstallation

The uninstaller removes the binary, WebUI, service, and PATH entry by default, but preserves config.yaml.

curl -fsSL https://oxidns.org/uninstall.sh | sudo sh

If you installed into a custom directory, provide the same OXIDNS_INSTALL_DIR / OXIDNS_BIN_DIR values while uninstalling. Common variables:

VariablePurpose
OXIDNS_INSTALL_DIROverrides the removal directory; must match installation
OXIDNS_BIN_DIRLinux/macOS command-link directory
OXIDNS_NO_PATH=1Does not remove the command link or user PATH entry
OXIDNS_UNINSTALL_SERVICE=1Forces a system-service removal attempt
OXIDNS_PURGE=1Deletes the entire installation directory and configuration
Purging cannot be undone

OXIDNS_PURGE=1 deletes the configuration and installation directory. Back up config.yaml, SQLite files, provider data, certificates, and other persistent files first.

Purge example:

curl -fsSL https://oxidns.org/uninstall.sh | \
sudo env OXIDNS_PURGE=1 sh

If installation, upgrade, or removal leaves service, port, or path issues, follow the diagnostic order in Operations and Troubleshooting.