forked from
tranquil.farm/tranquil-pds
Our Personal Data Server from scratch!
1[server]
2# Public hostname of the PDS (e.g. `pds.example.com`).
3#
4# Can also be specified via environment variable `PDS_HOSTNAME`.
5#
6# Required! This value must be specified.
7#hostname =
8
9# Address to bind the HTTP server to.
10#
11# Can also be specified via environment variable `SERVER_HOST`.
12#
13# Default value: "127.0.0.1"
14#host = "127.0.0.1"
15
16# Port to bind the HTTP server to.
17#
18# Can also be specified via environment variable `SERVER_PORT`.
19#
20# Default value: 3000
21#port = 3000
22
23# List of domains for user handles.
24# Defaults to the PDS hostname when not set.
25#
26# Can also be specified via environment variable `PDS_USER_HANDLE_DOMAINS`.
27#user_handle_domains =
28
29# List of domains available for user registration.
30# Defaults to the PDS hostname when not set.
31#
32# Can also be specified via environment variable `AVAILABLE_USER_DOMAINS`.
33#available_user_domains =
34
35# Enable PDS-hosted did:web identities. Hosting did:web requires a
36# long-term commitment to serve DID documents; opt-in only.
37#
38# Can also be specified via environment variable `ENABLE_PDS_HOSTED_DID_WEB`.
39#
40# Default value: false
41#enable_pds_hosted_did_web = false
42
43# When set to true, skip age-assurance birthday prompt for all accounts.
44#
45# Can also be specified via environment variable `PDS_AGE_ASSURANCE_OVERRIDE`.
46#
47# Default value: false
48#age_assurance_override = false
49
50# Require an invite code for new account registration.
51#
52# Can also be specified via environment variable `INVITE_CODE_REQUIRED`.
53#
54# Default value: true
55#invite_code_required = true
56
57# Allow HTTP (non-TLS) proxy requests. Only useful during development.
58#
59# Can also be specified via environment variable `ALLOW_HTTP_PROXY`.
60#
61# Default value: false
62#allow_http_proxy = false
63
64# Disable all rate limiting. Should only be used in testing.
65#
66# Can also be specified via environment variable `DISABLE_RATE_LIMITING`.
67#
68# Default value: false
69#disable_rate_limiting = false
70
71# List of additional banned words for handle validation.
72#
73# Can also be specified via environment variable `PDS_BANNED_WORDS`.
74#banned_words =
75
76# URL to a privacy policy page.
77#
78# Can also be specified via environment variable `PRIVACY_POLICY_URL`.
79#privacy_policy_url =
80
81# URL to terms of service page.
82#
83# Can also be specified via environment variable `TERMS_OF_SERVICE_URL`.
84#terms_of_service_url =
85
86# Operator contact email address.
87#
88# Can also be specified via environment variable `CONTACT_EMAIL`.
89#contact_email =
90
91# Maximum allowed blob size in bytes (default 10 GiB).
92#
93# Can also be specified via environment variable `MAX_BLOB_SIZE`.
94#
95# Default value: 10737418240
96#max_blob_size = 10737418240
97
98[database]
99# PostgreSQL connection URL.
100#
101# Can also be specified via environment variable `DATABASE_URL`.
102#
103# Required! This value must be specified.
104#url =
105
106# Maximum number of connections in the pool.
107#
108# Can also be specified via environment variable `DATABASE_MAX_CONNECTIONS`.
109#
110# Default value: 100
111#max_connections = 100
112
113# Minimum number of idle connections kept in the pool.
114#
115# Can also be specified via environment variable `DATABASE_MIN_CONNECTIONS`.
116#
117# Default value: 10
118#min_connections = 10
119
120# Timeout in seconds when acquiring a connection from the pool.
121#
122# Can also be specified via environment variable `DATABASE_ACQUIRE_TIMEOUT_SECS`.
123#
124# Default value: 10
125#acquire_timeout_secs = 10
126
127[secrets]
128# Secret used for signing JWTs. Must be at least 32 characters in
129# production.
130#
131# Can also be specified via environment variable `JWT_SECRET`.
132#jwt_secret =
133
134# Secret used for DPoP proof validation. Must be at least 32 characters
135# in production.
136#
137# Can also be specified via environment variable `DPOP_SECRET`.
138#dpop_secret =
139
140# Master key used for key-encryption and HKDF derivation. Must be at
141# least 32 characters in production.
142#
143# Can also be specified via environment variable `MASTER_KEY`.
144#master_key =
145
146# PLC rotation key (DID key). If not set, user-level keys are used.
147#
148# Can also be specified via environment variable `PLC_ROTATION_KEY`.
149#plc_rotation_key =
150
151# Allow insecure/test secrets. NEVER enable in production.
152#
153# Can also be specified via environment variable `TRANQUIL_PDS_ALLOW_INSECURE_SECRETS`.
154#
155# Default value: false
156#allow_insecure = false
157
158[storage]
159# Storage backend: `filesystem` or `s3`.
160#
161# Can also be specified via environment variable `BLOB_STORAGE_BACKEND`.
162#
163# Default value: "filesystem"
164#backend = "filesystem"
165
166# Path on disk for the filesystem blob backend.
167#
168# Can also be specified via environment variable `BLOB_STORAGE_PATH`.
169#
170# Default value: "/var/lib/tranquil-pds/blobs"
171#path = "/var/lib/tranquil-pds/blobs"
172
173# S3 bucket name for blob storage.
174#
175# Can also be specified via environment variable `S3_BUCKET`.
176#s3_bucket =
177
178# Custom S3 endpoint URL.
179#
180# Can also be specified via environment variable `S3_ENDPOINT`.
181#s3_endpoint =
182
183# Repository backend: `postgres` by default, or `tranquil-store`, our embedded db.
184# tranquil-store is EXPERIMENTAL!!!! RISK OF TOTAL DATA LOSS.
185#
186# Can also be specified via environment variable `REPO_BACKEND`.
187#
188# Default value: "postgres"
189#repo_backend = "postgres"
190
191[tranquil_store]
192# Directory for tranquil-store data: the metastore, eventlog, and blockstore.
193#
194# Can also be specified via environment variable `TRANQUIL_STORE_DATA_DIR`.
195#
196# Default value: "/var/lib/tranquil-pds/store"
197#data_dir = "/var/lib/tranquil-pds/store"
198
199# Fjall block cache size in megabytes. Defaults to 20% of system RAM when unset.
200#
201# Can also be specified via environment variable `TRANQUIL_STORE_MEMORY_BUDGET_MB`.
202#memory_budget_mb =
203
204# Number of handler threads. Defaults to available_parallelism / 2.
205#
206# Can also be specified via environment variable `TRANQUIL_STORE_HANDLER_THREADS`.
207#handler_threads =
208
209# Maximum total bytes of pending (unsynced) eventlog payloads. Appenders block
210# once this budget is exhausted until in-flight events drain via fsync. Set to
211# 0 to disable backpressure. Default: 1 GiB.
212#
213# Can also be specified via environment variable
214# `TRANQUIL_STORE_EVENTLOG_PENDING_BYTES_BUDGET`.
215#
216# Default value: 1073741824
217#eventlog_pending_bytes_budget = 1073741824
218
219# Maximum size of an individual eventlog payload in bytes. Single events
220# larger than this are rejected at append time. Default: 256 MiB.
221#
222# Can also be specified via environment variable
223# `TRANQUIL_STORE_EVENTLOG_MAX_EVENT_PAYLOAD`.
224#
225# Default value: 268435456
226#eventlog_max_event_payload = 268435456
227
228[cache]
229# Cache backend: `ripple` by default, or `valkey`.
230#
231# Can also be specified via environment variable `CACHE_BACKEND`.
232#
233# Default value: "ripple"
234#backend = "ripple"
235
236# Valkey / Redis connection URL. Required when `backend = "valkey"`.
237#
238# Can also be specified via environment variable `VALKEY_URL`.
239#valkey_url =
240
241[cache.ripple]
242# Address to bind the Ripple gossip protocol listener.
243#
244# Can also be specified via environment variable `RIPPLE_BIND`.
245#
246# Default value: "0.0.0.0:0"
247#bind_addr = "0.0.0.0:0"
248
249# List of seed peer addresses.
250#
251# Can also be specified via environment variable `RIPPLE_PEERS`.
252#peers =
253
254# Unique machine identifier. Auto-derived from hostname when not set.
255#
256# Can also be specified via environment variable `RIPPLE_MACHINE_ID`.
257#machine_id =
258
259# Gossip protocol interval in milliseconds.
260#
261# Can also be specified via environment variable `RIPPLE_GOSSIP_INTERVAL_MS`.
262#
263# Default value: 200
264#gossip_interval_ms = 200
265
266# Maximum cache size in megabytes.
267#
268# Can also be specified via environment variable `RIPPLE_CACHE_MAX_MB`.
269#
270# Default value: 256
271#cache_max_mb = 256
272
273[plc]
274# Base URL of the PLC directory.
275#
276# Can also be specified via environment variable `PLC_DIRECTORY_URL`.
277#
278# Default value: "https://plc.directory"
279#directory_url = "https://plc.directory"
280
281# HTTP request timeout in seconds.
282#
283# Can also be specified via environment variable `PLC_TIMEOUT_SECS`.
284#
285# Default value: 10
286#timeout_secs = 10
287
288# TCP connect timeout in seconds.
289#
290# Can also be specified via environment variable `PLC_CONNECT_TIMEOUT_SECS`.
291#
292# Default value: 5
293#connect_timeout_secs = 5
294
295# Seconds to cache DID documents in memory.
296#
297# Can also be specified via environment variable `DID_CACHE_TTL_SECS`.
298#
299# Default value: 300
300#did_cache_ttl_secs = 300
301
302[firehose]
303# Size of the in-memory broadcast buffer for firehose events.
304#
305# Can also be specified via environment variable `FIREHOSE_BUFFER_SIZE`.
306#
307# Default value: 10000
308#buffer_size = 10000
309
310# How many hours of historical events to replay for cursor-based
311# firehose connections.
312#
313# Can also be specified via environment variable `FIREHOSE_BACKFILL_HOURS`.
314#
315# Default value: 72
316#backfill_hours = 72
317
318# Maximum number of lagged events before disconnecting a slow consumer.
319#
320# Can also be specified via environment variable `FIREHOSE_MAX_LAG`.
321#
322# Default value: 5000
323#max_lag = 5000
324
325# List of relay / crawler notification URLs.
326#
327# Can also be specified via environment variable `CRAWLERS`.
328#crawlers =
329
330[email]
331# Sender email address. When unset, email sending is disabled.
332#
333# Can also be specified via environment variable `MAIL_FROM_ADDRESS`.
334#from_address =
335
336# Display name used in the `From` header.
337#
338# Can also be specified via environment variable `MAIL_FROM_NAME`.
339#
340# Default value: "Tranquil PDS"
341#from_name = "Tranquil PDS"
342
343# Path to the `sendmail` binary.
344#
345# Can also be specified via environment variable `SENDMAIL_PATH`.
346#
347# Default value: "/usr/sbin/sendmail"
348#sendmail_path = "/usr/sbin/sendmail"
349
350[discord]
351# Discord bot token. When unset, Discord integration is disabled.
352#
353# Can also be specified via environment variable `DISCORD_BOT_TOKEN`.
354#bot_token =
355
356[telegram]
357# Telegram bot token. When unset, Telegram integration is disabled.
358#
359# Can also be specified via environment variable `TELEGRAM_BOT_TOKEN`.
360#bot_token =
361
362# Secret token for incoming webhook verification.
363#
364# Can also be specified via environment variable `TELEGRAM_WEBHOOK_SECRET`.
365#webhook_secret =
366
367[signal]
368# Protocol state is stored in postgres' signal_* tables.
369# Link a device via the admin API before enabling.
370#
371# Can also be specified via environment variable `SIGNAL_ENABLED`.
372#enabled = false
373
374[notifications]
375# Polling interval in milliseconds for the comms queue.
376#
377# Can also be specified via environment variable `NOTIFICATION_POLL_INTERVAL_MS`.
378#
379# Default value: 1000
380#poll_interval_ms = 1000
381
382# Number of notifications to process per batch.
383#
384# Can also be specified via environment variable `NOTIFICATION_BATCH_SIZE`.
385#
386# Default value: 100
387#batch_size = 100
388
389[sso]
390[sso.github]
391# Can also be specified via environment variable `SSO_GITHUB_ENABLED`.
392# Default value: false
393#enabled = false
394
395# Can also be specified via environment variable `SSO_GITHUB_CLIENT_ID`.
396#client_id =
397
398# Can also be specified via environment variable `SSO_GITHUB_CLIENT_SECRET`.
399#client_secret =
400
401# Can also be specified via environment variable `SSO_GITHUB_DISPLAY_NAME`.
402#display_name =
403
404[sso.discord]
405# Can also be specified via environment variable `SSO_DISCORD_ENABLED`.
406# Default value: false
407#enabled = false
408
409# Can also be specified via environment variable `SSO_DISCORD_CLIENT_ID`.
410#client_id =
411
412# Can also be specified via environment variable `SSO_DISCORD_CLIENT_SECRET`.
413#client_secret =
414
415# Can also be specified via environment variable `SSO_DISCORD_DISPLAY_NAME`.
416#display_name =
417
418[sso.google]
419# Can also be specified via environment variable `SSO_GOOGLE_ENABLED`.
420# Default value: false
421#enabled = false
422
423# Can also be specified via environment variable `SSO_GOOGLE_CLIENT_ID`.
424#client_id =
425
426# Can also be specified via environment variable `SSO_GOOGLE_CLIENT_SECRET`.
427#client_secret =
428
429# Can also be specified via environment variable `SSO_GOOGLE_DISPLAY_NAME`.
430#display_name =
431
432[sso.gitlab]
433# Can also be specified via environment variable `SSO_GITLAB_ENABLED`.
434# Default value: false
435#enabled = false
436
437# Can also be specified via environment variable `SSO_GITLAB_CLIENT_ID`.
438#client_id =
439
440# Can also be specified via environment variable `SSO_GITLAB_CLIENT_SECRET`.
441#client_secret =
442
443# Can also be specified via environment variable `SSO_GITLAB_ISSUER`.
444#issuer =
445
446# Can also be specified via environment variable `SSO_GITLAB_DISPLAY_NAME`.
447#display_name =
448
449[sso.oidc]
450# Can also be specified via environment variable `SSO_OIDC_ENABLED`.
451# Default value: false
452#enabled = false
453
454# Can also be specified via environment variable `SSO_OIDC_CLIENT_ID`.
455#client_id =
456
457# Can also be specified via environment variable `SSO_OIDC_CLIENT_SECRET`.
458#client_secret =
459
460# Can also be specified via environment variable `SSO_OIDC_ISSUER`.
461#issuer =
462
463# Can also be specified via environment variable `SSO_OIDC_DISPLAY_NAME`.
464#display_name =
465
466[sso.apple]
467# Can also be specified via environment variable `SSO_APPLE_ENABLED`.
468# Default value: false
469#enabled = false
470
471# Can also be specified via environment variable `SSO_APPLE_CLIENT_ID`.
472#client_id =
473
474# Can also be specified via environment variable `SSO_APPLE_TEAM_ID`.
475#team_id =
476
477# Can also be specified via environment variable `SSO_APPLE_KEY_ID`.
478#key_id =
479
480# Can also be specified via environment variable `SSO_APPLE_PRIVATE_KEY`.
481#private_key =
482
483[moderation]
484# External report-handling service URL.
485#
486# Can also be specified via environment variable `REPORT_SERVICE_URL`.
487#report_service_url =
488
489# DID of the external report-handling service.
490#
491# Can also be specified via environment variable `REPORT_SERVICE_DID`.
492#report_service_did =
493
494[import]
495# Whether the PDS accepts repo imports.
496#
497# Can also be specified via environment variable `ACCEPTING_REPO_IMPORTS`.
498#
499# Default value: true
500#accepting = true
501
502# Maximum allowed import archive size in bytes (default 1 GiB).
503#
504# Can also be specified via environment variable `MAX_IMPORT_SIZE`.
505#
506# Default value: 1073741824
507#max_size = 1073741824
508
509# Maximum number of blocks allowed in an import.
510#
511# Can also be specified via environment variable `MAX_IMPORT_BLOCKS`.
512#
513# Default value: 500000
514#max_blocks = 500000
515
516# Skip CAR verification during import. Only for development/debugging.
517#
518# Can also be specified via environment variable `SKIP_IMPORT_VERIFICATION`.
519#
520# Default value: false
521#skip_verification = false
522
523[scheduled]
524# Interval in seconds between scheduled delete checks.
525#
526# Can also be specified via environment variable `SCHEDULED_DELETE_CHECK_INTERVAL_SECS`.
527#
528# Default value: 3600
529#delete_check_interval_secs = 3600
530
531# Maximum age of events retained in the eventlog before pruning.
532# Per the atproto firehose spec, the relay backfill window only needs
533# to cover "hours or days".
534#
535# Can also be specified via environment variable `EVENT_RETENTION_MAX_AGE_SECS`.
536#
537# Default value: 604800 (7 days)
538#event_retention_max_age_secs = 604800
539
540# Interval in seconds between event retention prune passes.
541# Set to 0 to disable.
542#
543# Can also be specified via environment variable `EVENT_RETENTION_INTERVAL_SECS`.
544#
545# Default value: 3600
546#event_retention_interval_secs = 3600