Four ways to start
What a build looks like
A Habiv game is a normal web page. Upload one HTML file, or a zip or folder with an index.html at the root and everything it needs next to it. A folder is zipped in your browser before it uploads. Any engine that exports to the web works: plain JavaScript, canvas, Phaser, PixiJS, three.js, Godot, Unity WebGL, Construct, GDevelop and so on.
- Keep every file inside the bundle and point to it with a relative path, like
./sprites/hero.png. - Use
https://for anything outside the bundle. A build that loads anhttp://script, style or image is rejected. - Match file name case exactly.
Hero.pngandhero.pngare different files here, even if they worked on your computer. - Add a
habiv.jsonwith the title, description and controls, and the publish form fills itself in.
| Limit | Value |
|---|---|
| File types | .html, .htm, .zip or a folder |
| Upload size | 50 MB |
| Files in a build | 1,000 |
| Unzipped size | 300 MB |
| Storage per creator | 250 MB |
What happens on upload
Every upload becomes a new version of the game. Habiv checks and prepares it automatically, usually in under a minute:
- Checks. Detects the engine, counts files, measures the size and looks for requests to outside servers. Builds with executables, suspicious compression or no
index.htmlare rejected with the reason. - Preparation. Adds the Habiv SDK script, turns off service workers, rewrites paths that start with
/so they load from your bundle, and swaps the Poki, CrazyGames and Newgrounds SDKs for local versions that talk to Habiv. - Preview. You can play the build before it goes live. Preview plays never count as runs or scores.
- Publish. The version goes live at
habiv.com/@you/your-game. Older versions stay in My games, so you can roll back at any time.
How your game runs
Each game plays in a sandboxed frame on a separate domain. It can't read the player's Habiv account or cookies, open pop-ups or start downloads. A few things follow from that:
- Bundle your assets. Network access is off by default, so fonts, sounds and libraries should ship inside the zip. The checks flag any outside servers your code mentions.
- Save through the SDK. The frame's own storage can be wiped between visits. Use
Habiv.saveandHabiv.loadto keep progress. - Arrow keys and Space just work. Habiv stops them from scrolling the page behind your game.
Stats you get for free
You don't need to write any code to see how your game is doing. Every published game tracks these on its own:
- Runs. A run starts when a player first clicks or presses a key inside your game, and ends when they leave or switch tabs.
- Players, views and play time, plus where players come from and what device they use.
Add the SDK and you also get completions, leaderboards and level drop-off.
Counts refresh every few minutes, so a new run can take up to about 5 minutes to show up. Plays on a draft, and plays in the preview, are never counted.
Next steps
- Game details: the habiv.json that fills in your game's page.
- Game SDK: runs, scores, levels, saves and pause/mute.
- MCP & agents: connect Claude, Codex or any MCP app and publish from a chat.
- Community guidelines: what's allowed on Habiv.