This repository has no description
1[server]
2# Addresses the XRPC server listens on. When using as an env var, comma-separated.
3#
4# Can also be specified via environment variable `BOBBIN_BIND`.
5#
6# Default value: ["127.0.0.1:8090", "[::1]:8090"]
7#binds = ["127.0.0.1:8090", "[::1]:8090"]
8
9# The amount of time in seconds to allow in-flight requests to drain after sigterm
10# before forcing the listener closed.
11#
12# Can also be specified via environment variable `BOBBIN_SHUTDOWN_GRACE_SECS`.
13#
14# Default value: 30
15#shutdown_grace_secs = 30
16
17# Address for the `/debug/mem` and `/debug/heap` introspection endpoints,
18# for example `127.0.0.1:8091`. Empty disables them so the debug surface is
19# never reachable on the public listener. Bind to loopback only.
20#
21# Can also be specified via environment variable `BOBBIN_DEBUG_BIND`.
22#
23# Default value: ""
24#debug_bind = ""
25
26# Required. Public hostname clients reach this instance on, for example
27# `bobbin.example.com` or `localhost:8090`. Its `did:web` is the audience service-auth
28# tokens must be addressed to, so it has to match the host callers actually use.
29#
30# Can also be specified via environment variable `BOBBIN_HOSTNAME`.
31#
32# Default value: ""
33#hostname = ""
34
35# Reverse proxies in front of bobbin,
36# each a bare IP address without a port or a CIDR block such as `173.245.48.0/20`.
37# Bobbin will read the client address out of `x-forwarded-for`
38# and forward that one address to the knot
39# when a request arrives from a proxy on this list,
40# so a knot that lists bobbin under its own `xrpc.trusted_proxies`
41# can rate-limit per browser
42# instead of pooling everyone bobbin serves into a single bucket.
43# Bobbin will read the last 32 entries of the chain, at most.
44# Leave empty when bobbin takes connections directly,
45# since bobbin would otherwise believe a header any client can write.
46# When using as an env var, comma-separated.
47#
48# Can also be specified via environment variable `BOBBIN_TRUSTED_PROXIES`.
49#
50# Default value: []
51#trusted_proxies = []
52
53[hydrant]
54# Base URL of the hydrant instance - the cursor-replayable /stream lives
55# under this. Use `ws://` or `wss://` - `http://` and `https://`
56# are rewritten to the corresponding ws scheme at connection time!
57#
58# Can also be specified via environment variable `BOBBIN_HYDRANT_URL`.
59#
60# Default value: "http://127.0.0.1:13010"
61#url = "http://127.0.0.1:13010"
62
63# The cursor to request on first connect. Reconnects ignore this and resume
64# strictly after the last cursor seen internally.
65#
66# Can also be specified via environment variable `BOBBIN_START_CURSOR`.
67#
68# Default value: 0
69#start_cursor = 0
70
71[ingest]
72# Concurrent in-flight resolves during ingest. One slot per slingshot rtt.
73# Default 16 sits at the measured throughput
74# knee for cold replay against a healthy hydrant. The committer stays
75# serial so that like, cursor and Spur allocation order are preserved.
76#
77# Can also be specified via environment variable `BOBBIN_INGEST_PARALLELISM`.
78#
79# Default value: 16
80#parallelism = 16
81
82[backpressure]
83# Estimated peak transient anonymous bytes a single hydrating request holds:
84# roughly the page of decoded records plus its serialized copy. Combined with
85# the detected cgroup memory limit to size the in-flight cap on heavy
86# endpoints. Has no effect when no cgroup memory limit is present, the heavy
87# path stays unbounded exactly as before.
88#
89# Can also be specified via environment variable `BOBBIN_BACKPRESSURE_PER_REQUEST_ANON_BYTES`.
90#
91# Default value: 2097152
92#per_request_anon_bytes = 2097152
93
94# How often the adaptive watcher samples memory.current/memory.max and
95# adjusts the in-flight cap. Ignored when no cgroup memory limit is present.
96#
97# Can also be specified via environment variable `BOBBIN_BACKPRESSURE_ADJUST_INTERVAL_MS`.
98#
99# Default value: 500
100#adjust_interval_ms = 500
101
102# memory.current/memory.max ratio below which the watcher additively raises
103# the in-flight cap back toward its ceiling. Sits below the memory.high
104# throttle band so the kernel, not this loop, handles mild pressure.
105#
106# Can also be specified via environment variable `BOBBIN_BACKPRESSURE_RELIEVE_BELOW_RATIO`.
107#
108# Default value: 0.85
109#relieve_below_ratio = 0.85
110
111# memory.current/memory.max ratio above which the watcher multiplicatively
112# cuts the in-flight cap and purges jemalloc arenas. Set above the memory.high
113# watermark so this loop acts as the anti-OOM backstop, not a duplicate throttle.
114#
115# Can also be specified via environment variable `BOBBIN_BACKPRESSURE_TIGHTEN_ABOVE_RATIO`.
116#
117# Default value: 0.92
118#tighten_above_ratio = 0.92
119
120# Bytes held back for the edge index, state indexes, and other derived
121# state that grows after startup. Folded into the heavy-request reserve so
122# the static in-flight cap leaves the index room to fill. Has no effect when
123# no cgroup memory limit is present.
124#
125# Can also be specified via environment variable `BOBBIN_BACKPRESSURE_RESERVED_INDEX_BYTES`.
126#
127# Default value: 67108864
128#reserved_index_bytes = 67108864
129
130[slingshot]
131# Base URL of a slingshot instance. Used for record bodies and identity.
132#
133# Can also be specified via environment variable `BOBBIN_SLINGSHOT_URL`.
134#
135# Default value: "http://127.0.0.1:13011"
136#url = "http://127.0.0.1:13011"
137
138[record_cache]
139# Bound of bytes on the in-process record LRU. Records evict on a weighted
140# LRU policy keyed on URI plus payload length.
141#
142# Can also be specified via environment variable `BOBBIN_RECORD_LRU_BYTES`.
143#
144# Default value: 67108864
145#lru_bytes = 67108864
146
147[search]
148# The heap size in bytes for the in-mem tantivy writer. Larger values
149# trade RAM for fewer segment merges - the index itself lives in
150# `RamDirectory` and is rebuilt from hydrant replay on every restart.
151#
152# Can also be specified via environment variable `BOBBIN_SEARCH_HEAP_BYTES`.
153#
154# Default value: 50000000
155#heap_bytes = 50000000
156
157[knot]
158# Whether to allow the knot proxy to dial private/loopback addresses. Off in
159# production - on for local testing against a knotserver on localhost.
160#
161# Can also be specified via environment variable `BOBBIN_KNOT_ALLOW_PRIVATE`.
162#
163# Default value: false
164#allow_private = false
165
166# Require https on knot hosts. Disable only when proxying to a local
167# knot for development.
168#
169# Can also be specified via environment variable `BOBBIN_KNOT_REQUIRE_HTTPS`.
170#
171# Default value: true
172#require_https = true
173
174[log]
175# Log emitter format. `text` produces human-readable output for local
176# development. `json` emits one structured object per line for log
177# shippers in production.
178#
179# Can also be specified via environment variable `BOBBIN_LOG_FORMAT`.
180#
181# Default value: "text"
182#format = "text"
183
184# `tracing-subscriber` env-filter directive. Defaults to `info` across
185# every span - override with `BOBBIN_LOG=bobbin_xrpc=debug,info` etc.
186#
187# Can also be specified via environment variable `BOBBIN_LOG`.
188#
189# Default value: "info"
190#filter = "info"