Plainwire Self-Hosting2.0

Complete environment and source token catalog

This appendix is generated from the Plainwire 2.0 source tree. It lists every PLAINWIRE_* token found in the snapshot, including normal operator settings, build helpers, browser globals, and test-only names.

Do not copy this table into .env. Most installations should use the upstream .env.example plus the subsystem guides. This catalog exists so obscure knobs are not invisible.

Catalog size: 187 tokens. Upstream .env.example contains 144 configured names.

Core and public runtime#

Name Example/default Purpose Source
PLAINWIRE_ADAPTIVE_SCREEN false Advanced core and public runtime setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:112<br>src/pw_client_config.erl:10<br>src/pw_admin_runtime.erl:58
PLAINWIRE_ALLOW_STATIC_TURN_CREDENTIALS false Compatibility/security exception. Allows static TURN username/password credentials in production. Default false. Prefer short-lived coturn shared-secret or Cloudflare credentials. src/pw_rtc_config.erl:57
PLAINWIRE_APP_NAME Plainwire Public client behavior. these values are served at runtime, so one build can be reused across deployments without rebuilding the Elm bundle. README.md:122<br>.env.example:9<br>src/pw_client_config.erl:13
PLAINWIRE_DEFAULT_THEME system Advanced core and public runtime setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:14<br>README.md:123<br>.env.example:10
PLAINWIRE_ENC_KEY secret / unset Generate with: openssl rand -base64 32 .env.example:34<br>scripts/install-openrc-release.sh:129<br>src/pw_crypto.erl:4
PLAINWIRE_ENV production Public production deployment .env.development.example:2<br>README.md:110<br>.env.example:2
PLAINWIRE_IDLE_TIMEOUT_MS 600000 Advanced core and public runtime setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:15<br>src/pw_client_config.erl:23
PLAINWIRE_INSTANCE_DESCRIPTION "A fast, self-hosted place to talk." Advanced core and public runtime setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:86<br>src/pw_client_config.erl:19
PLAINWIRE_KRISP_ENABLED false Optional, licensed Krisp bits live in priv/static/krisp (see its README) .env.example:82<br>src/pw_admin_runtime.erl:56<br>src/pw_rtc_config.erl:38
PLAINWIRE_MAX_SESSIONS_PER_USER 32 Advanced core and public runtime setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:17<br>scripts/install-openrc-release.sh:156<br>src/pw_db.erl:4369
PLAINWIRE_PBKDF2_ITERS 160000 Advanced core and public runtime setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:35<br>src/pw_app.erl:149<br>src/pw_util.erl:85
PLAINWIRE_PUBLIC_URL https://chat.example.com Advanced core and public runtime setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:3<br>README.md:111<br>.env.example:3
PLAINWIRE_REGISTRATION_ENABLED true Public instance identity and sign-up policy README.md:124<br>.env.example:85<br>src/pw_client_config.erl:86
PLAINWIRE_SESSION_DAYS 30 Advanced core and public runtime setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:16<br>scripts/install-openrc-release.sh:155<br>src/pw_util.erl:292
PLAINWIRE_SOURCE_REPOSITORY https://github.com/Plainwire-development/Plainwire Repository shown by the first-run tour and Help surfaces. HTTPS only. .env.development.example:24<br>README.md:134<br>.env.example:88

Database#

Name Example/default Purpose Source
PLAINWIRE_ALLOW_INSECURE_DB source-managed / unset Compatibility/security exception. Explicit production exception for PostgreSQL without TLS. Use only when the DB path is fully trusted, such as a private same-host/container network. scripts/install-openrc-release.sh:137<br>deploy/README.md:30<br>src/pw_app.erl:130
PLAINWIRE_DB_HOST database.internal Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:6<br>README.md:116<br>.env.example:19
PLAINWIRE_DB_IDLE_TX_TIMEOUT_MS 15000 Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:29<br>src/pw_db.erl:692
PLAINWIRE_DB_LOCK_TIMEOUT_MS 5000 Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:30<br>src/pw_db.erl:693
PLAINWIRE_DB_MAX_QUEUE 250 Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:27<br>src/pw_db.erl:160
PLAINWIRE_DB_NAME plainwire Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:10<br>README.md:120<br>.env.example:23
PLAINWIRE_DB_PASS secret / unset Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:9<br>README.md:119<br>.env.example:22
PLAINWIRE_DB_POOL_SIZE 20 Start near 2x CPU cores, then watch postgres and tune it .env.development.example:12<br>.env.example:26<br>scripts/install-openrc-release.sh:138
PLAINWIRE_DB_PORT 5432 Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:7<br>README.md:117<br>.env.example:20
PLAINWIRE_DB_SLOW_MS 250 Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:31<br>src/pw_db.erl:176
PLAINWIRE_DB_SSL true Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:11<br>.env.example:24<br>scripts/install-openrc-release.sh:136
PLAINWIRE_DB_STATEMENT_TIMEOUT_MS 15000 Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:28<br>src/pw_db.erl:691
PLAINWIRE_DB_USER plainwire Advanced database setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:8<br>README.md:118<br>.env.example:21
PLAINWIRE_POSTGRES_SERVICE source-managed / unset OpenRC installer override naming the PostgreSQL service to manage/discover. Not used by normal app runtime. scripts/install-openrc-release.sh:19<br>scripts/install-openrc-release.sh:35

Uploads and media#

Name Example/default Purpose Source
PLAINWIRE_ALLOW_ARBITRARY_MEDIA false Compatibility/security exception. Compatibility override allowing remote media outside the normal production restrictions. Default false. Avoid in production unless the egress risk is understood. scripts/install-openrc-release.sh:152<br>src/pw_media.erl:396
PLAINWIRE_ALLOW_UNSIGNED_MEDIA_TOKENS false Compatibility/security exception. Compatibility override for unsigned media tokens in production. Default false. Do not enable as a routine deployment setting. src/pw_media.erl:312
PLAINWIRE_COMPRESS_OVERSIZE_UPLOADS true Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:13<br>scripts/install-openrc-release.sh:143<br>src/pw_client_config.erl:24
PLAINWIRE_FILE_REQUESTS_PER_MINUTE 1200 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:64<br>src/pw_file_hdl.erl:24
PLAINWIRE_MEDIA_ALLOWED_HOSTS cdn.example.com Trusted image/CDN hosts only. keep egress filtering too .env.example:38<br>scripts/install-openrc-release.sh:151<br>src/pw_media.erl:394
PLAINWIRE_MEDIA_FETCH_CONCURRENCY 24 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:39<br>scripts/install-openrc-release.sh:153<br>src/pw_media.erl:275
PLAINWIRE_MEDIA_QUALITY auto Optional numeric diagnostics. Build with scripts/build-media-quality.sh. auto uses the worker if installed; off disables server analysis. .env.example:111<br>src/pw_client_config.erl:9<br>src/pw_admin_runtime.erl:57
PLAINWIRE_MEDIA_QUALITY_BIN source-managed / unset Absolute path override for the optional native media-quality executable. src/pw_media_quality.erl:25<br>docs/CALL_HEALTH.md:18
PLAINWIRE_MEDIA_REQUESTS_PER_MINUTE 1200 Authenticated avatar/file-heavy screens get a generous per-user/IP burst budget .env.example:63<br>src/pw_media_hdl.erl:25
PLAINWIRE_MEDIA_SIGNING_KEY secret / unset Optional dedicated media-token signing key. Keep secret. Source install helpers generate/configure it when needed. scripts/install-openrc-release.sh:130<br>src/pw_crypto.erl:76
PLAINWIRE_PROFILE_IMAGE_MAX_BYTES 16777216 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:12<br>scripts/install-openrc-release.sh:142<br>src/pw_client_config.erl:108
PLAINWIRE_UPLOAD_CONCURRENCY 64 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:46<br>scripts/install-openrc-release.sh:147<br>src/pw_upload_gc.erl:100
PLAINWIRE_UPLOAD_DIR /var/lib/plainwire/uploads Streamed attachments need durable storage and a 250 MB proxy limit on /api/uploads .env.development.example:13<br>.env.example:42<br>scripts/install-openrc-release.sh:139
PLAINWIRE_UPLOAD_IMAGE_MAX_DIMENSION 4096 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:14<br>scripts/install-openrc-release.sh:144<br>src/pw_client_config.erl:25
PLAINWIRE_UPLOAD_INFLIGHT_BYTES 1073741824 Big uploads add up. put a ceiling on the pile. .env.example:49<br>scripts/install-openrc-release.sh:149<br>src/pw_upload_gc.erl:102
PLAINWIRE_UPLOAD_MAX_BYTES 262144000 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:43<br>scripts/install-openrc-release.sh:140<br>deploy/README.md:34
PLAINWIRE_UPLOAD_MAX_FILES 10 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:11<br>scripts/install-openrc-release.sh:141<br>src/pw_client_config.erl:22
PLAINWIRE_UPLOAD_QUOTA_BYTES 1073741824 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:44<br>scripts/install-openrc-release.sh:145<br>src/pw_db.erl:4078
PLAINWIRE_UPLOAD_RETENTION_DAYS 90 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:45<br>scripts/install-openrc-release.sh:146<br>src/pw_upload_gc.erl:138
PLAINWIRE_UPLOAD_USER_CONCURRENCY 4 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:47<br>scripts/install-openrc-release.sh:148<br>src/pw_upload_gc.erl:101
PLAINWIRE_UPLOAD_USER_INFLIGHT_BYTES 536870912 Advanced uploads and media setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:50<br>scripts/install-openrc-release.sh:150<br>src/pw_upload_gc.erl:103

HTTP and WebSocket#

Name Example/default Purpose Source
PLAINWIRE_ALLOWED_ORIGINS source-managed / unset Comma-separated WebSocket origin allowlist. If unset, Plainwire derives the normal production origin from the public URL. Set explicitly for unusual multi-origin deployments. scripts/install-openrc-release.sh:126<br>src/pw_ws.erl:506
PLAINWIRE_HTTP_ACCEPTORS 100 Cowboy/ranch capacity; proxy and file-descriptor limits need to agree .env.example:53<br>src/pw_sup.erl:83
PLAINWIRE_HTTP_CONNECT_TIMEOUT_MS 2500 Advanced http and websocket setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:61<br>src/pw_http_fetch.erl:52<br>src/pw_http_fetch.erl:151
PLAINWIRE_HTTP_FETCH_TIMEOUT_MS 8000 Bounded upstream media/embed fetches: slow/dead avatar hosts must not stall UI lists .env.example:60<br>src/pw_http_fetch.erl:51<br>src/pw_http_fetch.erl:150
PLAINWIRE_HTTP_IDLE_TIMEOUT_MS 60000 Advanced http and websocket setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:55<br>src/pw_sup.erl:108
PLAINWIRE_HTTP_MAX_CONNECTIONS 100000 Advanced http and websocket setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:54<br>src/pw_admin_runtime.erl:51<br>src/pw_sup.erl:84
PLAINWIRE_HTTP_MAX_KEEPALIVE 1000 Advanced http and websocket setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:57<br>src/pw_sup.erl:110
PLAINWIRE_HTTP_REQUEST_TIMEOUT_MS 30000 Advanced http and websocket setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:56<br>src/pw_sup.erl:109
PLAINWIRE_TRUSTED_PROXIES <<"127.0.0.1/32,::1/128">> Trusted reverse-proxy CIDRs. Default source value is 127.0.0.1/32,::1/128. Keep narrow. src/pw_util.erl:336
PLAINWIRE_TRUST_PROXY true Advanced http and websocket setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:5<br>README.md:114<br>.env.example:5
PLAINWIRE_WS_HARD_QUEUE 2000 Advanced http and websocket setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:68<br>src/pw_ws.erl:338
PLAINWIRE_WS_SOFT_QUEUE 500 Slow clients do not get to fill the BEAM mailbox forever .env.example:67<br>src/pw_ws.erl:337

Realtime and TURN#

Name Example/default Purpose Source
PLAINWIRE_CALL_RING_MS source-managed / unset Call ring timeout. Defaults to the server ring constant and is clamped between 10000 and 120000 ms. src/pw_hub.erl:598
PLAINWIRE_CF_ACCOUNT_ID source-managed / unset Optional monthly usage guard. When account ID is present, unknown/stale usage prevents new credentials. Analytics is delayed; this is NOT a billing cap. .env.example:104<br>scripts/install-openrc-release.sh:59<br>scripts/install-openrc-release.sh:161
PLAINWIRE_CF_ANALYTICS_API_TOKEN secret / unset Advanced realtime and turn setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:105<br>scripts/install-openrc-release.sh:60<br>scripts/install-openrc-release.sh:162
PLAINWIRE_CF_TURN_API_TOKEN secret / unset Advanced realtime and turn setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:101<br>scripts/install-openrc-release.sh:58<br>scripts/install-openrc-release.sh:160
PLAINWIRE_CF_TURN_KEY_ID secret / unset Cloudflare TURN takes priority when BOTH values are set. Keep tokens private. A Cloudflare Tunnel token is a different credential and will not work here. .env.example:100<br>scripts/install-openrc-release.sh:57<br>scripts/install-openrc-release.sh:159
PLAINWIRE_CF_USAGE_CHECK_INTERVAL_MS 300000 Advanced realtime and turn setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:107<br>src/pw_cf_turn.erl:70<br>docs/CLOUDFLARE_TURN.md:26
PLAINWIRE_ICE_TRANSPORT_POLICY <<"all">> WebRTC ICE policy. all is normal. relay forces TURN and is useful for controlled relay tests. src/pw_rtc_config.erl:14<br>test/pw_rtc_config_tests.erl:51<br>docs/CLOUDFLARE_TURN.md:35
PLAINWIRE_REQUIRE_TURN true Advanced realtime and turn setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. README.md:178<br>.env.example:78<br>scripts/install-openrc-release.sh:165
PLAINWIRE_RTC_CONFIG source-managed / unset Browser global holding fetched ICE configuration. Not a server environment variable. priv/static/elm-bridge.js:1307<br>priv/static/elm-bridge.js:1471
PLAINWIRE_RTC_RECONNECT_GRACE_MS 15000 Advanced realtime and turn setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:79<br>src/pw_hub.erl:841<br>test/pw_hub_tests.erl:296
PLAINWIRE_STUN_URLS source-managed / unset Comma-separated STUN URL override. Source default includes Google public STUN at stun:stun.l.google.com:19302. src/pw_rtc_config.erl:10<br>test/pw_rtc_config_tests.erl:27<br>test/pw_rtc_config_tests.erl:49
PLAINWIRE_TURN_CREDENTIAL secret / unset Static TURN credential compatibility setting. Production requires the explicit static-credential override. Prefer short-lived credentials. src/pw_rtc_config.erl:91<br>src/pw_rtc_config.erl:112<br>test/pw_rtc_config_tests.erl:30
PLAINWIRE_TURN_MONTHLY_LIMIT_BYTES 950000000000 Advanced realtime and turn setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:106<br>src/pw_cf_turn.erl:121<br>docs/CLOUDFLARE_TURN.md:25
PLAINWIRE_TURN_SECRET secret / unset Advanced realtime and turn setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. README.md:177<br>.env.example:75<br>scripts/install-openrc-release.sh:56
PLAINWIRE_TURN_TTL_SECONDS 3600 Advanced realtime and turn setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:77<br>scripts/install-openrc-release.sh:164<br>src/pw_cf_turn.erl:31
PLAINWIRE_TURN_URLS turn:turn.example.com:3478?transport=udp,turn:turn.example.com:3478?transport=tcp,turns:turn.example.com:5349?transport=tcp Coturn: use-auth-secret, the same static-auth-secret, and a realm README.md:176<br>.env.example:74<br>scripts/install-openrc-release.sh:55
PLAINWIRE_TURN_USERNAME plainwire Advanced realtime and turn setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:76<br>scripts/install-openrc-release.sh:163<br>src/pw_rtc_config.erl:90
PLAINWIRE_VOICE_MAX_PARTICIPANTS 8 Voice room participant cap. Default 8, clamped to 2 through 32. src/pw_hub.erl:21
PLAINWIRE_VOICE_MAX_SHARES 2 Concurrent screen-share cap. Default 2, clamped to 1 through 8. src/pw_hub.erl:22

Admin control plane#

Name Example/default Purpose Source
PLAINWIRE_ADMIN_ACCEPTORS 10 Advanced admin control plane setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:127<br>src/pw_sup.erl:45
PLAINWIRE_ADMIN_ALLOW_REMOTE false Remote production access is deliberately opt-in and requires HTTPS + secure cookies. README.md:274<br>.env.example:135<br>src/pw_app.erl:78
PLAINWIRE_ADMIN_BIND 127.0.0.1 Loopback is the safe default. Put an HTTPS reverse proxy in front for remote use. README.md:270<br>.env.example:125<br>src/pw_app.erl:44
PLAINWIRE_ADMIN_BOOTSTRAP_TOKEN secret / unset Sensitive bootstrap token name recognized by storage/config sanitization. Treat as secret. Prefer the documented enrollment/recovery flow rather than inventing a permanent admin key. src/pw_storage_sanitize.erl:65
PLAINWIRE_ADMIN_COOKIE_SECURE true Advanced admin control plane setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:139<br>src/pw_app.erl:90<br>src/pw_admin_api.erl:323
PLAINWIRE_ADMIN_ENABLED false Optional service-operator control plane. This is for the configured Plainwire HOST, not for moderators inside individual Plainwire servers. It has a separate listener and separate operator sessions. Source code contains no admin key. README.md:269<br>.env.example:123<br>src/pw_app.erl:41
PLAINWIRE_ADMIN_ENROLLMENT_MINUTES 60 Advanced admin control plane setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:130<br>src/pw_admin_api.erl:330
PLAINWIRE_ADMIN_IDLE_TIMEOUT_MS 30000 Admin HTTP listener idle timeout. Default 30000 ms, clamped to 5000 through 120000. src/pw_sup.erl:65
PLAINWIRE_ADMIN_LOCAL_RECOVERY false Emergency only: generate one host-local owner recovery token on startup. Requires loopback bind. Remove after recovery. README.md:264<br>.env.example:137<br>src/pw_app.erl:48
PLAINWIRE_ADMIN_MAX_CONNECTIONS 2000 Advanced admin control plane setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:128<br>src/pw_sup.erl:46
PLAINWIRE_ADMIN_MAX_KEEPALIVE 200 Maximum admin listener keepalive count. Default 200, clamped to 1 through 2000. src/pw_sup.erl:67
PLAINWIRE_ADMIN_PORT 8090 Advanced admin control plane setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. README.md:271<br>.env.example:126<br>src/pw_sup.erl:43
PLAINWIRE_ADMIN_PUBLIC_URL https://control.example.com Advanced admin control plane setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. README.md:274<br>.env.example:138<br>src/pw_admin_runtime.erl:46
PLAINWIRE_ADMIN_REQUEST_TIMEOUT_MS 15000 Admin listener request timeout. Default 15000 ms, clamped to 5000 through 60000. src/pw_sup.erl:66
PLAINWIRE_ADMIN_SECRET_FILE /var/lib/plainwire/admin-instance.key Production defaults to /var/lib/plainwire/admin-instance.key. Keep this file private and persistent; it binds operator verification keys to this instance. .env.example:133<br>src/pw_app.erl:64<br>src/pw_admin_identity.erl:142
PLAINWIRE_ADMIN_SESSION_HOURS 12 Advanced admin control plane setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:129<br>src/pw_admin_api.erl:326

Redis#

Name Example/default Purpose Source
PLAINWIRE_NODE_ID source-managed / unset Stable and unique per running node when using Redis-backed presence across nodes. .env.example:146<br>src/pw_redis.erl:100<br>docs/REDIS.md:13
PLAINWIRE_REDIS_DB 0 Advanced redis setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:152<br>src/pw_redis.erl:179
PLAINWIRE_REDIS_ENABLED false Optional Redis real-time accelerator. Redis is never a durable authority. When Redis is disabled or unreachable, Plainwire falls back to its existing local ETS presence/rate-limit behavior and continues serving messages normally. .env.example:144<br>src/pw_redis.erl:429<br>docs/REDIS.md:27
PLAINWIRE_REDIS_HOST 127.0.0.1 Advanced redis setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:147<br>src/pw_redis.erl:173
PLAINWIRE_REDIS_PASSWORD secret / unset Advanced redis setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:151<br>src/pw_redis.erl:178<br>src/pw_storage_sanitize.erl:65
PLAINWIRE_REDIS_PORT 6379 Advanced redis setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:148<br>src/pw_redis.erl:174
PLAINWIRE_REDIS_PREFIX plainwire Advanced redis setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:153<br>src/pw_redis.erl:403<br>test/pw_redis_tests.erl:26
PLAINWIRE_REDIS_TIMEOUT_MS 80 Advanced redis setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:154<br>src/pw_redis.erl:433
PLAINWIRE_REDIS_TLS false Advanced redis setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:155<br>src/pw_redis.erl:175
PLAINWIRE_REDIS_TLS_INSECURE false Compatibility/security exception. Emergency/private-network compatibility only. Keep false on public networks. .env.example:157<br>src/pw_redis.erl:176
PLAINWIRE_REDIS_USERNAME source-managed / unset Optional Redis 6+ ACL user. If set, password is required and AUTH username password is used. .env.example:150<br>src/pw_redis.erl:177<br>test/browser/integrations-contract.mjs:53

Scylla and message storage#

Name Example/default Purpose Source
PLAINWIRE_INSTANCE_ID source-managed / unset Stable per instance is recommended; otherwise a boot nonce intentionally makes concurrent local instances distinct and they probe separate generator slots. .env.example:210<br>src/pw_message_id.erl:233
PLAINWIRE_MESSAGE_BACKEND postgres Optional ScyllaDB high-volume message/event storage. PostgreSQL remains the relational authority. Keep postgres for small/self-hosted installations. Use dual only while migrating; see docs/SCYLLA.md. .env.example:162<br>src/pw_scylla_config.erl:8<br>docs/CLUSTERING.md:7
PLAINWIRE_MESSAGE_ID_CLOCK_ROLLBACK_MS 2000 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:207<br>src/pw_message_id.erl:48
PLAINWIRE_MESSAGE_NODE_ID auto auto claims one of 64 short-lived PostgreSQL-backed generator slots. .env.example:206<br>src/pw_message_id.erl:202<br>src/pw_message_id.erl:241
PLAINWIRE_SCYLLA_BACKFILL_BATCH 250 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:197<br>src/pw_storage_migration.erl:12
PLAINWIRE_SCYLLA_BACKFILL_CONCURRENCY 8 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:198<br>src/pw_storage_migration.erl:13
PLAINWIRE_SCYLLA_BACKFILL_MAX_ROWS 0 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:199<br>src/pw_storage_migration.erl:14
PLAINWIRE_SCYLLA_BUCKET_POLICY month Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:185<br>src/pw_scylla_config.erl:55<br>docs/SCYLLA.md:92
PLAINWIRE_SCYLLA_CACHE_TTL_MS 20000 Scylla-side message cache TTL. Default 20000 ms, clamped to 1000 through 300000. src/pw_scylla_config.erl:39
PLAINWIRE_SCYLLA_CA_FILE source-managed / unset Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:170<br>scripts/scylla-migrate:44<br>scripts/scylla-migrate:68
PLAINWIRE_SCYLLA_CERT_FILE source-managed / unset Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:171<br>scripts/scylla-migrate:45<br>scripts/scylla-migrate:69
PLAINWIRE_SCYLLA_CONNECT_TIMEOUT_MS 5000 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:178<br>src/pw_scylla_config.erl:32
PLAINWIRE_SCYLLA_CONSISTENCY local_quorum Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:174<br>src/pw_scylla_config.erl:46<br>docs/SCYLLA.md:87
PLAINWIRE_SCYLLA_CONTACT_POINTS 127.0.0.1 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:164<br>scripts/scylla-migrate:7<br>scripts/scylla-migrate:14
PLAINWIRE_SCYLLA_DELIVERY_RETENTION_DAYS 90 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:188<br>src/pw_scylla_config.erl:41<br>docs/SCYLLA.md:130
PLAINWIRE_SCYLLA_DRIVER_QUEUE 32768 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:177<br>src/pw_scylla_config.erl:31
PLAINWIRE_SCYLLA_ENABLED false Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:163<br>src/pw_scylla_config.erl:5<br>docs/SCYLLA.md:82
PLAINWIRE_SCYLLA_EVENT_RETENTION_DAYS 365 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:187<br>src/pw_scylla_config.erl:40<br>docs/SCYLLA.md:129
PLAINWIRE_SCYLLA_HISTORY_BUCKETS 36 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:186<br>src/pw_message_store_scylla.erl:593<br>docs/SCYLLA.md:128
PLAINWIRE_SCYLLA_IO_THREADS 2 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:176<br>src/pw_scylla_config.erl:30<br>docs/SCYLLA.md:89
PLAINWIRE_SCYLLA_KEYSPACE plainwire Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:166<br>scripts/scylla-migrate:9<br>scripts/scylla-migrate:15
PLAINWIRE_SCYLLA_KEY_FILE source-managed / unset Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:172<br>scripts/scylla-migrate:46<br>scripts/scylla-migrate:70
PLAINWIRE_SCYLLA_LOCAL_DC datacenter1 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:173<br>scripts/scylla-migrate:10<br>scripts/scylla-migrate:16
PLAINWIRE_SCYLLA_MAX_INFLIGHT 256 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:181<br>src/pw_scylla_config.erl:35<br>docs/SCYLLA.md:114
PLAINWIRE_SCYLLA_MAX_PAGE_SCAN_ROWS 4096 Upper bound for rows scanned while serving a paged Scylla history request. Default 4096 in the Scylla message store. src/pw_message_store_scylla.erl:602
PLAINWIRE_SCYLLA_MAX_PARTITION_INFLIGHT 8 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:182<br>src/pw_scylla_config.erl:36<br>docs/SCYLLA.md:115
PLAINWIRE_SCYLLA_MAX_PARTITION_QUEUE 128 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:184<br>src/pw_scylla_config.erl:38<br>docs/SCYLLA.md:117
PLAINWIRE_SCYLLA_MAX_QUEUE 4096 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:183<br>src/pw_scylla_config.erl:37<br>docs/SCYLLA.md:116
PLAINWIRE_SCYLLA_MIGRATION_MODE manual Migration behavior selector. Source default is manual. Use the documented storage migration commands rather than changing this casually. src/pw_scylla_config.erl:63
PLAINWIRE_SCYLLA_OPERATION_TIMEOUT_MS 8000 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:180<br>src/pw_scylla_config.erl:34<br>docs/SCYLLA.md:91
PLAINWIRE_SCYLLA_PARITY_SAMPLE_ROWS 500 Rows sampled by parity checks. Default 500, clamped to 50 through 5000. src/pw_storage_migration.erl:71
PLAINWIRE_SCYLLA_PASSWORD secret / unset Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:168<br>scripts/scylla-migrate:43<br>scripts/scylla-migrate:50
PLAINWIRE_SCYLLA_POOL_SIZE 2 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:175<br>src/pw_scylla_config.erl:29<br>docs/SCYLLA.md:88
PLAINWIRE_SCYLLA_PORT 9042 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:165<br>scripts/scylla-migrate:8<br>scripts/scylla-migrate:21
PLAINWIRE_SCYLLA_RECONCILE_INTERVAL_MS 300000 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:189<br>src/pw_storage_reconciler.erl:12<br>docs/SCYLLA.md:248
PLAINWIRE_SCYLLA_RECONCILE_ROWS 500 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:190<br>src/pw_storage_migration.erl:249<br>docs/SCYLLA.md:249
PLAINWIRE_SCYLLA_REPLICATION_FACTOR source-managed / unset Replication factor used by the explicit Scylla migration script when creating schema. Script default is 1 and is only suitable for a single-node/lab topology. scripts/scylla-migrate:11<br>scripts/scylla-migrate:17<br>docs/SCYLLA.md:39
PLAINWIRE_SCYLLA_REQUEST_TIMEOUT_MS 5000 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:179<br>src/pw_scylla_config.erl:33<br>docs/SCYLLA.md:90
PLAINWIRE_SCYLLA_SHADOW_SAMPLE_ROWS 200 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:196<br>src/pw_storage_migration.erl:150<br>docs/SCYLLA.md:253
PLAINWIRE_SCYLLA_TLS false Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:169<br>scripts/scylla-migrate:55<br>scripts/scylla-migrate:80
PLAINWIRE_SCYLLA_USERNAME source-managed / unset Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:167<br>scripts/scylla-migrate:42<br>scripts/scylla-migrate:49
PLAINWIRE_SCYLLA_VERIFY_AFTER_ID 0 Starting message ID for storage verification. Default 0. src/pw_storage_migration.erl:51
PLAINWIRE_SCYLLA_VERIFY_LIMIT 1000 Maximum rows for a verification batch. Default 1000, clamped to 1 through 5000. src/pw_storage_migration.erl:52
PLAINWIRE_SCYLLA_WRITE_INTENT_BUCKETS 512 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:195<br>src/pw_message_store_scylla.erl:590<br>docs/SCYLLA.md:252
PLAINWIRE_SCYLLA_WRITE_INTENT_GRACE_MS 300000 Crash-recovery journal for Scylla-authoritative writes. Intents older than this grace are reconciled against PostgreSQL before cleanup. .env.example:193<br>src/pw_storage_migration.erl:197<br>docs/SCYLLA.md:250
PLAINWIRE_SCYLLA_WRITE_INTENT_RECONCILE_ROWS 500 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:194<br>src/pw_storage_migration.erl:190<br>docs/SCYLLA.md:251
PLAINWIRE_STORAGE_OUTBOX_BATCH 25 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:201<br>src/pw_storage_outbox.erl:26<br>src/pw_storage_outbox.erl:229
PLAINWIRE_STORAGE_OUTBOX_CONCURRENCY 8 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:202<br>src/pw_storage_outbox.erl:27<br>src/pw_storage_outbox.erl:230
PLAINWIRE_STORAGE_OUTBOX_FAILED_RETENTION_DAYS 30 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:204<br>src/pw_db.erl:3119<br>docs/SCYLLA.md:258
PLAINWIRE_STORAGE_OUTBOX_INTERVAL_MS 250 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:200<br>src/pw_storage_outbox.erl:25<br>docs/SCYLLA.md:254
PLAINWIRE_STORAGE_OUTBOX_RETENTION_DAYS 7 Advanced scylla and message storage setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:203<br>src/pw_db.erl:3118<br>docs/SCYLLA.md:257

Webhooks and integrations#

Name Example/default Purpose Source
PLAINWIRE_BOT_TOKEN secret / unset Example environment variable used by the Erlang bot SDK documentation. It is not a core Plainwire server setting. sdk/erlang/README.md:10
PLAINWIRE_GITHUB_CACHE_TTL_MS source-managed / unset Cache public GitHub metadata for two minutes with a token (ten minutes without). Override only when you have a reason; values are clamped to 30s..1h. README.md:145<br>.env.example:96<br>src/pw_github.erl:512
PLAINWIRE_GITHUB_TOKEN secret / unset Plainwire Source uses the public GitHub REST API through the server. A token is optional, but recommended on busy public instances because it raises GitHub's upstream rate limit. Prefer a token with no repository permissions; Plainwire still filters responses to public-safe metadata. It is never returned to the browser. README.md:144<br>.env.example:93<br>src/pw_github.erl:505
PLAINWIRE_KLIPY_API_KEY source-managed / unset Optional KLIPY GIF search. The key stays on the server and is never sent to clients. .env.development.example:18<br>README.md:155<br>.env.example:115
PLAINWIRE_KLIPY_CONTENT_FILTER medium Advanced webhooks and integrations setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:19<br>README.md:156<br>.env.example:116
PLAINWIRE_KLIPY_COUNTRY US Advanced webhooks and integrations setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:20<br>README.md:157<br>.env.example:117
PLAINWIRE_KLIPY_LOCALE en_US Advanced webhooks and integrations setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.development.example:21<br>README.md:158<br>.env.example:118
PLAINWIRE_WEBHOOK_ALLOW_HTTP false Compatibility/security exception. Allows plain HTTP webhook targets. Default false. Keep false for normal production internet egress. src/pw_outbound_url.erl:53
PLAINWIRE_WEBHOOK_CONCURRENCY 8 Webhook dispatcher concurrency. Default 8, clamped to 1 through 32. src/pw_webhook_dispatcher.erl:24
PLAINWIRE_WEBHOOK_DELIVERED_RETENTION_DAYS 7 Advanced webhooks and integrations setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:214<br>src/pw_db.erl:3217
PLAINWIRE_WEBHOOK_FAILED_RETENTION_DAYS 30 Advanced webhooks and integrations setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:215<br>src/pw_db.erl:3218
PLAINWIRE_WEBHOOK_TIMEOUT_MS 8000 Advanced webhooks and integrations setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:212<br>src/pw_webhook_dispatcher.erl:16<br>src/pw_webhook_dispatcher.erl:114
PLAINWIRE_WEBHOOK_WORKER_TIMEOUT_MS 13000 Advanced webhooks and integrations setting present in the Plainwire 2.0 source. Keep the source default unless the subsystem guide or a measured production need calls for an override. .env.example:213<br>src/pw_webhook_dispatcher.erl:17

Build, development, and internal#

Name Example/default Purpose Source
PLAINWIRE_APP_USER source-managed / unset OpenRC install/update helper override for the Unix account that owns the Plainwire checkout. Not an application runtime setting. scripts/install-openrc-release.sh:13<br>scripts/install-openrc-release.sh:14<br>scripts/update-openrc-release.sh:9
PLAINWIRE_ASSET_VERSION source-managed / unset Optional runtime asset fingerprint override. Normally let Plainwire derive its asset version from the build. src/pw_client_config.erl:45<br>test/pw_client_config_tests.erl:35<br>docs/UI_REFRESH.md:3
PLAINWIRE_BUILD_MEDIA_QUALITY source-managed / unset Release helper switch controlling whether the optional native media-quality worker is built. Defaults to 0 in packaging scripts. scripts/package-release.sh:4<br>scripts/release-check.sh:4
PLAINWIRE_BUILD_PROFILE source-managed / unset Release helper rebar profile override. Packaging scripts default it to default. scripts/package-release.sh:4<br>scripts/release-check.sh:4
PLAINWIRE_CLIENT_CONFIG source-managed / unset Browser global populated by bootstrap code. This is not a server environment variable to set in .env. priv/static/elm-bridge.js:14<br>priv/static/bootstrap.js:37
PLAINWIRE_DEBUG source-managed / unset Browser/test debug flag. Not a normal server environment variable. test/browser/rtc.mjs:40<br>priv/static/elm-bridge.js:1342
PLAINWIRE_DEV_DB_DIR source-managed / unset Development PostgreSQL helper data directory. Defaults below XDG data home or ~/.local/share/plainwire/postgres. scripts/dev-db.sh:4
PLAINWIRE_DEV_DB_LOG source-managed / unset Development database helper log path. Defaults to postgres.log under the helper socket directory. scripts/dev-db.sh:6
PLAINWIRE_DEV_DB_SOCKET_DIR source-managed / unset Development database helper socket directory. Defaults to the parent of the development DB data directory. scripts/dev-db.sh:5
PLAINWIRE_HOST source-managed / unset Hostname variable consumed by the upstream Caddy example. It is a proxy-template variable, not the Plainwire public URL setting. deploy/Caddyfile:1<br>deploy/Caddyfile:2<br>deploy/README.md:34
PLAINWIRE_RELEASE_BIN source-managed / unset Path to an installed relx plainwire_relay executable used by migration/benchmark helper scripts for RPC. scripts/storage-migrate:6<br>scripts/storage-migrate:9<br>scripts/storage-bench:5
PLAINWIRE_TEST_BOOL true Internal EUnit fixture for environment parsing tests. Do not configure in production. test/pw_util_tests.erl:35<br>test/pw_util_tests.erl:36<br>test/pw_util_tests.erl:37
PLAINWIRE_TEST_CQLSH_LOG source-managed / unset Browser/tool test fixture used to capture fake cqlsh invocations. Do not configure in production. test/browser/storage-tools.mjs:14<br>test/browser/storage-tools.mjs:20
PLAINWIRE_TEST_NATIVE source-managed / unset Test switch enabling native media-quality integration tests. Do not configure in production. Makefile:115<br>test/pw_media_quality_tests.erl:53<br>docs/CALL_HEALTH.md:12
PLAINWIRE_VERSION__ source-managed / unset Build-time HTML placeholder token, not an environment variable. scripts/build-haml.sh:9<br>scripts/verify-source.sh:39<br>scripts/verify-source.sh:40

Regenerate after an upstream upgrade#

python3 scripts/rebuild-env-reference.py /path/to/Plainwire
python3 scripts/build-site.py

Review the diff. A new variable is not automatically a setting operators should change. Document its operational meaning before using it in production.

Plainwire Self-Hosting Handbook · verified against Plainwire 2.0.0 · 2026-09-17