Environment Variables Reference
Complete reference for all Hyperscape environment variables.Overview
Hyperscape uses environment variables for configuration across packages. Variables are organized by category and package. Configuration Files:.env.example- Root-level streaming and deploymentpackages/server/.env.example- Server configurationpackages/client/.env.example- Client configurationpackages/plugin-hyperscape/.env.example- AI agent configurationpackages/asset-forge/.env.example- Asset generation tools
Core Configuration
Authentication
PRIVY_APP_ID
Package: ServerRequired: Yes (production)
Description: Privy application ID for authentication
Example:
clxxx...
PRIVY_APP_SECRET
Package: ServerRequired: Yes (production)
Description: Privy application secret
Example:
secret_xxx...
PUBLIC_PRIVY_APP_ID
Package: ClientRequired: Yes (production)
Description: Privy app ID (must match server)
Example:
clxxx...
JWT_SECRET
Package: ServerRequired: Yes (production)
Description: Secret for signing JWT tokens
Example: Generate with
openssl rand -base64 32
Database
DATABASE_URL
Package: ServerRequired: Yes (production)
Description: PostgreSQL connection string
Example:
postgresql://user:pass@host:5432/hyperscapeDefault:
postgresql://hyperscape:hyperscape_dev_password@localhost:5488/hyperscape
Server
PORT
Package: ServerRequired: No
Description: Server HTTP/WebSocket port
Default:
5555
PUBLIC_API_URL
Package: ClientRequired: No
Description: Server API URL
Default:
http://localhost:5555
PUBLIC_WS_URL
Package: ClientRequired: No
Description: Server WebSocket URL
Default:
ws://localhost:5555/ws
GPU Rendering (Vast.ai)
Display Configuration
DISPLAY
Package: Server (streaming)Required: Yes (streaming)
Description: X display server
Example:
:99 (Xorg/Xvfb), :0 (local)Auto-configured: Yes (by deploy script)
GPU_RENDERING_MODE
Package: Server (streaming)Required: No
Description: GPU rendering mode
Values:
xorg, xvfb-vulkanAuto-configured: Yes (by deploy script)
DUEL_CAPTURE_USE_XVFB
Package: Server (streaming)Required: No
Description: Use Xvfb virtual display
Values:
true, falseDefault:
falseAuto-configured: Yes (by deploy script)
VK_ICD_FILENAMES
Package: Server (streaming)Required: No
Description: Force specific Vulkan ICD
Example:
/usr/share/vulkan/icd.d/nvidia_icd.jsonAuto-configured: Yes (by deploy script)
Video Capture
STREAM_CAPTURE_MODE
Package: Server (streaming)Required: No
Description: Capture mode
Values:
cdp (recommended), mediarecorder, webcodecsDefault:
cdp
STREAM_CAPTURE_HEADLESS
Package: Server (streaming)Required: No
Description: Headless mode (WebGPU requires display)
Values:
false, true, newDefault:
falseNote: Always
false for WebGPU support
STREAM_CAPTURE_CHANNEL
Package: Server (streaming)Required: No
Description: Browser channel
Values:
chrome, chrome-dev, msedge, etc.Default:
chrome-dev (for WebGPU)
STREAM_CAPTURE_EXECUTABLE
Package: Server (streaming)Required: No
Description: Custom browser executable path
Example:
/usr/bin/google-chrome-unstable
STREAM_CAPTURE_ANGLE
Package: Server (streaming)Required: No
Description: ANGLE backend for WebGPU
Values:
vulkan, metal, d3d11Default:
vulkan (Linux), metal (macOS)
STREAM_CDP_QUALITY
Package: Server (streaming)Required: No
Description: JPEG quality for CDP screencast
Range: 1-100
Default:
80
STREAM_FPS
Package: Server (streaming)Required: No
Description: Target frame rate
Default:
30
STREAM_CAPTURE_WIDTH
Package: Server (streaming)Required: No
Description: Stream width (must be even)
Default:
1280
STREAM_CAPTURE_HEIGHT
Package: Server (streaming)Required: No
Description: Stream height (must be even)
Default:
720
Audio Capture
STREAM_AUDIO_ENABLED
Package: Server (streaming)Required: No
Description: Enable audio capture via PulseAudio
Values:
true, falseDefault:
true
PULSE_AUDIO_DEVICE
Package: Server (streaming)Required: No
Description: PulseAudio monitor device
Default:
chrome_audio.monitor
PULSE_SERVER
Package: Server (streaming)Required: No
Description: PulseAudio server socket
Default:
unix:/tmp/pulse-runtime/pulse/nativeAuto-configured: Yes (by deploy script)
XDG_RUNTIME_DIR
Package: Server (streaming)Required: No
Description: PulseAudio runtime directory
Default:
/tmp/pulse-runtimeAuto-configured: Yes (by deploy script)
Encoding
STREAM_BITRATE
Package: Server (streaming)Required: No
Description: Video bitrate in bits per second
Default:
4500000 (4.5 Mbps)
STREAM_BUFFER_SIZE
Package: Server (streaming)Required: No
Description: FFmpeg buffer size
Default:
18000000 (4x bitrate)
STREAM_PRESET
Package: Server (streaming)Required: No
Description: x264 encoding preset
Values:
ultrafast, veryfast, faster, fast, medium, slow, slower, veryslowDefault:
medium
STREAM_LOW_LATENCY
Package: Server (streaming)Required: No
Description: Enable zerolatency tune (disables B-frames)
Values:
true, falseDefault:
false
STREAM_GOP_SIZE
Package: Server (streaming)Required: No
Description: Keyframe interval in frames
Default:
60 (2 seconds at 30fps)Note: Lower = faster playback start, higher bitrate
Recovery
STREAM_CAPTURE_RECOVERY_TIMEOUT_MS
Package: Server (streaming)Required: No
Description: Recovery timeout in milliseconds
Default:
30000 (30 seconds)
STREAM_CAPTURE_RECOVERY_MAX_FAILURES
Package: Server (streaming)Required: No
Description: Max failures before fallback
Default:
6
RTMP Streaming
Twitch
TWITCH_STREAM_KEY
Package: Server (streaming)Required: Yes (for Twitch)
Description: Twitch stream key
Example:
live_xxxxx_yyyyyGet from: dashboard.twitch.tv/settings/stream
TWITCH_RTMP_URL
Package: Server (streaming)Required: No
Description: Twitch ingest URL
Default:
rtmps://live.twitch.tv/app
Kick
KICK_STREAM_KEY
Package: Server (streaming)Required: Yes (for Kick)
Description: Kick stream key
Get from: kick.com/dashboard/settings/stream
KICK_RTMP_URL
Package: Server (streaming)Required: Yes (for Kick)
Description: Kick ingest URL
Example:
rtmps://fa723fc1b171.global-contribute.live-video.net/app
X/Twitter
X_STREAM_KEY
Package: Server (streaming)Required: Yes (for X)
Description: X/Twitter stream key
Get from: studio.twitter.com
X_RTMP_URL
Package: Server (streaming)Required: Yes (for X)
Description: X/Twitter ingest URL
Example:
rtmp://sg.pscp.tv:80/x
YouTube
YOUTUBE_STREAM_KEY
Package: Server (streaming)Required: No
Description: YouTube stream key (disabled by default)
Default:
"" (empty = disabled)
Solana
Deployment Keys
SOLANA_DEPLOYER_PRIVATE_KEY
Package: ServerRequired: Yes (on-chain features)
Description: Base58-encoded Solana private key (used for all roles)
Example:
5J... (base58)
SOLANA_ARENA_AUTHORITY_SECRET
Package: ServerRequired: No
Description: Arena authority keypair (fee payer)
Default: Falls back to
SOLANA_DEPLOYER_PRIVATE_KEY
SOLANA_ARENA_REPORTER_SECRET
Package: ServerRequired: No
Description: Arena reporter keypair
Default: Falls back to
SOLANA_DEPLOYER_PRIVATE_KEY
SOLANA_ARENA_KEEPER_SECRET
Package: ServerRequired: No
Description: Arena keeper keypair
Default: Falls back to
SOLANA_DEPLOYER_PRIVATE_KEY
SOLANA_MM_PRIVATE_KEY
Package: ServerRequired: No
Description: Market maker keypair
Default: None
Network
SOLANA_RPC_URL
Package: ServerRequired: No
Description: Solana RPC endpoint
Default:
https://api.devnet.solana.com
SOLANA_WS_URL
Package: ServerRequired: No
Description: Solana WebSocket endpoint
Default:
wss://api.devnet.solana.com/
AI Agents
Connection
HYPERSCAPE_SERVER_URL
Package: plugin-hyperscapeRequired: No
Description: WebSocket URL to game server
Default:
ws://localhost:5555/ws
HYPERSCAPE_API_URL
Package: plugin-hyperscapeRequired: No
Description: HTTP API URL
Default:
http://localhost:5555
HYPERSCAPE_AUTO_RECONNECT
Package: plugin-hyperscapeRequired: No
Description: Auto-reconnect on disconnect
Values:
true, falseDefault:
true
Authentication
HYPERSCAPE_AUTH_TOKEN
Package: plugin-hyperscapeRequired: Yes (agents)
Description: Agent authentication token
Note: Auto-generated via wallet auth if not set
HYPERSCAPE_PRIVY_USER_ID
Package: plugin-hyperscapeRequired: No
Description: Privy user ID for agent
HYPERSCAPE_CHARACTER_ID
Package: plugin-hyperscapeRequired: Yes (agents)
Description: Character ID for agent to control
Note: Auto-generated via wallet auth if not set
Behavior
HYPERSCAPE_AUTO_ACCEPT_DUELS
Package: plugin-hyperscapeRequired: No
Description: Auto-accept duel challenges (duel bot mode)
Values:
true, falseDefault:
false
HYPERSCAPE_SILENT_CHAT
Package: plugin-hyperscapeRequired: No
Description: Disable chat message processing
Values:
true, falseDefault:
false
HYPERSCAPE_TICK_INTERVAL
Package: plugin-hyperscapeRequired: No
Description: Normal tick interval in milliseconds
Default:
10000 (10 seconds)
HYPERSCAPE_FAST_TICK_ENABLED
Package: plugin-hyperscapeRequired: No
Description: Enable fast-tick mode
Values:
true, falseDefault:
true
Asset Generation
AI APIs
OPENAI_API_KEY
Package: asset-forgeRequired: Yes (asset generation)
Description: OpenAI API key for GPT-4
Get from: platform.openai.com/api-keys
MESHY_API_KEY
Package: asset-forgeRequired: Yes (3D generation)
Description: Meshy AI API key
Get from: meshy.ai
Deprecated Variables
Removed (v0.2.0)
These variables have been removed and are no longer used:DUEL_FORCE_WEBGL_FALLBACK- WebGL not supportedisWebGLForced- WebGL forcing removedisWebGLFallbackAllowed- No fallback path
Ignored (Still Present)
These variables are kept for backwards compatibility but ignored:STREAM_CAPTURE_DISABLE_WEBGPU
Status: IgnoredReason: WebGPU is required
Default:
false (always)
STREAM_CAPTURE_USE_EGL
Status: IgnoredReason: WebGPU requires display server
Default:
false (always)
Variable Precedence
Variables are loaded in this order (later overrides earlier):- Package
.env.exampledefaults - Package
.envfile - Root
.envfile - Environment variables
- GitHub Secrets (CI/CD only)
Security
Secrets Management
Never commit secrets to git. Use:- Local development:
.envfiles (gitignored) - Production: GitHub Secrets
- CI/CD: Injected via workflow
Required Secrets
Production deployment requires:DATABASE_URL- PostgreSQL connectionJWT_SECRET- JWT signingPRIVY_APP_SECRET- Privy authenticationTWITCH_STREAM_KEY- Twitch streaming (if enabled)KICK_STREAM_KEY+KICK_RTMP_URL- Kick streaming (if enabled)X_STREAM_KEY+X_RTMP_URL- X streaming (if enabled)SOLANA_DEPLOYER_PRIVATE_KEY- Solana on-chain (if enabled)
Examples
Local Development
Production (Railway)
Streaming (Vast.ai)
AI Agents
Validation
Required Variables Check
Streaming Variables Check
Troubleshooting
Variable Not Loading
- Check file location -
.envmust be in package root - Check syntax - No spaces around
= - Check quotes - Use quotes for values with spaces
- Restart server - Changes require restart
Secrets Not Injected (CI/CD)
- Check GitHub Secrets - Verify secrets are set in repository settings
- Check workflow - Verify secrets are passed to deployment script
- Check deploy script - Verify secrets are written to
.envfile
Display Server Not Found
References
- .env.example - Root-level variables
- packages/server/.env.example - Server variables
- packages/client/.env.example - Client variables
- scripts/deploy-vast.sh - Auto-configuration logic
- ecosystem.config.cjs - PM2 environment