openvibers/openvibe.games .env.example
.env.example
| 1 | # Names only; never commit real values. Copy to .env (gitignored) and fill in. |
| 2 | |
| 3 | # ── Persistence (ADR-0007 decision 5: PostgreSQL 18 + Valkey through openvibe-sdk) ── |
| 4 | # Pooled PostgreSQL URL (through PgBouncer, transaction mode). Required in production. |
| 5 | DATABASE_URL= |
| 6 | # Owner-role direct connection migrations run on (a session, not PgBouncer). Required with DATABASE_URL. |
| 7 | DATABASE_DIRECT_URL= |
| 8 | # Development only: embedded PGlite directory when DATABASE_URL is unset (never production). |
| 9 | DATABASE_DIR=data |
| 10 | # Optional: another SQL migrations directory (default: @openvibe/persistence's own, from any working directory). |
| 11 | GAMES_MIGRATIONS_DIR= |
| 12 | # The place this instance serves; world rows and meta are keyed by it. |
| 13 | GAMES_PLACE_ID=scraplandia |
| 14 | # In-process rooms for this place; 1 preserves the existing single-room behavior. |
| 15 | GAMES_INSTANCES_PER_PLACE=1 |
| 16 | # Per-room player capacity and replication grid/radius (metres). |
| 17 | MAX_PLAYERS=64 |
| 18 | GAMES_INTEREST_CELL=16 |
| 19 | GAMES_INTEREST_RADIUS=80 |
| 20 | # Creator worlds (/worlds): running at once, kept per account, idle stop (seconds), players per world. |
| 21 | # GAMES_CREATOR_WORLDS_MAX=2 |
| 22 | # GAMES_CREATOR_WORLDS_PER_PERSON=5 |
| 23 | # GAMES_CREATOR_ASSETS_PER_PERSON=50 |
| 24 | # GAMES_CREATOR_WORLD_IDLE_SECONDS=180 |
| 25 | # GAMES_CREATOR_WORLD_PLAYERS=16 |
| 26 | |
| 27 | # ── Valkey (optional): shared per-actor rate-limit counters across instances ── |
| 28 | VALKEY_URL= |
| 29 | VALKEY_PREFIX=ov:games: |
| 30 | |
| 31 | # ── Server ── |
| 32 | PORT=8000 |
| 33 | HOST=0.0.0.0 |
| 34 | # Proxies whose client-address headers (X-Real-IP, X-Forwarded-For, CF-Connecting-IP) are trusted for per-address |
| 35 | # limits and logs: empty = none (the TCP peer is the client), true = all (reachable only through the proxy), else a |
| 36 | # comma-separated IP/CIDR list. Production: 127.0.0.1 (the local nginx, which overwrites those headers). |
| 37 | TRUST_PROXY= |
| 38 | MAP_PATH=data/map.json |
| 39 | |
| 40 | # ── AI vs AI Vibe Heroes draft matches (off by default; billable when enabled) ── |
| 41 | GAMES_AI_MATCHES_ENABLED=0 |
| 42 | GAMES_AI_MATCHES_DAILY_CAP=0 |
| 43 | GAMES_AI_MATCHES_GAMES=2 |
| 44 | # JSON array of two pinned OpenVibe.AI offers: [{"provider":"...","model":"..."},...] |
| 45 | GAMES_AI_MATCHES_OFFERS= |
| 46 | GAMES_AI_URL= |
| 47 | GAMES_BENCH_URL=https://bench.openvibe.services |
| 48 | |
| 49 | # ── IndexNow (optional) ── |
| 50 | # The IndexNow protocol key (8-128 hex or alphanumeric), as IndexNow's own key generator produces it. |
| 51 | # When set, GET /<key>.txt serves the key file the protocol requires engines to fetch; unset means |
| 52 | # off. This site has no user-created public pages, so a key alone pings nothing. |
| 53 | INDEXNOW_KEY= |
| 54 |