Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Run a Normal DarkIRC Node

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.

Build and create the configuration

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/.

Configure the history window

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.

Route learned clearnet peers through Tor

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 and connect

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.