The tables show defaults for honk 1b95e2e. The example deliberately overrides some defaults. The Applies column links to the corresponding write-permission or restart row in What doona can change.
The state database also holds administrator credentials and geodata settings. --store db selects database-backed configuration revisions; it is a startup option, not a DAE key. See revision requirements.
Assets and subscription defaults
Key
Default
What doona does with it
Applies
honk reference
assets.route
Empty; routing rules
Default download route: routing, direct, or a group. Inherited by geodata, UI and subscriptions.
Entry options override subscription defaults. Sub-block routes override assets.route. An effective change to inherited geodata or UI settings requires a restart; subscription-only changes can reload. Explicit startup geodata URLs and routes replace stored overrides. Defining a URL does not load an asset. See geodata requirements.
These file keys grant recorder permission. Flows, logs and DNS logs start in on-demand mode. Their runtime switches cannot override a configured prohibition. Connections lists active userspace connections separately from the flow recorder. See Connections, flows, and runtime overrides.
Health checks
Key
Default
What doona does with it
Applies
honk reference
global.tcp_check_url
https://www.gstatic.com/generate_204
Global HTTP probe target list; the health loop uses the first URL.
You change these through Settings with credentials and an available state database. Saving settings does not itself activate new asset files. See geodata settings requirements.
Use the current names in new files. Asset aliases emit legacy-assets-key; a nonempty old value combined with its new key fails with conflicting-assets-setting. The old NFQUEUE block emits a migration warning and supplies the value only when global.nfqueue_enable is absent. experimental.cache_file.path and cache_id are legacy import hints, not the active database location. store_fakeip has no effect.
Complete annotated example
Use these two files together. They extend the minimal configuration with the tutorial subscription, group, domain rule, DNS rule and download defaults. Replace the subscription URL and listener IP before starting honk. The UI path matches Debian and Ubuntu in Quick start; use your installed path on other systems, commonly /usr/share/doona. For the direct-only baseline, keep the files from Quick start instead.
Keep API credentials separate from the main file that Nodes modifies. See source write requirements.
Main file
# /etc/honk/config.dae# Keep API credentials in a separate include.include{
config.d/*.dae
}# Host traffic, storage, checks and connection settings.global{wan_interface: auto
# For LAN clients, uncomment and replace with their gateway interface.# lan_interface: br-landata_dir:'/var/lib/honk'store_subscribe: true
log_level: info
# Optional append-only log file, relative to data_dir.# log_file: 'honk.log'tproxy_port:12345so_mark_from_dae:0nfqueue_enable: true
tcp_check_url:'https://www.gstatic.com/generate_204'tcp_check_http_method: HEAD
udp_check_dns:'dns.google:53','8.8.8.8','2001:4860:4860::8888'check_interval:30scheck_tolerance:50msdial_mode: domain
bootstrap_resolver:'1.1.1.1:53'tls_implementation: tls
max_concurrent_dials:64preconnect_node_count: auto
udp_warm_node_count:0}# Replace the placeholder with your provider's subscription URL.subscription{harbor:'https://subscription.example/sub'}# Optional static nodes; uncomment only with your real node details.node{# backup: 'socks5://192.0.2.2:1080'}# Select from harbor's nodes by moving-average latency.group{# This group is used by both the traffic rule and the DNS upstream.
proxy {filter:subtag('harbor')policy: min_moving_avg
}}# Send only the tutorial domain through the group.routing{domain(full: example.com)->proxyfallback: direct
}# Resolve the tutorial domain through the same group.dns{# An IP-based HTTPS endpoint avoids a bootstrap hostname dependency.upstream{remote_dns:'https://1.1.1.1/dns-query'->proxy}# Other DNS requests keep their original destination.routing{# Match the same full domain as the traffic rule.request{qname(full: example.com)->remote_dnsfallback: asis
}# Keep the selected upstream's answer.response{fallback: accept
}}}# Download defaults; these URLs alone do not load geodata assets.
assets {route: routing
# Sources for updates after routing rules load the relevant assets.
geodata {geosite:'https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/release/geosite.dat'geoip:'https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/release/geoip.dat'route: direct
}# Applies only to a separately configured Clash dashboard, not doona.
ui {url:'https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip'route: direct
}# Individual subscription options can override these defaults.subscription{interval:86400scache: true
# ua: 'clash.meta'}}
API file
# /etc/honk/config.d/api.dae# Listener settings must be edited outside doona and require a restart.
experimental {# Password sign-in and the installed standard-edition UI.
native_api {enabled: true
listen:'192.168.1.1:9527'password_auth: true
# For token sign-in, remove password_auth and set a real secret.# secret: 'replace-with-a-long-random-token'config_write: true
ui:'/usr/share/doona-web'# Add these only for the actual origin and host you use.# allow_origins: 'https://panel.example'# allowed_hosts: 'panel.example'record_traffic: true
record_memory: true
record_flows: true
record_logs: true
record_dns_log: true
}# Unset enabled retains Selector choices and delay samples.
cache_file {store_dns: false
}}