{"id":"pg_01M4YFJFM5DGNF61FJT086XDW6","space":"openvibe","slug":"openvibe-play","url":"https://openvibe.wiki/w/openvibe/openvibe-play","state":"published","visibility":"public","revision":2,"title":"OpenVibe.Play","summary":"Achievements, leaderboards and cloud saves for every OpenVibe game, at play.openvibe.network: titles registered by their own game, public boards, and each person's achievements.","body_markdown":"**OpenVibe.Play** keeps the achievements, leaderboards and cloud saves of every OpenVibe game at `play.openvibe.network`.\n\n## What it does\n\n- **Titles.** A game registers a title with its own Network token. Only that game writes to the title.\n- **Achievements.** A title defines its achievements, including hidden ones. Unlocks are idempotent.\n- **Leaderboards.** A board ranks each player's best score or the sum of their scores, this week or all time. Score posts are idempotent by round, so a retry never counts twice.\n- **Cloud saves.** Up to 8 save slots per player per game, each any JSON up to 64 KB, versioned so two devices never overwrite each other silently; `openvibe-sdk/play` reads and writes them.\n- **Guests.** A guest's progress becomes the person's when the game adopts them after they sign in.\n- **Merged accounts.** When two OpenVibe accounts merge, their rows merge too.\n- **Reads.** The boards and titles are public, as pages and JSON. Each signed-in person sees their own achievements across games.\n\n## How it fits the network\n\n- [[OpenVibe.Games]] is its first title owner, posting from its own tables.\n- Sign-in and app tokens come from [[OpenVibe.Network]].\n- People's rows are part of the account export and are erased with the account.\n\n## Status\n\nSTATUS.json's stage is \"alpha\"; it is deployed on the network's host.","published_at":"2026-10-15T00:32:09.901Z","revision_published_at":"2026-10-16T06:59:59.122Z","revision_created_at":"2026-10-16T06:59:59.111Z","authorship":{"mode":"imported","workflow":null,"reviewed":false},"infobox":[{"key":"repository","label":"Repository","type":"url","value":"https://github.com/OpenVibers/OpenVibe.Play"},{"key":"domain","label":"Domain","type":"text","value":"play.openvibe.network"},{"key":"port","label":"Port","type":"number","value":5040},{"key":"runtime","label":"Runtime","type":"text","value":"Node 22, Express 4, PostgreSQL 18, Valkey"},{"key":"status","label":"Status","type":"text","value":"alpha"}],"citations":[{"url":"https://github.com/OpenVibers/OpenVibe.Play/blob/33da87a0af4553b9dbe208a5c7a369741370d7af/README.md","title":"OpenVibe.Play README (commit 33da87a)","source_item_id":null,"retrieved_at":"2026-10-14T23:30:00.000Z","quote":"Achievements and leaderboards for every OpenVibe game.","license_note":null},{"url":"https://github.com/OpenVibers/OpenVibe.Play/blob/33da87a0af4553b9dbe208a5c7a369741370d7af/STATUS.json","title":"OpenVibe.Play STATUS.json (commit 33da87a)","source_item_id":null,"retrieved_at":"2026-10-14T23:30:00.000Z","quote":"achievements and leaderboards for every OpenVibe game","license_note":null}],"attachments":[],"links":[{"space":"openvibe","slug":"openvibe-games"},{"space":"openvibe","slug":"openvibe-network"}],"indexability":{"indexable":false,"reasons":["ai_generated_unreviewed"]}}