Daemon image
The evrd daemon and evrctl on Alpine, running as an unprivileged user. Exposes 6667, 6697 and 8098.
evrd ships as multi-arch container images, built on every push to main, with version tags on each release. It's pure Go, so building from source takes one command.
The evrd daemon and evrctl on Alpine, running as an unprivileged user. Exposes 6667, 6697 and 8098.
The Svelte web client as static files on nginx (port 80). Proxies /api and /auth to evrd-api:8098; set EVRD_API to point it elsewhere.
Go 1.26 for the daemon, Node and pnpm for the web client. Tagged releases include source archives on GitHub.
Every method runs the same binary. Once it's up, follow the quick start to create an admin and add a network.
The daemon and the web app together. SQLite and Pebble live in one volume, so there's no external database to run. Put your own TLS-terminating proxy in front of port 8080. Start with this evrd.conf next to the compose file (and a key in .env: EVRD_SECRET_KEY= from docker run --rm --entrypoint evrctl ghcr.io/4evrd/evrd genkey):
listen ircs://:6697 api :8098 db sqlite:/var/lib/evrd/evrd.db history pebble:/var/lib/evrd/history public_url https://bnc.example.org irc_host bnc.example.org
services:
evrd-api:
image: ghcr.io/4evrd/evrd:latest
command: ["-config", "/etc/evrd/evrd.conf"]
environment:
EVRD_SECRET_KEY: ${EVRD_SECRET_KEY} # evrctl genkey — encrypts saved network passwords
volumes:
- ./evrd.conf:/etc/evrd/evrd.conf:ro
- evrd-data:/var/lib/evrd
ports:
- "6697:6697"
restart: unless-stopped
evrd-web:
image: ghcr.io/4evrd/evrd-web:latest
ports:
- "8080:80"
restart: unless-stopped
volumes:
evrd-data:
docker compose up -d
The daemon alone, for native IRC clients only, or behind a web app you host yourself. Use the same evrd.conf as in the Docker Compose tab.
docker run -d --name evrd \ -p 6697:6697 -p 8098:8098 \ -v "$PWD/evrd.conf:/etc/evrd/evrd.conf:ro" \ -e EVRD_SECRET_KEY="$EVRD_SECRET_KEY" \ -v evrd-data:/var/lib/evrd \ ghcr.io/4evrd/evrd:latest -config /etc/evrd/evrd.conf
Pin a version for production. Use :X.Y to follow patch releases, or :X.Y.Z to stay on one exact build.
A native install without Docker, in one command. It asks for your host name, the certificate (Let's Encrypt, self-signed or none), whether evrd or relayd serves HTTPS, and single sign-on (optional), then installs evrd chrooted to /var/evrd, running as _evrd, unveiled and pledged. Data stays in SQLite and Pebble, so there's no database server. Run as root:
ftp -o - https://raw.githubusercontent.com/4evrd/evrd/main/deploy/openbsd/install.sh | sh
It verifies the release against its SHA256 file, and running the same command again upgrades in place, without taking anyone off IRC (the connection holder keeps their connections open while evrd restarts). The questions, options and layout are in the OpenBSD docs.
Pure Go with no cgo, so it cross-compiles with GOOS/GOARCH (Linux, macOS, Windows and the BSDs; amd64, arm64, 386, arm) and doesn't need a C toolchain.
git clone https://github.com/4evrd/evrd.git && cd evrd make build # bin/evrd, bin/evrctl make web # web/build — serve it and proxy /api, /auth to :8098 ./bin/evrd -config evrd.conf
This table lists what CI publishes with each release.
| Artifact | linux/amd64 | linux/arm64 | Tags |
|---|---|---|---|
| ghcr.io/4evrd/evrd | Image | Image | latest · X.Y.Z · X.Y · sha-<commit> |
| ghcr.io/4evrd/evrd-web | Image | Image | latest · X.Y.Z · X.Y · sha-<commit> |
| Source archive | Common Go 1.26 targets | vX.Y.Z on GitHub Releases | |
| Release archives (evrd, evrctl, evrd-links, web app) | Archive | Archive | evrd_<os>_<arch>.tar.gz + SHA256 on GitHub Releases · also FreeBSD, OpenBSD and macOS, amd64 and arm64 |
Create an admin with evrctl user add -admin, add a network in the web app, then connect HexChat or irssi with user/network:password.