Configuration
Node configuration
Pass a configuration dictionary to Node(conf=...).
Full reference
NODE_CONF = {
# Socket options
"reuse_addr": False,
# UPnP
"enable_upnp": True,
# Signaling
"sig_pipe_no": 1,
# Storage
"install_path": None,
# NTP clock sync (needed for hole punching)
"init_clock_skew": True,
# Hole punching
"enable_punching": True,
# Nickname service
"enable_nickname": True,
# STUN clients (needed for hole punching)
"enable_stun_clients": True,
}
Option details
reuse_addr (bool, default False)
Sets SO_REUSEADDR on server sockets. Useful during development to avoid “address
already in use” errors when restarting quickly. Leave False in production to avoid
hiding socket errors.
enable_upnp (bool, default True)
At startup, try to add a UPnP port-forwarding rule on the local router. This lets other nodes connect to you without hole punching or TURN. Adds a few seconds to startup time.
Set to False if your router doesn’t support UPnP, you know you’re on open internet,
or you want faster startup.
sig_pipe_no (int, default 1)
Number of MQTT signal connections to keep open per peer. Higher values improve reliability but use more connections.
Set to 0 for same-machine tests where no signal channel is needed.
install_path (str or None, default None)
Directory for storing the signing key, machine ID, and PID lock files.
Auto-detected from the system if None (typically ~/.local/share/aionetiface/).
init_clock_skew (bool, default True)
Synchronise the local clock against NTP at startup. Required for hole punching (both peers must agree on the punch time). Adds ~1-2s to startup.
Set to False when testing or when hole punching is disabled.
enable_punching (bool, default True)
Load the punch plugin and its STUN clients. Disable to skip hole punching
entirely (faster startup, useful if you only have open-internet nodes).
Automatically disables enable_stun_clients if set to False.
enable_nickname (bool, default True)
Register this node’s address under its node_id in the PNP naming service at
startup, and keep it renewed. Disable to skip the registration step.
enable_stun_clients (bool, default True)
Load STUN TCP clients for each interface at startup. Required for hole punching. Loading takes a few seconds as it probes multiple STUN servers.
Preset configurations
NODE_CONF — production defaults
from warpgate.node.node_defs import NODE_CONF
Everything enabled. Use for deployed nodes that need to traverse real NATs. Startup takes 5–15 seconds.
NODE_TEST_CONF — fast tests
from warpgate.node.node_defs import NODE_TEST_CONF
NODE_TEST_CONF = {
"reuse_addr": False,
"enable_upnp": False,
"sig_pipe_no": 0,
"install_path": None,
"init_clock_skew": False,
"enable_punching": True,
"enable_nickname": False,
"enable_stun_clients": False,
}
Minimal set that starts a node almost instantly. Use for:
Unit and integration tests
Same-machine examples
Anything that doesn’t need real NAT traversal
Custom configuration
Extend a base preset with dict_child:
from aionetiface import dict_child
from warpgate.node.node_defs import NODE_TEST_CONF
# Enable signaling for cross-machine tests while keeping everything else minimal
CROSS_MACHINE_TEST_CONF = dict_child(
{"sig_pipe_no": 1, "init_clock_skew": False},
NODE_TEST_CONF,
)
dict_child(overrides, parent) creates a new dict where overrides take
precedence over parent. It does not modify either input.
Net configuration
Node also inherits NET_CONF from aionetiface for socket-level settings:
NET_CONF = {
"recv_timeout": 2, # default recv() timeout in seconds
"max_qsize": 200, # max messages in a subscription queue
...
}
These are merged with the node conf automatically. You can override them in your custom conf dict.
Plugin configuration
Each plugin declares its own conf dict on the class:
# tcp_punch/main.py
@register(phase="punch")
class PunchPlugin(Plugin):
name = "tcp_punch"
conf = {"timeout": 180}
# turn/main.py
@register(phase="relay")
class TURNPlugin(Plugin):
name = "turn"
conf = {"timeout": 60}
timeout is the number of seconds TraversalManager waits for one
plugin.run() call before cancelling it. The demo’s outer await on
plugin.result is plugin.timeout + 10 (see demo/menu.py).
To override a plugin timeout at runtime, replace its installed entry on the manager:
node.traversal.install_plugin("tcp_punch", {
"class": PunchPlugin,
"timeout": 60,
})
Environment
Warpgate stores data in:
Data |
Location |
|---|---|
ECDSA signing key |
|
Machine ID |
derived from NIC MAC addresses |
PID lock files |
|
The install_path defaults to the aionetiface install root, typically
~/.local/share/aionetiface/ on Linux.