Skip to content

Environment Variables

Environment variables override configuration files. Use _FILE variants for secrets in Docker, Kubernetes, or secret-manager based deployments.

Most variables map directly from the configuration path:

Configuration fieldEnvironment variable
server.hostSYNCTV_SERVER_HOST
database.urlSYNCTV_DATABASE_URL
security.opaque_server_setup_secretSYNCTV_SECURITY_OPAQUE_SERVER_SETUP_SECRET
proxy_slice_cache.enabledSYNCTV_PROXY_SLICE_CACHE_ENABLED

Complex list values accept JSON arrays where supported. For example:

Terminal window
SYNCTV_SERVER_CORS_ALLOWED_ORIGINS='["https://app.example.com"]'

The list below mirrors the environment variable names used by the runtime.

Environment variableConfiguration field
SYNCTV_CONFIG_PATHexplicit config file path
SYNCTV_DATA_DIRdata_dir
SYNCTV_BOOTSTRAP_CREATE_ROOT_USERbootstrap.create_root_user
SYNCTV_BOOTSTRAP_ROOT_PASSWORDbootstrap.root_password
SYNCTV_BOOTSTRAP_ROOT_PASSWORD_FILEbootstrap.root_password file
SYNCTV_BOOTSTRAP_ROOT_USERNAMEbootstrap.root_username
SYNCTV_BUFFER_SIZES_AUDIT_BUFFERbuffer_sizes.audit_buffer
SYNCTV_BUFFER_SIZES_WEBSOCKET_OUTBOUNDbuffer_sizes.websocket_outbound
SYNCTV_CACHE_L1_CAPACITYcache.l1_capacity
SYNCTV_CACHE_L1_TTL_SECONDScache.l1_ttl_seconds
SYNCTV_CACHE_L2_TTL_SECONDScache.l2_ttl_seconds
SYNCTV_CACHE_PERMISSION_CACHE_CAPACITYcache.permission_cache_capacity
SYNCTV_CACHE_PERMISSION_CACHE_TTL_SECONDScache.permission_cache_ttl_seconds
Environment variableConfiguration field
SYNCTV_FILE_STORAGE_DEFAULT_BACKENDfile_storage.default_backend
SYNCTV_FILE_STORAGE_CHAT_ATTACHMENTS_BACKENDfile_storage.chat_attachments_backend
SYNCTV_FILE_STORAGE_USER_AVATARS_BACKENDfile_storage.user_avatars_backend
SYNCTV_FILE_STORAGE_MEDIA_COVERS_BACKENDfile_storage.media_covers_backend
SYNCTV_FILE_STORAGE_ROOM_COVERS_BACKENDfile_storage.room_covers_backend
SYNCTV_FILE_STORAGE_PLAYLIST_COVERS_BACKENDfile_storage.playlist_covers_backend
SYNCTV_FILE_STORAGE_UNREFERENCED_OBJECT_RETENTION_SECONDSfile_storage.unreferenced_object_retention_seconds
SYNCTV_FILE_STORAGE_BACKENDSfile_storage.backends JSON object
SYNCTV_FILE_UPLOAD_TOKEN_SECRETfile_storage.upload_token_secret
SYNCTV_FILE_UPLOAD_TOKEN_SECRET_FILEfile_storage.upload_token_secret file

Example: disable file storage

Terminal window
SYNCTV_FILE_STORAGE_DEFAULT_BACKEND=disabled
SYNCTV_FILE_STORAGE_UNREFERENCED_OBJECT_RETENTION_SECONDS=86400
SYNCTV_FILE_STORAGE_BACKENDS='{}'

Example: store files in PostgreSQL

Terminal window
SYNCTV_FILE_STORAGE_DEFAULT_BACKEND=database
SYNCTV_FILE_STORAGE_CHAT_ATTACHMENTS_BACKEND=database
SYNCTV_FILE_STORAGE_USER_AVATARS_BACKEND=database
SYNCTV_FILE_STORAGE_MEDIA_COVERS_BACKEND=database
SYNCTV_FILE_STORAGE_ROOM_COVERS_BACKEND=database
SYNCTV_FILE_STORAGE_PLAYLIST_COVERS_BACKEND=database
SYNCTV_FILE_STORAGE_UNREFERENCED_OBJECT_RETENTION_SECONDS=86400
SYNCTV_FILE_UPLOAD_TOKEN_SECRET_FILE=/run/secrets/file_upload_token_secret
SYNCTV_FILE_STORAGE_BACKENDS='{"database":{"type":"database","database":{"compression":"zstd","compression_min_size_bytes":4096,"compression_min_savings_percent":10}}}'

Example: use S3-compatible object storage

Terminal window
SYNCTV_FILE_STORAGE_DEFAULT_BACKEND=s3_public
SYNCTV_FILE_STORAGE_CHAT_ATTACHMENTS_BACKEND=s3_public
SYNCTV_FILE_STORAGE_USER_AVATARS_BACKEND=s3_public
SYNCTV_FILE_STORAGE_MEDIA_COVERS_BACKEND=s3_public
SYNCTV_FILE_STORAGE_ROOM_COVERS_BACKEND=s3_public
SYNCTV_FILE_STORAGE_PLAYLIST_COVERS_BACKEND=s3_public
SYNCTV_FILE_STORAGE_UNREFERENCED_OBJECT_RETENTION_SECONDS=86400
SYNCTV_FILE_UPLOAD_TOKEN_SECRET_FILE=/run/secrets/file_upload_token_secret
SYNCTV_FILE_STORAGE_BACKENDS='{"s3_public":{"type":"s3","s3":{"endpoint":"https://s3.example.com","access_key_id":"access-key","secret_access_key":"secret-key","bucket":"synctv-files","region":"auto","base_path":"files/","public_base_url":"https://cdn.example.com/files","upload_expires_seconds":900}}}'
Environment variableConfiguration field
SYNCTV_PROXY_SLICE_CACHE_ENABLEDproxy_slice_cache.enabled
SYNCTV_PROXY_SLICE_CACHE_SLICE_SIZE_BYTESproxy_slice_cache.slice_size_bytes
SYNCTV_PROXY_SLICE_CACHE_MAX_CACHE_SIZE_BYTESproxy_slice_cache.max_cache_size_bytes
SYNCTV_PROXY_SLICE_CACHE_SEGMENT_TTL_SECONDSproxy_slice_cache.segment_ttl_seconds
SYNCTV_PROXY_SLICE_CACHE_STALE_MAX_AGE_SECONDSproxy_slice_cache.stale_max_age_seconds
SYNCTV_PROXY_SLICE_CACHE_STALE_WHILE_REVALIDATEproxy_slice_cache.stale_while_revalidate
SYNCTV_PROXY_SLICE_CACHE_FILE_BACKEND_ENABLEDproxy_slice_cache.file_backend_enabled
SYNCTV_PROXY_SLICE_CACHE_FILE_CACHE_DIRproxy_slice_cache.file_cache_dir
SYNCTV_PROXY_SLICE_CACHE_EVICTION_INTERVAL_SECONDSproxy_slice_cache.eviction_interval_seconds
SYNCTV_PROXY_SLICE_CACHE_WATERMARK_RATIOproxy_slice_cache.watermark_ratio
SYNCTV_CACHE_USERNAME_CACHE_CAPACITYcache.username_cache_capacity
SYNCTV_CACHE_USERNAME_CACHE_TTL_SECONDScache.username_cache_ttl_seconds
SYNCTV_CLUSTER_CATCHUP_WINDOW_SECScluster.catchup_window_secs
SYNCTV_CLUSTER_CRITICAL_CHANNEL_CAPACITYcluster.critical_channel_capacity
SYNCTV_CLUSTER_DISCOVERY_MODEcluster.discovery_mode
SYNCTV_CLUSTER_ENABLEDcluster.enabled
SYNCTV_CLUSTER_LEADER_ELECTION_MODEcluster.leader_election_mode
SYNCTV_CLUSTER_PEERScluster.peers
SYNCTV_CLUSTER_PUBLISH_CHANNEL_CAPACITYcluster.publish_channel_capacity
SYNCTV_CLUSTER_SECRETcluster.secret
SYNCTV_CLUSTER_SECRET_FILEcluster.secret file
SYNCTV_CLUSTER_STREAM_MAX_LENGTHcluster.stream_max_length
SYNCTV_CONNECTION_LIMITS_IDLE_TIMEOUT_SECONDSconnection_limits.idle_timeout_seconds
SYNCTV_CONNECTION_LIMITS_MAX_DURATION_SECONDSconnection_limits.max_duration_seconds
SYNCTV_CONNECTION_LIMITS_MAX_PER_ROOMconnection_limits.max_per_room
SYNCTV_CONNECTION_LIMITS_MAX_PER_USERconnection_limits.max_per_user
SYNCTV_CONNECTION_LIMITS_MAX_TOTALconnection_limits.max_total
SYNCTV_CONNECTION_LIMITS_WS_MESSAGE_RATE_LIMIT_PER_SECONDconnection_limits.ws_message_rate_limit_per_second
SYNCTV_DATABASE_CONNECT_TIMEOUT_SECONDSdatabase.connect_timeout_seconds
SYNCTV_DATABASE_HOSTdatabase.host
SYNCTV_DATABASE_IDLE_TIMEOUT_SECONDSdatabase.idle_timeout_seconds
SYNCTV_DATABASE_MAX_CONNECTIONSdatabase.max_connections
SYNCTV_DATABASE_MAX_LIFETIME_SECONDSdatabase.max_lifetime_seconds
SYNCTV_DATABASE_MIN_CONNECTIONSdatabase.min_connections
SYNCTV_DATABASE_NAMEdatabase.name
SYNCTV_DATABASE_PASSWORDdatabase.password
SYNCTV_DATABASE_PASSWORD_FILEdatabase.password file
SYNCTV_DATABASE_PORTdatabase.port
SYNCTV_DATABASE_URLdatabase.url
SYNCTV_DATABASE_URL_FILEdatabase.url file
SYNCTV_DATABASE_USERNAMEdatabase.username
SYNCTV_EMAIL_FROM_EMAILemail.from_email
SYNCTV_EMAIL_FROM_NAMEemail.from_name
SYNCTV_EMAIL_SMTP_HOSTemail.smtp_host
SYNCTV_EMAIL_SMTP_PASSWORDemail.smtp_password
SYNCTV_EMAIL_SMTP_PASSWORD_FILEemail.smtp_password file
SYNCTV_EMAIL_SMTP_PORTemail.smtp_port
SYNCTV_EMAIL_SMTP_USERNAMEemail.smtp_username
SYNCTV_EMAIL_USE_TLSemail.use_tls
SYNCTV_JWT_ACCESS_TOKEN_DURATION_HOURSjwt.access_token_duration_hours
SYNCTV_JWT_CLOCK_SKEW_LEEWAY_SECSjwt.clock_skew_leeway_secs
SYNCTV_JWT_GUEST_TOKEN_DURATION_HOURSjwt.guest_token_duration_hours
SYNCTV_JWT_REFRESH_TOKEN_DURATION_DAYSjwt.refresh_token_duration_days
SYNCTV_JWT_SECRETjwt.secret
SYNCTV_JWT_SECRET_FILEjwt.secret file
SYNCTV_LIVESTREAM_PUBLIC_RTMP_HOSTlivestream.public_rtmp_host
SYNCTV_LOGGING_BACKTRACElogging.backtrace
SYNCTV_LOGGING_FILE_PATHlogging.file_path
SYNCTV_LOGGING_FILTERlogging.filter
SYNCTV_LOGGING_FORMATlogging.format
SYNCTV_LOGGING_LEVELlogging.level
SYNCTV_MANAGEMENT_AUTH_TOKENmanagement.auth_token
SYNCTV_MANAGEMENT_AUTH_TOKEN_FILEmanagement.auth_token file
SYNCTV_MANAGEMENT_ENABLEDmanagement.enabled
SYNCTV_MANAGEMENT_ENABLE_REFLECTIONmanagement.enable_reflection
SYNCTV_MANAGEMENT_PORTmanagement.port
SYNCTV_MANAGEMENT_TRANSPORTmanagement.transport
SYNCTV_MANAGEMENT_UNIX_SOCKET_PATHmanagement.unix_socket_path
SYNCTV_MEDIA_PROVIDERS_ALIST_CONNECT_TIMEOUT_SECONDSmedia_providers.alist.connect_timeout_seconds
SYNCTV_MEDIA_PROVIDERS_ALIST_REQUEST_TIMEOUT_SECONDSmedia_providers.alist.request_timeout_seconds
SYNCTV_MEDIA_PROVIDERS_BILIBILI_CONNECT_TIMEOUT_SECONDSmedia_providers.bilibili.connect_timeout_seconds
SYNCTV_MEDIA_PROVIDERS_BILIBILI_REQUEST_TIMEOUT_SECONDSmedia_providers.bilibili.request_timeout_seconds
SYNCTV_MEDIA_PROVIDERS_EMBY_CONNECT_TIMEOUT_SECONDSmedia_providers.emby.connect_timeout_seconds
SYNCTV_MEDIA_PROVIDERS_EMBY_REQUEST_TIMEOUT_SECONDSmedia_providers.emby.request_timeout_seconds
SYNCTV_METRICS_AUTH_BEARER_TOKENmetrics.auth.bearer_token
SYNCTV_METRICS_AUTH_BEARER_TOKEN_FILEmetrics.auth.bearer_token file
SYNCTV_SECURITY_CREDENTIAL_ENCRYPTION_KEYsecurity.credential_encryption_key
SYNCTV_SECURITY_CREDENTIAL_ENCRYPTION_KEY_FILEsecurity.credential_encryption_key file
SYNCTV_SECURITY_OPAQUE_SERVER_SETUP_SECRETsecurity.opaque_server_setup_secret
SYNCTV_SECURITY_OPAQUE_SERVER_SETUP_SECRET_FILEsecurity.opaque_server_setup_secret file
SYNCTV_SECURITY_SSRF_ENABLEDsecurity.ssrf.enabled
SYNCTV_SECURITY_SSRF_ALLOW_PRIVATE_NETWORK_TARGETSsecurity.ssrf.allow_private_network_targets
SYNCTV_SECURITY_SSRF_ALLOWED_HOSTSsecurity.ssrf.allowed_hosts
SYNCTV_SECURITY_SSRF_ALLOWED_IP_RANGESsecurity.ssrf.allowed_ip_ranges
SYNCTV_SERVER_CORS_ALLOWED_ORIGINSserver.cors_allowed_origins
SYNCTV_SERVER_HOSTserver.host
Environment variableConfiguration field
SYNCTV_REQUEST_RATE_LIMITS_ADMIN_MAX_REQUESTSrequest_rate_limits.admin_max_requests
SYNCTV_REQUEST_RATE_LIMITS_ADMIN_WINDOW_SECONDSrequest_rate_limits.admin_window_seconds
SYNCTV_REQUEST_RATE_LIMITS_AUTH_MAX_REQUESTSrequest_rate_limits.auth_max_requests
SYNCTV_REQUEST_RATE_LIMITS_AUTH_WINDOW_SECONDSrequest_rate_limits.auth_window_seconds
SYNCTV_REQUEST_RATE_LIMITS_MEDIA_MAX_REQUESTSrequest_rate_limits.media_max_requests
SYNCTV_REQUEST_RATE_LIMITS_MEDIA_WINDOW_SECONDSrequest_rate_limits.media_window_seconds
SYNCTV_REQUEST_RATE_LIMITS_READ_MAX_REQUESTSrequest_rate_limits.read_max_requests
SYNCTV_REQUEST_RATE_LIMITS_READ_WINDOW_SECONDSrequest_rate_limits.read_window_seconds
SYNCTV_REQUEST_RATE_LIMITS_SCOPESrequest_rate_limits.scopes
SYNCTV_REQUEST_RATE_LIMITS_STREAMING_MAX_REQUESTSrequest_rate_limits.streaming_max_requests
SYNCTV_REQUEST_RATE_LIMITS_STREAMING_WINDOW_SECONDSrequest_rate_limits.streaming_window_seconds
SYNCTV_REQUEST_RATE_LIMITS_WEBSOCKET_MAX_REQUESTSrequest_rate_limits.websocket_max_requests
SYNCTV_REQUEST_RATE_LIMITS_WEBSOCKET_WINDOW_SECONDSrequest_rate_limits.websocket_window_seconds
SYNCTV_REQUEST_RATE_LIMITS_WRITE_MAX_REQUESTSrequest_rate_limits.write_max_requests
SYNCTV_REQUEST_RATE_LIMITS_WRITE_WINDOW_SECONDSrequest_rate_limits.write_window_seconds
SYNCTV_LIVESTREAM_CLEANUP_CHECK_INTERVAL_SECONDSlivestream.cleanup_check_interval_seconds
SYNCTV_LIVESTREAM_FLV_MAX_CONNECTION_DURATION_SECONDSlivestream.flv_max_connection_duration_seconds
SYNCTV_LIVESTREAM_FLV_WRITE_TIMEOUT_SECONDSlivestream.flv_write_timeout_seconds
SYNCTV_LIVESTREAM_GOP_CACHE_MAX_MEMORY_MBlivestream.gop_cache_max_memory_mb
SYNCTV_LIVESTREAM_GOP_CACHE_SIZElivestream.gop_cache_size
SYNCTV_LIVESTREAM_HLS_MEMORY_MAX_MBlivestream.hls_memory_max_mb
SYNCTV_LIVESTREAM_HLS_STORAGE_BACKENDlivestream.hls_storage_backend
SYNCTV_LIVESTREAM_HLS_STORAGE_PATHlivestream.hls_storage_path
SYNCTV_LIVESTREAM_HLS_OSS_ENDPOINTlivestream.hls_oss.endpoint
SYNCTV_LIVESTREAM_HLS_OSS_ACCESS_KEY_IDlivestream.hls_oss.access_key_id
SYNCTV_LIVESTREAM_HLS_OSS_ACCESS_KEY_ID_FILElivestream.hls_oss.access_key_id file
SYNCTV_LIVESTREAM_HLS_OSS_SECRET_ACCESS_KEYlivestream.hls_oss.secret_access_key
SYNCTV_LIVESTREAM_HLS_OSS_SECRET_ACCESS_KEY_FILElivestream.hls_oss.secret_access_key file
SYNCTV_LIVESTREAM_HLS_OSS_BUCKETlivestream.hls_oss.bucket
SYNCTV_LIVESTREAM_HLS_OSS_REGIONlivestream.hls_oss.region
SYNCTV_LIVESTREAM_HLS_OSS_BASE_PATHlivestream.hls_oss.base_path
SYNCTV_LIVESTREAM_MAX_FLV_TAG_SIZE_BYTESlivestream.max_flv_tag_size_bytes
SYNCTV_LIVESTREAM_PULL_INITIAL_BACKOFF_MSlivestream.pull_initial_backoff_ms
SYNCTV_LIVESTREAM_PULL_MAX_BACKOFF_MSlivestream.pull_max_backoff_ms
SYNCTV_LIVESTREAM_PULL_MAX_RETRIESlivestream.pull_max_retries
SYNCTV_LIVESTREAM_RTMP_PORTlivestream.rtmp_port
SYNCTV_LIVESTREAM_STREAM_TIMEOUT_SECONDSlivestream.stream_timeout_seconds
SYNCTV_MESSAGING_RATE_LIMITS_CHAT_PER_SECONDmessaging_rate_limits.chat_per_second
SYNCTV_MESSAGING_RATE_LIMITS_WINDOW_SECONDSmessaging_rate_limits.window_seconds
SYNCTV_METRICS_AUTH_BASIC_PASSWORDmetrics.auth.basic_password
SYNCTV_METRICS_AUTH_BASIC_PASSWORD_FILEmetrics.auth.basic_password file
SYNCTV_METRICS_AUTH_BASIC_USERNAMEmetrics.auth.basic_username
SYNCTV_METRICS_AUTH_KUBERNETES_AUDIENCEmetrics.auth.kubernetes.audience
SYNCTV_METRICS_AUTH_KUBERNETES_AUTHENTICATION_CACHE_TTL_SECONDSmetrics.auth.kubernetes.authentication_cache_ttl_seconds
SYNCTV_METRICS_AUTH_KUBERNETES_AUTHORIZATION_CACHE_TTL_SECONDSmetrics.auth.kubernetes.authorization_cache_ttl_seconds
SYNCTV_METRICS_AUTH_MODEmetrics.auth.mode
SYNCTV_METRICS_ENABLEDmetrics.enabled
SYNCTV_METRICS_HOSTmetrics.host
SYNCTV_METRICS_PORTmetrics.port
SYNCTV_METRICS_TLS_CERT_PATHmetrics.tls.cert_path
SYNCTV_METRICS_TLS_ENABLEDmetrics.tls.enabled
SYNCTV_METRICS_TLS_KEY_PATHmetrics.tls.key_path
SYNCTV_PASSWORD_COMPLEXITY_MAX_REPEATED_CHARSpassword_complexity.max_repeated_chars
SYNCTV_PASSWORD_COMPLEXITY_MIN_LENGTHpassword_complexity.min_length
SYNCTV_PASSWORD_COMPLEXITY_REQUIRE_DIGITpassword_complexity.require_digit
SYNCTV_PASSWORD_COMPLEXITY_REQUIRE_LOWERCASEpassword_complexity.require_lowercase
SYNCTV_PASSWORD_COMPLEXITY_REQUIRE_SPECIALpassword_complexity.require_special
SYNCTV_PASSWORD_COMPLEXITY_REQUIRE_UPPERCASEpassword_complexity.require_uppercase
SYNCTV_PASSWORD_COMPLEXITY_ZXCVBN_ENABLEDpassword_complexity.zxcvbn_enabled
SYNCTV_PASSWORD_COMPLEXITY_ZXCVBN_MIN_SCOREpassword_complexity.zxcvbn_min_score
SYNCTV_PUBLIC_IDS_SQIDS_ALPHABETpublic_ids.sqids.alphabet
SYNCTV_PUBLIC_IDS_SQIDS_MIN_LENGTHpublic_ids.sqids.min_length
SYNCTV_REDIS_CONNECT_TIMEOUT_SECONDSredis.connect_timeout_seconds
SYNCTV_REDIS_DATABASEredis.database
SYNCTV_REDIS_DEPLOYMENT_MODEredis.deployment_mode
SYNCTV_REDIS_HOSTredis.host
SYNCTV_REDIS_KEY_PREFIXredis.key_prefix
SYNCTV_REDIS_PASSWORDredis.password
SYNCTV_REDIS_PASSWORD_FILEredis.password file
SYNCTV_REDIS_PIPELINE_BUFFER_SIZEredis.pipeline_buffer_size
SYNCTV_REDIS_PORTredis.port
SYNCTV_REDIS_RESPONSE_TIMEOUT_SECONDSredis.response_timeout_seconds
SYNCTV_REDIS_SENTINEL_ADDRESSESredis.sentinel_addresses
SYNCTV_REDIS_SENTINEL_MASTER_NAMEredis.sentinel_master_name
SYNCTV_REDIS_URLredis.url
SYNCTV_REDIS_URL_FILEredis.url file
SYNCTV_REDIS_USERNAMEredis.username
SYNCTV_SERVER_ADVERTISE_HOSTserver.advertise_host
SYNCTV_SERVER_ENABLE_REFLECTIONserver.enable_reflection
SYNCTV_SERVER_GRPC_COMPRESSION_ENABLEDserver.grpc_compression_enabled
SYNCTV_SERVER_GRPC_MAX_MESSAGE_SIZE_BYTESserver.grpc_max_message_size_bytes
SYNCTV_SERVER_PORTserver.port
SYNCTV_SERVER_SHUTDOWN_DRAIN_TIMEOUT_SECONDSserver.shutdown_drain_timeout_seconds
SYNCTV_SERVER_TRUSTED_PROXIESserver.trusted_proxies
SYNCTV_TIME_TIMEZONEtime.timezone
SYNCTV_WEBAUTHN_ALLOWED_ORIGINSwebauthn.allowed_origins
SYNCTV_WEBAUTHN_ALLOW_ANY_PORTwebauthn.allow_any_port
SYNCTV_WEBAUTHN_ALLOW_SUBDOMAINSwebauthn.allow_subdomains
SYNCTV_WEBAUTHN_ENABLEDwebauthn.enabled
SYNCTV_WEBAUTHN_RP_IDwebauthn.rp_id
SYNCTV_WEBAUTHN_RP_NAMEwebauthn.rp_name
SYNCTV_WEBAUTHN_RP_ORIGINwebauthn.rp_origin
SYNCTV_WEBAUTHN_TIMEOUT_SECONDSwebauthn.timeout_seconds
SYNCTV_WEBRTC_ENABLE_BUILTIN_STUNwebrtc.enable_builtin_stun
SYNCTV_WEBRTC_FILTER_PRIVATE_ICE_CANDIDATESwebrtc.filter_private_ice_candidates
SYNCTV_WEBRTC_MODEwebrtc.mode
SYNCTV_WEBRTC_STUN_EXTERNAL_ADDRwebrtc.stun_external_addr
SYNCTV_WEBRTC_STUN_HOSTwebrtc.stun_host
SYNCTV_WEBRTC_STUN_PORTwebrtc.stun_port

These variables are read by the media-provider-server binary, not by the main SyncTV config loader.

Environment variableMeaning
PROVIDER_AUTH_SECRETRequired shared secret for x-provider-secret gRPC metadata
PROVIDER_LISTEN_ADDRProvider gRPC listen address, default [::]:50051
PROVIDER_GRPC_COMPRESSION_ENABLEDAllow provider server gzip compression negotiation, default true

These variables are read by the synctv management CLI and are not service static-configuration fields. config validate --strict does not report them as unsupported SYNCTV_ configuration variables.

Environment variableMeaning
SYNCTV_MANAGEMENT_ENDPOINTManagement endpoint used by CLI commands, for example unix:///var/lib/synctv/run/synctv.sock or http://127.0.0.1:50052