Skip to content

Configuration Reference

Wippy is configured via .wippy.yaml files. All options have sensible defaults.

Any value below can be overridden at launch with wippy run --set section.path=value (repeatable, takes precedence over the file). To override individual registry entries rather than these config sections, use the override: section or -o — see Overriding Entries.

Controls the zap logger encoder. CLI flags (-v, -c, -s) override level/output; the only yaml-driven option is the encoding.

FieldTypeDefaultDescription
encodingstringconsoleEncoder: console (humanized) or json (structured)
logger:
encoding: json

Controls runtime log routing. Console output is configured via CLI flags (-v, -c, -s).

FieldTypeDefaultDescription
propagate_downstreambooltrueSend logs to console/file output
stream_to_eventsboolfalsePublish logs to event bus for programmatic access
min_levelint-1Minimum level: -1=debug, 0=info, 1=warn, 2=error
logmanager:
propagate_downstream: true
stream_to_events: false
min_level: 0

See: Logger Module

Go pprof HTTP server for CPU/memory profiling. Enable with -p flag or config.

FieldTypeDefaultDescription
enabledboolfalseStart profiler server
addressstringlocalhost:6060Listen address
read_timeoutduration15sHTTP read timeout
write_timeoutduration15sHTTP write timeout
idle_timeoutduration60sKeep-alive timeout
profiler:
enabled: true
address: "localhost:6060"

Access at http://localhost:6060/debug/pprof/

Global security behavior. Individual policies are defined as security.policy entries.

FieldTypeDefaultDescription
strict_modeboolfalseDeny access when security context is incomplete
security:
strict_mode: true

See: Security System, Security Module

Entry storage and version history. The registry holds all configuration entries.

FieldTypeDefaultDescription
enable_historybooltrueTrack entry versions
history_typestringmemoryStorage: memory, sqlite, nil
history_pathstring.wippy/registry.dbSQLite file path
registry:
history_type: sqlite
history_path: /var/lib/wippy/registry.db

See: Registry Concept, Registry Module

Message routing between processes across nodes.

FieldTypeDefaultDescription
node_namestringderived per-instance IDIdentifier for this relay node (default: UUIDv5 of machine-id/hostname + working dir; overridable via WIPPY_NODE_ID / WIPPY_RELAY_NODE_NAME)
relay:
node_name: worker-1

See: Process Model

Service lifecycle management. Controls the supervisor’s internal control mailbox used to dispatch lifecycle events.

FieldTypeDefaultDescription
host.buffer_sizeint1024Internal control mailbox capacity
host.worker_countint16Concurrent dispatcher workers
supervisor:
host:
buffer_size: 2048
worker_count: 32

See: Supervision Guide

Per-`process.host` workers and queues are configured on the entry itself (`workers`, `queue_size`, `local_queue_size`), not in this global section. See the [Process Host](system/process-host.md) entry kind.

Lua VM caching and expression evaluation.

FieldTypeDefaultDescription
proto_cache_sizeint60000Compiled prototype cache
main_cache_sizeint10000Main chunk cache
cache.enabledboolfalsePersist compiled bytecode/typecheck cache to disk
cache.dirstring.wippy/cache/luaCache directory path (relative to the config/working directory)
cache.modestringreadwriteCache mode: readwrite (default), readonly, off
type_system.enabledboolfalseEnable static type checking
type_system.strictboolfalseTreat type warnings as errors
lua:
proto_cache_size: 60000
cache:
enabled: true
dir: .cache/lua
type_system:
enabled: true

See: Lua Overview

Registry search caching. Used internally for entry lookups.

FieldTypeDefaultDescription
query_cache_sizeint1000Cached query results
regex_cache_sizeint100Compiled regex patterns
finder:
query_cache_size: 2000

Distributed tracing and metrics export via OTLP.

FieldTypeDefaultDescription
enabledboolfalseEnable OTEL
endpointstringlocalhost:4318OTLP endpoint
protocolstringhttp/protobufProtocol: grpc, http/protobuf
service_namestringwippy-runtimeService identifier
service_versionstringService version tag
insecurebooltrueAllow plaintext OTLP connection
sample_ratefloat1.0Trace sampling (0.0-1.0)
propagatorsstring[][tracecontext, baggage]Context propagators
traces_enabledbooltrueExport traces
metrics_enabledboolfalseExport metrics
http.enabledbooltrueTrace HTTP requests
http.extract_headersbooltrueExtract trace context from inbound headers
http.inject_headersbooltrueInject trace context into outbound headers
process.enabledbooltrueTrace process lifecycle
process.trace_lifecyclebooltrueEmit spans for spawn/terminate
interceptor.enabledbooltrueTrace function calls
interceptor.orderint100Interceptor priority
queue.enabledbooltrueTrace queue publish/consume
temporal.enabledboolfalseTrace Temporal workflows
otel:
enabled: true
endpoint: "http://jaeger:4318"
traces_enabled: true
process:
trace_lifecycle: true

Standard OTEL environment variables (OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME, OTEL_TRACES_SAMPLER_ARG, OTEL_PROPAGATORS, OTEL_SDK_DISABLED) override the matching fields.

See: Observability Guide

Graceful shutdown behavior.

FieldTypeDefaultDescription
timeoutduration30sMax wait for components to stop
shutdown:
timeout: 60s

Internal metrics collection buffer.

FieldTypeDefaultDescription
buffer.sizeint10000Metrics buffer capacity
interceptor.enabledboolfalseAuto-track function calls
metrics:
buffer:
size: 20000
interceptor:
enabled: true

See: Metrics Module, Observability Guide

Prometheus metrics endpoint.

FieldTypeDefaultDescription
enabledboolfalseStart metrics server
addressstringListen address; must be set explicitly when enabled: true, otherwise the metrics server does not start
prometheus:
enabled: true
address: "0.0.0.0:9090"

Exposes /metrics endpoint for Prometheus scraping.

See: Observability Guide

Multi-node clustering: gossip membership plus a bounded Raft consensus core. See the Cluster Guide for the architecture and operational model; this section is the config-key reference.

FieldTypeDefaultDescription
enabledboolfalseEnable clustering
namestringhostnameNode name; must be unique across the cluster
failure_domainstringZone/rack label; advertised in gossip so voters spread across domains

SWIM gossip via memberlist. Used for node discovery, failure detection, and metadata dissemination.

FieldTypeDefaultDescription
membership.bind_addrstring0.0.0.0Gossip bind address
membership.bind_portint7946Gossip bind port (TCP+UDP)
membership.advertise_addrstringAddress peers use to reach this node (NAT/k8s)
membership.join_addrsstringComma-separated seed host:port pairs
membership.secret_keystringBase64-encoded gossip encryption key (inline)
membership.secret_filestringPath to file holding the gossip encryption key

TCP mesh carrying the relay and Raft traffic between nodes. Raft rides this mesh (yamux-multiplexed); there is no separate Raft port.

FieldTypeDefaultDescription
internode.bind_addrstring0.0.0.0Mesh bind address
internode.bind_portint0Mesh port (0 = auto: 7950-7959, then ephemeral)
internode.auto_portbooltrueDiscover the actual port at boot, pin it, and advertise it in gossip

Bounded Raft. Raft state is fs-durable by default, stored under raft.data_dir (default ~/.wippy/store); a restarted node still rejoins quorum from peers. store.kv.raft entries replicate through it. Bootstrap is gossip-driven (Consul/Nomad bootstrap_expect style).

FieldTypeDefaultDescription
raft.data_dirstring~/.wippy/storeDirectory for fs-durable Raft state and durable CRDT snapshots (under <data_dir>/_sys/). Diskless only when no path resolves (no home dir and none set)
raft.enabledbooltrueRun a Raft node; false makes this a gossip-only client
raft.rolestringserverserver runs a Raft node; client is gossip-only
raft.eligiblebooltrueWhether this node may be selected as a voter
raft.priorityint100Voter selection priority (lower is preferred)
raft.bootstrap_expectint1Initial quorum size: 0=join existing, 1=single-node, N=wait for N eligible peers then form quorum
raft.max_votersint5Voter ceiling (must be odd); extra eligible nodes become standbys
raft.max_standbysint4Non-voting members kept warm for promotion; nodes beyond voters+standbys are not Raft members
raft.reconcile_debounceduration2sCoalesce window after a gossip event before the voter reconciler runs
raft.reconcile_timeoutduration2sBound per reconcile pass
raft.heartbeat_timeoutduration3sFollower idle wait before starting an election
raft.election_timeoutduration3sCandidate election timeout (clamped to >= heartbeat)
raft.commit_timeoutduration500msIdle leader heartbeat cadence
raft.snapshot_thresholduint648192Log entries since last snapshot before a new one
raft.snapshot_intervalduration2mSnapshot check interval
raft.snapshot_retainint3Snapshots retained
raft.trailing_logsuint6410240Log entries retained after a snapshot
raft.max_append_entriesint16Max entries per AppendEntries RPC
raft.leader_probe_intervalduration3sGlobal-registry leader-reachability probe cadence
raft.leader_probe_graceint3Consecutive probe failures before leader is declared unreachable

Single-node (development) — clustering on, bootstraps itself immediately:

cluster:
enabled: true
name: dev
raft:
bootstrap_expect: 1

Three-node voting cluster — each node lists the others as seeds and waits for all three before forming quorum:

cluster:
enabled: true
name: node-1
failure_domain: us-east-1a
membership:
bind_port: 7946
join_addrs: "node-2:7946,node-3:7946"
secret_file: /etc/wippy/cluster.key
raft:
bootstrap_expect: 3
max_voters: 5

Gossip-only client — joins the cluster for naming/messaging but never runs Raft:

cluster:
enabled: true
name: edge-7
membership:
join_addrs: "node-1:7946,node-2:7946"
raft:
role: client

Language Server Protocol server for editor integrations.

FieldTypeDefaultDescription
enabledboolfalseEnable the TCP server
addressstring:7777TCP listen address
http_enabledboolfalseEnable the HTTP transport
http_addressstring:7778HTTP listen address
http_pathstring/lspHTTP endpoint path
http_allow_originstring*CORS allowed origin
max_message_bytesint8388608Max incoming message size
lsp:
enabled: true
address: ":7777"
http_enabled: true

See: LSP Guide

Overlay network manager (SOCKS5, I2P, Tailscale drivers).

FieldTypeDefaultDescription
state_dirstring.wippy/netDriver state storage directory
default_networkstringDefault network ID applied when entries omit network
network_service:
state_dir: /var/lib/wippy/net
default_network: app:tailscale

See: Network Overlays

Tuning for the shared HTTP client pool used by HTTP-dispatched functions and outbound requests.

FieldTypeDefaultDescription
dispatcher.http.timeoutduration0 (none)Per-request timeout
dispatcher.http.max_idle_connsint0 (stdlib)Max idle connections across all hosts
dispatcher.http.max_idle_per_hostint0 (stdlib)Max idle connections per host
dispatcher.http.idle_conn_timeoutduration0 (stdlib)Idle connection timeout
dispatcher.http.max_clientsint0 (unbounded)Max distinct pooled clients
dispatcher:
http:
timeout: 30s
max_idle_per_host: 32

Module registry client used by wippy install/update.

FieldTypeDefaultDescription
registry_urlstringhttps://hub.wippy.aiRegistry endpoint
modules:
registry_url: https://internal-registry.example.com

Native Go plugin extensions loaded at boot (Unix only).

FieldTypeDefaultDescription
enabledbooltrueLoad extensions
pathsstring[]Plugin file paths (relative to config dir)
extensions:
enabled: true
paths:
- ./extensions/myplugin.so
VariableDescription
GOMEMLIMITMemory limit fallback when --memory-limit flag is not set (precedence: --memory-limit flag > GOMEMLIMIT > 1G default)