Something went wrong. Try again.
Our Personal Data Server from scratch!
Something went wrong. Try again.
tranquil-pds example.toml
15 kB · 546 lines
TOML
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547[server]# Public hostname of the PDS (e.g. `pds.example.com`).## Can also be specified via environment variable `PDS_HOSTNAME`.## Required! This value must be specified.#hostname =
# Address to bind the HTTP server to.## Can also be specified via environment variable `SERVER_HOST`.## Default value: "127.0.0.1"#host = "127.0.0.1"
# Port to bind the HTTP server to.## Can also be specified via environment variable `SERVER_PORT`.## Default value: 3000#port = 3000
# List of domains for user handles.# Defaults to the PDS hostname when not set.## Can also be specified via environment variable `PDS_USER_HANDLE_DOMAINS`.#user_handle_domains =
# List of domains available for user registration.# Defaults to the PDS hostname when not set.## Can also be specified via environment variable `AVAILABLE_USER_DOMAINS`.#available_user_domains =
# Enable PDS-hosted did:web identities. Hosting did:web requires a# long-term commitment to serve DID documents; opt-in only.## Can also be specified via environment variable `ENABLE_PDS_HOSTED_DID_WEB`.## Default value: false#enable_pds_hosted_did_web = false
# When set to true, skip age-assurance birthday prompt for all accounts.## Can also be specified via environment variable `PDS_AGE_ASSURANCE_OVERRIDE`.## Default value: false#age_assurance_override = false
# Require an invite code for new account registration.## Can also be specified via environment variable `INVITE_CODE_REQUIRED`.## Default value: true#invite_code_required = true
# Allow HTTP (non-TLS) proxy requests. Only useful during development.## Can also be specified via environment variable `ALLOW_HTTP_PROXY`.## Default value: false#allow_http_proxy = false
# Disable all rate limiting. Should only be used in testing.## Can also be specified via environment variable `DISABLE_RATE_LIMITING`.## Default value: false#disable_rate_limiting = false
# List of additional banned words for handle validation.## Can also be specified via environment variable `PDS_BANNED_WORDS`.#banned_words =
# URL to a privacy policy page.## Can also be specified via environment variable `PRIVACY_POLICY_URL`.#privacy_policy_url =
# URL to terms of service page.## Can also be specified via environment variable `TERMS_OF_SERVICE_URL`.#terms_of_service_url =
# Operator contact email address.## Can also be specified via environment variable `CONTACT_EMAIL`.#contact_email =
# Maximum allowed blob size in bytes (default 10 GiB).## Can also be specified via environment variable `MAX_BLOB_SIZE`.## Default value: 10737418240#max_blob_size = 10737418240
[database]# PostgreSQL connection URL.## Can also be specified via environment variable `DATABASE_URL`.## Required! This value must be specified.#url =
# Maximum number of connections in the pool.## Can also be specified via environment variable `DATABASE_MAX_CONNECTIONS`.## Default value: 100#max_connections = 100
# Minimum number of idle connections kept in the pool.## Can also be specified via environment variable `DATABASE_MIN_CONNECTIONS`.## Default value: 10#min_connections = 10
# Timeout in seconds when acquiring a connection from the pool.## Can also be specified via environment variable `DATABASE_ACQUIRE_TIMEOUT_SECS`.## Default value: 10#acquire_timeout_secs = 10
[secrets]# Secret used for signing JWTs. Must be at least 32 characters in# production.## Can also be specified via environment variable `JWT_SECRET`.#jwt_secret =
# Secret used for DPoP proof validation. Must be at least 32 characters# in production.## Can also be specified via environment variable `DPOP_SECRET`.#dpop_secret =
# Master key used for key-encryption and HKDF derivation. Must be at# least 32 characters in production.## Can also be specified via environment variable `MASTER_KEY`.#master_key =
# PLC rotation key (DID key). If not set, user-level keys are used.## Can also be specified via environment variable `PLC_ROTATION_KEY`.#plc_rotation_key =
# Allow insecure/test secrets. NEVER enable in production.## Can also be specified via environment variable `TRANQUIL_PDS_ALLOW_INSECURE_SECRETS`.## Default value: false#allow_insecure = false
[storage]# Storage backend: `filesystem` or `s3`.## Can also be specified via environment variable `BLOB_STORAGE_BACKEND`.## Default value: "filesystem"#backend = "filesystem"
# Path on disk for the filesystem blob backend.## Can also be specified via environment variable `BLOB_STORAGE_PATH`.## Default value: "/var/lib/tranquil-pds/blobs"#path = "/var/lib/tranquil-pds/blobs"
# S3 bucket name for blob storage.## Can also be specified via environment variable `S3_BUCKET`.#s3_bucket =
# Custom S3 endpoint URL.## Can also be specified via environment variable `S3_ENDPOINT`.#s3_endpoint =
# Repository backend: `postgres` by default, or `tranquil-store`, our embedded db.# tranquil-store is EXPERIMENTAL!!!! RISK OF TOTAL DATA LOSS.## Can also be specified via environment variable `REPO_BACKEND`.## Default value: "postgres"#repo_backend = "postgres"
[tranquil_store]# Directory for tranquil-store data: the metastore, eventlog, and blockstore.## Can also be specified via environment variable `TRANQUIL_STORE_DATA_DIR`.## Default value: "/var/lib/tranquil-pds/store"#data_dir = "/var/lib/tranquil-pds/store"
# Fjall block cache size in megabytes. Defaults to 20% of system RAM when unset.## Can also be specified via environment variable `TRANQUIL_STORE_MEMORY_BUDGET_MB`.#memory_budget_mb =
# Number of handler threads. Defaults to available_parallelism / 2.## Can also be specified via environment variable `TRANQUIL_STORE_HANDLER_THREADS`.#handler_threads =
# Maximum total bytes of pending (unsynced) eventlog payloads. Appenders block# once this budget is exhausted until in-flight events drain via fsync. Set to# 0 to disable backpressure. Default: 1 GiB.## Can also be specified via environment variable# `TRANQUIL_STORE_EVENTLOG_PENDING_BYTES_BUDGET`.## Default value: 1073741824#eventlog_pending_bytes_budget = 1073741824
# Maximum size of an individual eventlog payload in bytes. Single events# larger than this are rejected at append time. Default: 256 MiB.## Can also be specified via environment variable# `TRANQUIL_STORE_EVENTLOG_MAX_EVENT_PAYLOAD`.## Default value: 268435456#eventlog_max_event_payload = 268435456
[cache]# Cache backend: `ripple` by default, or `valkey`.## Can also be specified via environment variable `CACHE_BACKEND`.## Default value: "ripple"#backend = "ripple"
# Valkey / Redis connection URL. Required when `backend = "valkey"`.## Can also be specified via environment variable `VALKEY_URL`.#valkey_url =
[cache.ripple]# Address to bind the Ripple gossip protocol listener.## Can also be specified via environment variable `RIPPLE_BIND`.## Default value: "0.0.0.0:0"#bind_addr = "0.0.0.0:0"
# List of seed peer addresses.## Can also be specified via environment variable `RIPPLE_PEERS`.#peers =
# Unique machine identifier. Auto-derived from hostname when not set.## Can also be specified via environment variable `RIPPLE_MACHINE_ID`.#machine_id =
# Gossip protocol interval in milliseconds.## Can also be specified via environment variable `RIPPLE_GOSSIP_INTERVAL_MS`.## Default value: 200#gossip_interval_ms = 200
# Maximum cache size in megabytes.## Can also be specified via environment variable `RIPPLE_CACHE_MAX_MB`.## Default value: 256#cache_max_mb = 256
[plc]# Base URL of the PLC directory.## Can also be specified via environment variable `PLC_DIRECTORY_URL`.## Default value: "https://plc.directory"#directory_url = "https://plc.directory"
# HTTP request timeout in seconds.## Can also be specified via environment variable `PLC_TIMEOUT_SECS`.## Default value: 10#timeout_secs = 10
# TCP connect timeout in seconds.## Can also be specified via environment variable `PLC_CONNECT_TIMEOUT_SECS`.## Default value: 5#connect_timeout_secs = 5
# Seconds to cache DID documents in memory.## Can also be specified via environment variable `DID_CACHE_TTL_SECS`.## Default value: 300#did_cache_ttl_secs = 300
[firehose]# Size of the in-memory broadcast buffer for firehose events.## Can also be specified via environment variable `FIREHOSE_BUFFER_SIZE`.## Default value: 10000#buffer_size = 10000
# How many hours of historical events to replay for cursor-based# firehose connections.## Can also be specified via environment variable `FIREHOSE_BACKFILL_HOURS`.## Default value: 72#backfill_hours = 72
# Maximum number of lagged events before disconnecting a slow consumer.## Can also be specified via environment variable `FIREHOSE_MAX_LAG`.## Default value: 5000#max_lag = 5000
# List of relay / crawler notification URLs.## Can also be specified via environment variable `CRAWLERS`.#crawlers =
[email]# Sender email address. When unset, email sending is disabled.## Can also be specified via environment variable `MAIL_FROM_ADDRESS`.#from_address =
# Display name used in the `From` header.## Can also be specified via environment variable `MAIL_FROM_NAME`.## Default value: "Tranquil PDS"#from_name = "Tranquil PDS"
# Path to the `sendmail` binary.## Can also be specified via environment variable `SENDMAIL_PATH`.## Default value: "/usr/sbin/sendmail"#sendmail_path = "/usr/sbin/sendmail"
[discord]# Discord bot token. When unset, Discord integration is disabled.## Can also be specified via environment variable `DISCORD_BOT_TOKEN`.#bot_token =
[telegram]# Telegram bot token. When unset, Telegram integration is disabled.## Can also be specified via environment variable `TELEGRAM_BOT_TOKEN`.#bot_token =
# Secret token for incoming webhook verification.## Can also be specified via environment variable `TELEGRAM_WEBHOOK_SECRET`.#webhook_secret =
[signal]# Protocol state is stored in postgres' signal_* tables.# Link a device via the admin API before enabling.## Can also be specified via environment variable `SIGNAL_ENABLED`.#enabled = false
[notifications]# Polling interval in milliseconds for the comms queue.## Can also be specified via environment variable `NOTIFICATION_POLL_INTERVAL_MS`.## Default value: 1000#poll_interval_ms = 1000
# Number of notifications to process per batch.## Can also be specified via environment variable `NOTIFICATION_BATCH_SIZE`.## Default value: 100#batch_size = 100
[sso][sso.github]# Can also be specified via environment variable `SSO_GITHUB_ENABLED`.# Default value: false#enabled = false
# Can also be specified via environment variable `SSO_GITHUB_CLIENT_ID`.#client_id =
# Can also be specified via environment variable `SSO_GITHUB_CLIENT_SECRET`.#client_secret =
# Can also be specified via environment variable `SSO_GITHUB_DISPLAY_NAME`.#display_name =
[sso.discord]# Can also be specified via environment variable `SSO_DISCORD_ENABLED`.# Default value: false#enabled = false
# Can also be specified via environment variable `SSO_DISCORD_CLIENT_ID`.#client_id =
# Can also be specified via environment variable `SSO_DISCORD_CLIENT_SECRET`.#client_secret =
# Can also be specified via environment variable `SSO_DISCORD_DISPLAY_NAME`.#display_name =
[sso.google]# Can also be specified via environment variable `SSO_GOOGLE_ENABLED`.# Default value: false#enabled = false
# Can also be specified via environment variable `SSO_GOOGLE_CLIENT_ID`.#client_id =
# Can also be specified via environment variable `SSO_GOOGLE_CLIENT_SECRET`.#client_secret =
# Can also be specified via environment variable `SSO_GOOGLE_DISPLAY_NAME`.#display_name =
[sso.gitlab]# Can also be specified via environment variable `SSO_GITLAB_ENABLED`.# Default value: false#enabled = false
# Can also be specified via environment variable `SSO_GITLAB_CLIENT_ID`.#client_id =
# Can also be specified via environment variable `SSO_GITLAB_CLIENT_SECRET`.#client_secret =
# Can also be specified via environment variable `SSO_GITLAB_ISSUER`.#issuer =
# Can also be specified via environment variable `SSO_GITLAB_DISPLAY_NAME`.#display_name =
[sso.oidc]# Can also be specified via environment variable `SSO_OIDC_ENABLED`.# Default value: false#enabled = false
# Can also be specified via environment variable `SSO_OIDC_CLIENT_ID`.#client_id =
# Can also be specified via environment variable `SSO_OIDC_CLIENT_SECRET`.#client_secret =
# Can also be specified via environment variable `SSO_OIDC_ISSUER`.#issuer =
# Can also be specified via environment variable `SSO_OIDC_DISPLAY_NAME`.#display_name =
[sso.apple]# Can also be specified via environment variable `SSO_APPLE_ENABLED`.# Default value: false#enabled = false
# Can also be specified via environment variable `SSO_APPLE_CLIENT_ID`.#client_id =
# Can also be specified via environment variable `SSO_APPLE_TEAM_ID`.#team_id =
# Can also be specified via environment variable `SSO_APPLE_KEY_ID`.#key_id =
# Can also be specified via environment variable `SSO_APPLE_PRIVATE_KEY`.#private_key =
[moderation]# External report-handling service URL.## Can also be specified via environment variable `REPORT_SERVICE_URL`.#report_service_url =
# DID of the external report-handling service.## Can also be specified via environment variable `REPORT_SERVICE_DID`.#report_service_did =
[import]# Whether the PDS accepts repo imports.## Can also be specified via environment variable `ACCEPTING_REPO_IMPORTS`.## Default value: true#accepting = true
# Maximum allowed import archive size in bytes (default 1 GiB).## Can also be specified via environment variable `MAX_IMPORT_SIZE`.## Default value: 1073741824#max_size = 1073741824
# Maximum number of blocks allowed in an import.## Can also be specified via environment variable `MAX_IMPORT_BLOCKS`.## Default value: 500000#max_blocks = 500000
# Skip CAR verification during import. Only for development/debugging.## Can also be specified via environment variable `SKIP_IMPORT_VERIFICATION`.## Default value: false#skip_verification = false
[scheduled]# Interval in seconds between scheduled delete checks.## Can also be specified via environment variable `SCHEDULED_DELETE_CHECK_INTERVAL_SECS`.## Default value: 3600#delete_check_interval_secs = 3600
# Maximum age of events retained in the eventlog before pruning.# Per the atproto firehose spec, the relay backfill window only needs# to cover "hours or days".## Can also be specified via environment variable `EVENT_RETENTION_MAX_AGE_SECS`.## Default value: 604800 (7 days)#event_retention_max_age_secs = 604800
# Interval in seconds between event retention prune passes.# Set to 0 to disable.## Can also be specified via environment variable `EVENT_RETENTION_INTERVAL_SECS`.## Default value: 3600#event_retention_interval_secs = 3600