A normal node is the recommended setup for chatting. It performs a full sync of the latest 24 hourly DAGs and keeps a rolling 24-DAG window. When a new DAG is created, the oldest DAG and its message data are deleted from the local datastore.
From the repository root, build DarkIRC:
% make darkirc
Run it once to create ~/.config/darkfi/darkirc_config.toml:
% ./darkirc
The node continues running after creating the file. Stop it with Ctrl-C if
you want to review the configuration before connecting. On macOS, the default
configuration directory is ~/Library/Application Support/darkfi/.
The generated configuration already uses these defaults. Uncomment the settings if you want them recorded explicitly:
# Fetch complete message data rather than headers only.
fast_mode = false
# Fetch the latest 24 hourly DAGs at startup.
dags_count = 24
# Prune old DAGs, keeping a rolling 24-hour window.
archive_mode = false
history_retention_dags = 24
dags_count is the number of recent DAGs fetched during startup and after a
network reconnection. history_retention_dags is the number kept locally. In
normal mode, dags_count cannot be greater than
history_retention_dags. Each DAG represents one hour with DarkIRC's current
rotation settings.
Review the [net] section before starting, especially active_profiles, seed
addresses, proxy settings, and any inbound address you intend to expose. See
network and message privacy and the
node configuration guides for transport and
public-listener setups.
Use transport mixing when the seed advertises canonical clearnet peers but
direct clearnet connections are not allowed. This configuration uses the
built-in Arti transports, so it does not require tor_socks5_proxy:
[net]
active_profiles = ["tor", "tor+tls"]
mixed_profiles = ["tcp", "tcp+tls"]
[net.profiles."tor"]
seeds = [
"tor://wgxxaifz5gv4iggcflyl67lgmsihffs6bbwobqah4np52t3y3olrnpid.onion:9601",
"tor://inx5s3pdzddvgb5ii3oydutmbvw6fvor3oqu65wtxl3pyevtvrdn4had.onion:9601",
]
[net.profiles."tor+tls"]
seeds = [
"tor+tls://lilith0.dark.fi:9600",
"tor+tls://lilith1.dark.fi:9600",
]
active_profiles are the transports the node may actually dial.
mixed_profiles are canonical schemes accepted from seed and peer discovery.
The compatible mappings in this example are tcp through tor and
tcp+tls through tor+tls. A learned address such as
tcp+tls://peer.example:9600 remains under that canonical URL in the hostlist
and peer lifecycle, while the connection endpoint is derived as
tor+tls://peer.example:9600. Network diagnostics display the derived route.
The seed entries belong to the active tor and tor+tls profile tables.
Profile tables that are only named in mixed_profiles do not contribute
seeds, peers, listeners, or external addresses. Do not move these bootstrap
addresses into [net.profiles."tcp"] or [net.profiles."tcp+tls"] unless
those transports are deliberately active for direct clearnet use.
A valid learned address is placed on the dark list when this node has no
direct or mixed route for its scheme. With the configuration above, learned
tcp and tcp+tls peers are dialable through Tor and remain in the normal
grey, white, and gold host lifecycle. The dark list is an unsupported-host
classification; it is distinct from the operator-configured blacklist.
Transport mixing prevents a direct connection for these canonical peer schemes, but it does not make public DarkIRC messages private or remove all traffic-analysis metadata. The remote clearnet service sees a Tor exit rather than the node's IP, subject to Tor's threat model. Use encrypted DarkIRC channels separately when message confidentiality is required.
Start the node from the repository root:
% ./darkirc
To use a configuration in another location, pass it explicitly:
% ./darkirc --config /path/to/darkirc_config.toml
Wait for the full startup sync to finish:
Event DAG synced successfully (full mode, 24 dag(s))
Then connect an IRC client to 127.0.0.1:6667, unless you changed
irc_listen. The IRC client instructions
provide a WeeChat example.
Stop the node with Ctrl-C so the datastores are flushed cleanly. Changes to
history, datastore, and network settings take effect only after a restart;
/rehash is only for reloadable IRC settings such as channels and contacts.