Initial Configuration
ElixIRCd is configured via a single Elixir config file: elixircd.exs. This file uses standard Elixir Config syntax.
The full configuration reference is in Configuration Overview. This page covers the minimum you need to get started.
Minimal Configuration
Section titled “Minimal Configuration”import Config
config :elixircd, server: [ name: "My IRC Network", hostname: "irc.example.com", password: nil, motd: File.read("config/motd.txt") ], listeners: [ {:tcp, [port: 6667]}, {:tls, [ port: 6697, transport_options: [ keyfile: Path.expand("data/cert/selfsigned_key.pem"), certfile: Path.expand("data/cert/selfsigned.pem") ] ]}, {:http, [port: 8080]}, {:https, [ port: 8443, keyfile: Path.expand("data/cert/selfsigned_key.pem"), certfile: Path.expand("data/cert/selfsigned.pem") ]} ], operators: [ # Add at least one operator for admin access # Password must be hashed with Argon2id # {"admin", "$argon2id$v=19$m=4096,t=2,p=4$..."} ]Setting Up an IRC Operator
Section titled “Setting Up an IRC Operator”To become an IRC operator on your server, you need to add a credential entry to the operators list. Passwords must be hashed with Argon2id.
Generating a Password Hash
Section titled “Generating a Password Hash”In an Elixir shell (iex -S mix or docker exec -it <container> ./bin/elixircd remote):
Argon2.hash_pwd_salt("your_secure_password")This outputs something like:
"$argon2id$v=19$m=4096,t=2,p=4$aBcDeFgH...$hash..."Copy that hash into your config:
operators: [ {"admin", "$argon2id$v=19$m=4096,t=2,p=4$aBcDeFgH...$hash..."}]To use it, connect to the server and run:
/oper admin your_secure_passwordMessage of the Day (MOTD)
Section titled “Message of the Day (MOTD)”Create a motd.txt file with your server’s welcome message:
Welcome to My IRC Network!
Rules:- Be respectful- No spam- Have fun!
Contact: admin@example.comThe MOTD is shown to users when they connect and when they run /motd.
Hostname Cloaking Keys
Section titled “Hostname Cloaking Keys”If you enable hostname cloaking (default: enabled), generate proper secret keys:
:crypto.strong_rand_bytes(32) |> Base.encode64()Run this three times to get three unique keys:
cloaking: [ enabled: true, cloak_keys: [ "XYZ...(32+ chars)...", "ABC...(32+ chars)...", "DEF...(32+ chars)..." ], cloak_prefix: "elixir", cloak_on_connect: false, cloak_allow_disable: true, cloak_domain_parts: 2]