Monorepo for Tangled
tangled.org
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[hydrant]
27# Base URL of the hydrant instance - the cursor-replayable /stream lives
28# under this. Use `ws://` or `wss://` - `http://` and `https://`
29# are rewritten to the corresponding ws scheme at connection time!
30#
31# Can also be specified via environment variable `BOBBIN_HYDRANT_URL`.
32#
33# Default value: "http://127.0.0.1:13010"
34#url = "http://127.0.0.1:13010"
35
36# The cursor to request on first connect. Reconnects ignore this and resume
37# strictly after the last cursor seen internally.
38#
39# Can also be specified via environment variable `BOBBIN_START_CURSOR`.
40#
41# Default value: 0
42#start_cursor = 0
43
44[ingest]
45# Concurrent in-flight resolves during ingest. One slot per slingshot rtt.
46# Default 16 sits at the measured throughput
47# knee for cold replay against a healthy hydrant. The committer stays
48# serial so that like, cursor and Spur allocation order are preserved.
49#
50# Can also be specified via environment variable `BOBBIN_INGEST_PARALLELISM`.
51#
52# Default value: 16
53#parallelism = 16
54
55[backpressure]
56# Estimated peak transient anonymous bytes a single hydrating request holds:
57# roughly the page of decoded records plus its serialized copy. Combined with
58# the detected cgroup memory limit to size the in-flight cap on heavy
59# endpoints. Has no effect when no cgroup memory limit is present, the heavy
60# path stays unbounded exactly as before.
61#
62# Can also be specified via environment variable `BOBBIN_BACKPRESSURE_PER_REQUEST_ANON_BYTES`.
63#
64# Default value: 2097152
65#per_request_anon_bytes = 2097152
66
67# How often the adaptive watcher samples memory.current/memory.max and
68# adjusts the in-flight cap. Ignored when no cgroup memory limit is present.
69#
70# Can also be specified via environment variable `BOBBIN_BACKPRESSURE_ADJUST_INTERVAL_MS`.
71#
72# Default value: 500
73#adjust_interval_ms = 500
74
75# memory.current/memory.max ratio below which the watcher additively raises
76# the in-flight cap back toward its ceiling. Sits below the memory.high
77# throttle band so the kernel, not this loop, handles mild pressure.
78#
79# Can also be specified via environment variable `BOBBIN_BACKPRESSURE_RELIEVE_BELOW_RATIO`.
80#
81# Default value: 0.85
82#relieve_below_ratio = 0.85
83
84# memory.current/memory.max ratio above which the watcher multiplicatively
85# cuts the in-flight cap and purges jemalloc arenas. Set above the memory.high
86# watermark so this loop acts as the anti-OOM backstop, not a duplicate throttle.
87#
88# Can also be specified via environment variable `BOBBIN_BACKPRESSURE_TIGHTEN_ABOVE_RATIO`.
89#
90# Default value: 0.92
91#tighten_above_ratio = 0.92
92
93# Bytes held back for the edge index, state indexes, and other derived
94# state that grows after startup. Folded into the heavy-request reserve so
95# the static in-flight cap leaves the index room to fill. Has no effect when
96# no cgroup memory limit is present.
97#
98# Can also be specified via environment variable `BOBBIN_BACKPRESSURE_RESERVED_INDEX_BYTES`.
99#
100# Default value: 67108864
101#reserved_index_bytes = 67108864
102
103[slingshot]
104# Base URL of a slingshot instance. Used for record bodies and identity.
105#
106# Can also be specified via environment variable `BOBBIN_SLINGSHOT_URL`.
107#
108# Default value: "http://127.0.0.1:13011"
109#url = "http://127.0.0.1:13011"
110
111[record_cache]
112# Bound of bytes on the in-process record LRU. Records evict on a weighted
113# LRU policy keyed on URI plus payload length.
114#
115# Can also be specified via environment variable `BOBBIN_RECORD_LRU_BYTES`.
116#
117# Default value: 67108864
118#lru_bytes = 67108864
119
120[search]
121# The heap size in bytes for the in-mem tantivy writer. Larger values
122# trade RAM for fewer segment merges - the index itself lives in
123# `RamDirectory` and is rebuilt from hydrant replay on every restart.
124#
125# Can also be specified via environment variable `BOBBIN_SEARCH_HEAP_BYTES`.
126#
127# Default value: 50000000
128#heap_bytes = 50000000
129
130[knot]
131# Whether to allow the knot proxy to dial private/loopback addresses. Off in
132# production - on for local testing against a knotserver on localhost.
133#
134# Can also be specified via environment variable `BOBBIN_KNOT_ALLOW_PRIVATE`.
135#
136# Default value: false
137#allow_private = false
138
139# Require https on knot hosts. Disable only when proxying to a local
140# knot for development.
141#
142# Can also be specified via environment variable `BOBBIN_KNOT_REQUIRE_HTTPS`.
143#
144# Default value: true
145#require_https = true
146
147[log]
148# Log emitter format. `text` produces human-readable output for local
149# development. `json` emits one structured object per line for log
150# shippers in production.
151#
152# Can also be specified via environment variable `BOBBIN_LOG_FORMAT`.
153#
154# Default value: "text"
155#format = "text"
156
157# `tracing-subscriber` env-filter directive. Defaults to `info` across
158# every span - override with `BOBBIN_LOG=bobbin_xrpc=debug,info` etc.
159#
160# Can also be specified via environment variable `BOBBIN_LOG`.
161#
162# Default value: "info"
163#filter = "info"