{ "repository": "OpenVibers/OpenVibe.Games", "stage": "stable", "code": true, "product": "Scraplandia, Salvage Rush and Vibe Heroes", "runtime": "node 22, TypeScript (tsx), pnpm workspace; Babylon.js (client) + deterministic Rapier physics; PostgreSQL 18 via openvibe-sdk/db (pg, or embedded PGlite in development); Valkey optional", "port": 8000, "domain": "openvibe.games, play.openvibe.games", "contracts": "openvibe-contracts v0.422.0, openvibe-sdk v0.161.0, openvibe-shared v4.237.0, openvibe-publishing v1.7.0 (apps/server/package.json)", "capabilities": [ "games.mod.manage", "games.mod.read", "games.world.announce", "games.prop.place", "games.def.define", "games.script.run", "games.players.read", "games.player.message", "games.world.emit", "games.storage.kv" ], "deployed": true, "deployment": "Public at https://openvibe.games and https://play.openvibe.games: deployed with `sudo ovhost deploy games` (OpenVibe.Host strategy pnpm-build since the 2026-09-27 cutover; deploy/scripts/deploy.sh is the wrapper), unit openvibe-games on 127.0.0.1:8000, env /etc/openvibe/games.env, principal games.", "features": [ "authoritative multiplayer physics sandbox (deterministic Rapier on the server)", "Source-style movement, physgun building, gathering, crafting, skills", "persistent world, characters and props in PostgreSQL (write-behind flusher; the tick never awaits I/O)", "one-process rooms (M4): a PostgreSQL instance registry with fenced leases, capacity-based join, same-place transfer, per-room position, grid-cell interest and a socketless load probe", "Scraplandia and Salvage Rush in one Games process (M5), in separate place and instance registries; server-scored rounds, per-game achievements and all-time/week leaderboards", "scores, unlocks and guest adoptions posted to OpenVibe.Play (GAMES_PLAY_URL)", "creator worlds: a published world gets its own page (/worlds/) and is in OpenVibe.Search (openvibe-publishing search-feed)", "creators make games the way we do: characters belong to each game, remix a world (credited), its own games-quickjs@1 scripts (run when GAMES_CREATOR_SCRIPTS=1), a team of up to 8 editors by invite link, and a top-down (2D) view", "the asset store: builds (pieces placed in the editor) and scripts shared free for anyone's worlds, placed from the editor's Store tab or added from /worlds", "Steam's featured lists (top sellers, new releases, specials) read from OpenVibe.Sources (GAMES_SOURCES_URL)", "the casual line (plan T22): packages/casual kit, server economy with ledger and idempotent actions, Vibe Heroes at /play/vibe-heroes (guest play, adoption on sign-in, earned-only summons, gem store; paid products wait for Billing)", "six achievement rewards granted as free OpenVibe.Inventory items, never sold or traded; GAMES_ITEMS=on/off and GAMES_INVENTORY_URL configure delivery", "map editor with assets mirrored to OpenVibe.Media", "declarative mods (games-content@2: definitions merged into the content registry at boot, placements, announcements) with per-install grants and audit", "server script mods (games-quickjs@1): isolated QuickJS sandboxes, per-binding grants, per-mod/place PostgreSQL storage, seeded randomness, multi-file imports, staff installs and reload, active definition delivery to new clients; off unless GAMES_SCRIPT_MODS=1", "players keyed by Network subjects", "games.* events through a transactional outbox", "games.progress.summary user module", "the OpenVibe Frame from its own pinned copy", "per-actor limits on capability-boundary writes (openvibe-sdk/limits)" ], "updated": "2026-11-13" }