Skip to content

Service Configuration

Each service has its own YAML configuration file in yaml/services/. This page documents all available options.

File: yaml/services/initializer.yaml

# Schema verification settings
verify:
extensions: true # Verify PostgreSQL extensions
tables: true # Verify tables exist
procedures: true # Verify stored procedures exist
views: true # Verify views exist
# Expected schema elements
schema:
extensions:
- pgcrypto
- btree_gin
tables:
- relays
- events
- events_relays
- nip11
- nip66
- relay_metadata
- service_state
procedures:
- insert_event
- insert_relay
- insert_relay_metadata
- delete_orphan_events
- delete_orphan_nip11
- delete_orphan_nip66
views:
- relay_metadata_latest
# Seed relay configuration
seed:
enabled: true # Enable relay seeding
file_path: data/seed_relays.txt # Path to seed file
FieldTypeDefaultDescription
verify.extensionsbooltrueVerify PostgreSQL extensions
verify.tablesbooltrueVerify tables exist
verify.proceduresbooltrueVerify stored procedures
verify.viewsbooltrueVerify views exist
seed.enabledbooltrueEnable relay seeding
seed.file_pathstring-Path to seed file

File: yaml/services/finder.yaml

# Cycle interval
interval: 3600.0 # 1 hour (minimum: 60.0)
# External API discovery
api:
enabled: true
sources:
- url: https://api.nostr.watch/v1/online
enabled: true
timeout: 30.0
- url: https://api.nostr.watch/v1/offline
enabled: true
timeout: 30.0
delay_between_requests: 1.0
# Event-based discovery (planned)
events:
enabled: false
FieldTypeDefaultRangeDescription
intervalfloat3600.0≥60.0Seconds between cycles
api.enabledbooltrue-Enable API discovery
api.sources[].urlstring--API endpoint URL
api.sources[].enabledbooltrue-Enable this source
api.sources[].timeoutfloat30.01.0-120.0Request timeout
api.delay_between_requestsfloat1.00.0-10.0Delay between API calls

File: yaml/services/monitor.yaml

# Cycle interval
interval: 3600.0 # 1 hour
# Tor proxy for .onion relays
tor:
enabled: true
host: "tor"
port: 9050
# Nostr keys for NIP-66 write tests
keys:
public_key: "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"
# private_key loaded from MONITOR_PRIVATE_KEY env
# Timeouts for relay checks
timeouts:
clearnet: 30.0
tor: 60.0
# Concurrency settings
concurrency:
max_parallel: 50
batch_size: 50
# Relay selection criteria
selection:
min_age_since_check: 3600
FieldTypeDefaultRangeDescription
intervalfloat3600.0≥60.0Seconds between cycles
tor.enabledbooltrue-Enable Tor proxy
tor.hoststring127.0.0.1-Tor SOCKS5 host
tor.portint90501-65535Tor SOCKS5 port
timeouts.clearnetfloat30.05.0-120.0Clearnet timeout
timeouts.torfloat60.010.0-180.0Tor timeout
concurrency.max_parallelint501-500Concurrent checks
concurrency.batch_sizeint501-500DB batch size
selection.min_age_since_checkint3600≥0Re-check interval

File: yaml/services/synchronizer.yaml

# Cycle interval
interval: 900.0 # 15 minutes
# Tor proxy for .onion relays
tor:
enabled: true
host: "tor"
port: 9050
# Event filter settings
filter:
ids: null # Event IDs (null = all)
kinds: null # Event kinds (null = all)
authors: null # Authors (null = all)
tags: null # Tag filters
limit: 500 # Events per request
# Time range for sync
time_range:
default_start: 0
use_relay_state: true
lookback_seconds: 86400
# Network-specific timeouts
timeouts:
clearnet:
request: 30.0
relay: 1800.0
tor:
request: 60.0
relay: 3600.0
# Concurrency settings
concurrency:
max_parallel: 10
max_processes: 10
stagger_delay: [0, 60]
# Relay source settings
source:
from_database: true
max_metadata_age: 43200
require_readable: true
# Per-relay overrides
overrides:
- url: "wss://relay.damus.io"
timeouts:
request: 60.0
relay: 7200.0
FieldTypeDefaultRangeDescription
intervalfloat900.0≥60.0Seconds between cycles
tor.enabledbooltrue-Enable Tor proxy
filter.kindslistnull-Event kinds to sync
filter.limitint5001-5000Events per request
time_range.use_relay_statebooltrue-Use incremental sync
time_range.lookback_secondsint864003600-604800Lookback window
timeouts.clearnet.requestfloat30.05.0-120.0WebSocket timeout
timeouts.clearnet.relayfloat1800.060.0-14400.0Per-relay timeout
concurrency.max_parallelint101-100Connections per process
concurrency.max_processesint101-32Worker processes
source.max_metadata_ageint43200≥0Max metadata age
source.require_readablebooltrue-Only sync readable relays

For clearnet-only deployments:

# All service configs
tor:
enabled: false
monitor.yaml
concurrency:
max_parallel: 10
batch_size: 25
# synchronizer.yaml
concurrency:
max_parallel: 3
max_processes: 2
synchronizer.yaml
concurrency:
max_parallel: 50
max_processes: 16
timeouts:
clearnet:
relay: 3600.0 # 1 hour per relay
synchronizer.yaml
filter:
kinds: [0, 1, 3, 6, 7, 10002] # Profiles, notes, contacts, reposts, reactions, relay lists

For high-traffic or slow relays:

synchronizer.yaml
overrides:
- url: "wss://relay.damus.io"
timeouts:
request: 60.0
relay: 7200.0 # 2 hours
- url: "wss://relay.snort.social"
timeouts:
request: 45.0
relay: 5400.0 # 1.5 hours
- url: "wss://slow-relay.example.com"
timeouts:
request: 120.0
relay: 10800.0 # 3 hours
finder.yaml
api:
sources:
- url: https://api.nostr.watch/v1/online
enabled: true
- url: https://api.nostr.watch/v1/offline
enabled: true
- url: https://my-relay-list.example.com/api/relays
enabled: true
timeout: 60.0

LilBrotr uses minimal configuration overrides:

implementations/lilbrotr/yaml/services/synchronizer.yaml
tor:
enabled: false
concurrency:
max_parallel: 5
max_processes: 4

All other values inherit from Pydantic defaults.