Your first published game
This is the complete path from an empty folder to a playable Inkwell page. It uses the CLI for every creator operation. The dashboard is an equivalent visual workflow, not a required step.
1. Prepare the creator account
Create an account and choose your public username during sign-up. During the current limited creator programme, request access from the account menu. Jungle is notified and can approve that exact username. The creator-access page shows whether the signed-in account is approved. Approval permits uploads, publication and developer keys; it does not expose the account's private name or email.
npm install --global @silicon-jungle/inkwell-cli
inkwell login
inkwell whoami
inkwell doctorinkwell login opens a one-time browser approval flow and saves the issued credential with owner-only permissions. No token copying is required. CI may instead set INKWELL_TOKEN.
2. Make a browser build
Inkwell hosts static browser output. Your output directory must contain its HTML entrypoint—normally index.html—plus every script, stylesheet, image, audio file, WASM file and engine data file it needs. Do not deploy source code or a Node server.
my-game/
dist/
index.html
assets/
game.js
game.css
cover.png
screenshot.png
GAME_PAGE.mdVite projects must use base: './'. Runtime asset URLs should also be relative, such as ./assets/map.json.
3. Create the page and upload its media
inkwell games create --game my-game --title "My Game" --summary "A short public summary." --description-file GAME_PAGE.md --tags action,multiplayer --visibility unlisted --cover cover.png --screenshot screenshot.pngThe slug is permanent and globally unique. Begin as private or unlisted: public discovery requires a published build. Unlisted is convenient for testing with people who have the link.
4. Configure, upload and preview
inkwell init --game my-game --directory dist --engine web
# New configs use the loading handshake. Call Inkwell.ready() when playable.
npm run build
inkwell deployA successful deployment prints a build ID and a private preview URL. Open that URL and verify input, audio, asset loading and any platform services. The public game remains unchanged.
If the game does not integrate the SDK loading handshake, editinkwell.config.js and set startup mode to compatible. Handshake mode is preferred because it can report real progress and startup failures.
5. Publish and choose visibility
inkwell publish BUILD_ID
# Or upload and publish in one command after the first preview:
inkwell deploy --publish
# Keep the link-only release, or enter public discovery:
inkwell games update --game my-game --visibility publicPublication selects an immutable build for the live game URL. Visibility is separate: private is owner/testers only, unlisted is playable by link, and public is eligible for discovery. Confirm the final page at https://inkwell.ing/games/my-game and play it once from that page—not only from the build preview.
6. Release updates
npm run build
inkwell deploy
# Test the printed preview, then:
inkwell publish BUILD_ID
inkwell games update --game my-game --summary "An updated summary."
inkwell games media upload cover-v2.png --game my-game --kind coverPublishing an older retained build rolls back the browser client. It does not roll back backend code, databases or private objects.
Next: media specifications · local development · troubleshooting