# Glossary

Key terms used across the docs, the Developer Portal, and the CLI.

Source: https://docs.wavedash.com/getting-started/concepts

| Concept | What it is |
|---------|-----------|
| **Achievement** | A milestone or reward that players unlock while playing, like "First Win" or "Score 1,000 Points." You define them in the dashboard and unlock them from your game. See [Achievements & stats](/sdk/achievements). |
| **API key** | A secret token that lets the CLI and other tools act on your behalf. Create one in Developer Portal → API Keys. |
| **Build** | A versioned snapshot of your game's files. Each upload — from the Developer Portal or `wavedash build push` — creates a new build. You can always roll back to an earlier one. |
| **Cloud save** | Per-player files Wavedash stores for you and syncs across devices. The SDK calls this Remote Storage (`uploadRemoteFile`, `downloadRemoteFile`, `listRemoteFiles`) — useful for save games, settings, and player progress. See [Cloud saves](/sdk/cloud-saves). |
| **Deferred events** | An `init()` option (`deferEvents: true`) that queues lobby and multiplayer events until your game calls `readyForEvents()`, so handlers don't fire while you're still loading. |
| **Developer Portal** | The browser-based home for your team at [wavedash.com/dev-portal](https://wavedash.com/dev-portal). Manage API keys, builds, store pages, monetization, payouts, achievements, and leaderboards. |
| **Document ID** | The server-side ID returned when you create a stat or achievement with the CLI. CLI `update`/`delete` commands take this ID, while your game code uses the stable string identifier you chose (e.g. `KILLS_TOTAL`). |
| **Entrypoint** | The first HTML file Wavedash loads inside your `upload_dir`. Defaults to `index.html`; set it in `wavedash.toml` if your build uses a different filename. |
| **Game ID** | Your game's unique ID on Wavedash. Created in the Developer Portal or with `wavedash project create`, then stored as `game_id` in `wavedash.toml` (or passed via `--game-id`). |
| **Gameplay token** | A short-lived, game-scoped token Wavedash issues so the SDK can call platform APIs on the player's behalf. The SDK fetches and refreshes it for you — you don't read or store it in normal game code. |
| **ICE restart** | What the SDK does when a peer's WebRTC connection flaps. You'll see `P2P_PEER_RECONNECTING` and then either `P2P_PEER_RECONNECTED` or — after a few attempts — `P2P_CONNECTION_FAILED`. |
| **In-game overlay** | Wavedash's built-in UI that floats above your game — friends list, invites, settings, and so on. Show or hide it from your game with `toggleOverlay()`. |
| **`init()`** | The one call every game makes once when it finishes loading. Reveals your game from behind the loading screen and marks it ready to play; also fires `loadComplete()`. |
| **Launch params** | Key/value data passed to your game when it opens, read with `getLaunchParams()` after `init()`. Wavedash strips the `wvdsh_` prefix from query string keys (`?wvdsh_lobby=abc` becomes `{ lobby: "abc" }`). Used for lobby invite links and similar deep-link flows. |
| **Leaderboard** | A scoreboard for your game. You pick the name, sort order, and format — your game submits scores through the SDK, and Wavedash handles ranking. See [Leaderboards](/sdk/leaderboards). |
| **Load progress** | The 0-to-1 value your game reports during boot with `updateLoadProgressZeroToOne()` so the platform shell can render its loading bar. Call it repeatedly as assets load — report it only once at the end and the bar jumps straight from 0% to 100%. Pair with `loadComplete()` to signal the player can interact (often called for you by `init()`). |
| **Lobby** | A room where players can gather before or during a game. Supports chat, invites, a member list, and connects to peer-to-peer networking automatically. |
| **Lobby host** | The lobby member treated as owner. Only the host can change certain lobby settings, and if they leave, hosting migrates to another member automatically. |
| **Lobby invite** | A friend-directed invite to join a lobby. Opening the invite link launches your game with the lobby ID delivered through launch params — your game just needs to call `joinLobby()` on startup. |
| **Lobby metadata** | Arbitrary key/value data attached to a lobby that all members stay synced on. The host updates it with `setLobbyData`, and members get a `LOBB_DATA_UPDATED` event when it changes. |
| **Marketplace fee** | The percentage Wavedash takes on Paid Content purchases, currently 10% and separate from any payment-processor charges. See [Monetization](/publishing/monetization). |
| **Metadata review** | A light review Wavedash runs on store-page edits. Changes enter a pending state until approved; your previously-approved metadata stays live in the meantime. |
| **P2P channel** | One of up to eight numbered lanes (0–7) for binary peer-to-peer messages. Each send picks a channel and whether delivery is reliable (ordered, guaranteed) or unreliable (fast, lossy). |
| **P2P networking** | Once everyone's in a lobby, the SDK opens direct WebRTC data channels between all members in a full mesh — no dedicated game server. NAT traversal uses managed TURN credentials, so you don't host any infrastructure yourself. |
| **Paid Content** | A slice of your game locked behind an in-game purchase. You set the gated files, price, and paywall copy in Developer Portal → Monetization, and your game checks ownership and opens the paywall through the SDK. See [Monetization](/publishing/monetization). |
| **Payouts** | How money from purchases reaches you. Wavedash uses Stripe Connect; finish onboarding in Developer Portal → Payouts and earnings land in your Stripe balance on Stripe's payout schedule. |
| **Player** | Someone with a Wavedash account. They have a username, avatar, friends list, and game library. Your game can read their info with `Wavedash.getUser()`. See [Players](/sdk/players). |
| **Presence** | Status and activity the signed-in player exposes to friends, set with `updateUserPresence()`. Includes hooks like `lobbyId` so the platform shell can show "Join Game" from the friends list. See [Players](/sdk/players). |
| **Project** | A game record under a team. `wavedash project create` makes one and returns the `game_id` you store in `wavedash.toml`; `wavedash project list` shows everything your team owns. |
| **Promote** | Another word for **Publish** — choosing which uploaded build players see. |
| **Publish** | Choosing which build players see when they open your game. Publish a new build to update, or publish an older one to roll back. You can publish from the CLI or the Developer Portal. |
| **Sandbox** | A local version of Wavedash that runs on your machine when you use `wavedash dev`. Great for testing SDK features like leaderboards and achievements before going live. |
| **Secret achievement** | An achievement hidden from the player's list until they earn it. Set with `--secret` on `wavedash achievement create`, or via the Developer Portal. |
| **Session** | The time between a player opening your game and leaving. Wavedash tracks sessions automatically so you can see how people play. |
| **Slug** | A short, URL-safe identifier. Your game's slug is the part of its store URL and stays fixed even if you rename the title; teams and projects also expose slugs in CLI tables. |
| **Stat** | A number your game tracks per player — things like total kills, distance traveled, or games played. Stats persist between sessions and can automatically unlock achievements. See [Achievements & stats](/sdk/achievements). |
| **Stat-triggered achievement** | An achievement that unlocks automatically when a configured stat crosses a threshold — no `unlockAchievement()` call needed. Wired up with `--triggered-by-stat-id` and `--threshold` on the CLI, or via the Developer Portal. |
| **Store page** | What players see when they find your game: the title, description, screenshots, trailers, and tags. You can update it anytime without pushing a new build. |
| **Team** | A group of developers who work on games together. Team members share access to builds, analytics, and settings. Manage members, billing, and payouts in the [Developer Portal](https://wavedash.com/dev-portal). |
| **UGC** | User-generated content. Things players create and share — custom levels, replays, screenshots, mods. Your game decides what players can upload, and other players can browse and download it. See [User-generated content](/sdk/ugc). |
| **UGC type & visibility** | Two enums on every UGC item. *Type* classifies it (`SCREENSHOT`, `VIDEO`, `COMMUNITY`, `GAME_MANAGED`, `OTHER`). *Visibility* controls who can see it (`PUBLIC`, `PRIVATE`). |
| **upload_dir** | The folder on your computer that contains your game's built files. Set it in `wavedash.toml` — the CLI uses it for local testing and uploads. |
| **User JWT** | A short-lived signed JWT for the signed-in player, fetched with `getUserJwt()`. Forward it to your own backend and verify it against Wavedash's public keys for trusted identity (`payload.sub` is the stable user ID). |
| **Wavedash CLI** | The `wavedash` command-line tool. Authenticates your machine, runs your game locally in the sandbox (`wavedash dev`), manages teams and projects, uploads new builds (`wavedash build push`), and publishes uploaded builds (`wavedash publish`). |
| **Wavedash Dev app** | The local desktop app the CLI launches when you run `wavedash dev`. It hosts your build inside the Wavedash sandbox; the CLI downloads it the first time you need it and reuses it after. |
| **Wavedash SDK** | How your game talks to Wavedash at runtime. The `Wavedash` global is injected automatically in the browser; Godot and Unity have native bindings, and `@wvdsh/sdk-js` provides optional typed access in JavaScript/TypeScript projects. |
| **wavedash.toml** | A small config file in your project that tells the CLI your game ID, where your build files are, and any engine-specific settings. |
| **WAVEDASH_TOKEN** | Environment variable that holds an API key. When set, the CLI uses it instead of saved credentials — the standard way to authenticate in CI runners and other headless environments. |
