gameplatform-cli
v1.9.1
Published
CLI to publish and monetize browser games on GamePlatform — deploy, set pricing, connect Stripe payouts, and check earnings from the terminal (AI-assistant friendly).
Maintainers
Readme
gameplatform-cli
Publish and monetize browser games on GamePlatform from your terminal.
Camera/WebXR/device-sensor titles can opt into a per-game top-level origin:
gameplatform deploy game.zip --title "XR Game" --draft --launch-mode top_level --agree-terms
gameplatform launch-mode <game-id> top_level --agree-termsThe default remains iframe. Use top_level only when the browser capability genuinely requires it; CSP, per-game origin isolation, and scoped SDK sessions still apply.
Designed to be driven by an AI assistant (Claude Code / Codex / Cursor): hand it
the onboarding runbook
and it can do almost everything. The only human step is Stripe identity/bank
verification (KYC).
Install
npm install -g gameplatform-cli
gameplatform --helpRequires Node 18+.
Quick start
# 1. Log in (one time)
gameplatform login # email/password
gameplatform login --browser # or Google
# 2. Set up payouts — Stripe Connect
gameplatform connect # prints a URL; a HUMAN completes KYC in a browser
gameplatform connect # run again to confirm it says COMPLETE
# 3. Publish (optionally set pricing in the same step)
gameplatform deploy game.zip --title "My Game" --pricing paid --price 500 --agree-terms
# 3.5 Update: stage first, verify, then publish
gameplatform update <game-id> game.zip --ver 1.1.0 --stage
# → play it, then publish the exact build you verified:
gameplatform promote <game-id> --expect 1.1.0 --confirmed
# 4. Pricing later / changes
gameplatform pricing <game-id> --model paid --coins 300 # buyout in coins instead of JPY
gameplatform pricing <game-id> --model stamina --max 3 --regen 480 --refill 100 --buyout 500
gameplatform pricing <game-id> --model free
# 5. Sales & payouts
gameplatform earningsYou keep 80% of sales (20% platform fee). Payouts run automatically on the 1st of each month to your bank (sales from the last 7 days are held for refund protection). You never share your bank details with the platform — Stripe holds them.
Commands
| Command | Description |
|---|---|
| login [--browser] | Authenticate |
| connect | Create/check Stripe Connect; prints the KYC URL |
| deploy <zip> --title ... [--pricing ...] --agree-terms | Submit a game |
| pricing <game-id> --model free\|paid\|stamina ... | Set monetization. paid takes --price <jpy> (Stripe) or --coins <n> (coins) — exclusive |
| items <game-id> [--file items.json \| --list] | Sync in-game ¥ items (permanent unlocks) |
| update <game-id> <zip> --ver ... | Submit an update |
| promote <game-id> --expect <ver> --confirmed | Publish a staged version. --expect は必須(v1.6.0〜)。確認した検証版の番号を渡す。ズレていればサーバが409で止める |
| earnings | Sales & payout status |
| sales [game-id] | List every real payment (buyout / item / stamina) — authoritative payment record |
| games / status | List games / submission status |
| thumbnail / screenshot / video | Upload media |
| delete <game-id> | Delete a game |
| logout | Clear credentials |
Full docs: https://game-platform-3eg.pages.dev/developers
Notes
- ZIPs must use forward-slash paths (
zip -r, not Windows "Compress-Archive"). The root must containindex.html. --agree-termsaffirms the creator agreement; it is required to submit.
容量ガイド(サイズと最適化)
なぜ軽さが要るか
Webゲームはインストール不要で遊べるのが強みですが、その裏返しで ロード時間が第一印象 になります。プレイヤーは「待たされる」と感じた瞬間に離脱します。20Mbps(一般的なモバイル回線)での初回ロードの目安:
| ZIPサイズ | ロード目安 | |---|---| | 10MB | 約4秒 | | 30MB | 約12秒 | | 50MB | 約20秒 | | 90MB | 約36秒 |
※ この表は「起動時に読む量」で見てください。総量ではありません。
30秒待てるプレイヤーはほとんどいません。数字は目安ですが、「軽い=遊んでもらえる」という関係は動きません。
上限と推奨
ゲーム全体のサイズ上限は事実上ありません(v1.7.0〜)。 CLIがZIPを展開して1ファイルずつ送るので、Workersのボディ上限に当たらなくなりました。
| | 上限 | |---|---| | ゲーム全体 | 2GiB | | 1ファイル | 64MiB | | ファイル数 | 5,000 |
★大事なのは上限ではなくプレイヤーの待ち時間です。
- 推奨: 起動時に読むぶんを30MB以下
- 理想: 15MB以下
deploy / update は毎回、アップロード前にサイズと「内訳トップ5」を表示します。
上限で中断はしませんが、重い場合は警告と削減レシピを出します。
削減レシピ(実証済み)
- 画像は表示サイズに合わせる。 生成AIの2MB級PNGをゲーム内512pxで使うのは無駄です。512pxへ縮小すれば約150KB(約94%減)。sharpワンライナー例:
npx sharp-cli resize 512 512 --fit inside -i src.png -o out.webp - 3Dモデル(GLB)は
gltf-transformでテクスチャをWebP化+リサイズ(例: 1024px):
⚠ draco / meshopt などのジオメトリ圧縮は、ゲーム側にデコーダを同梱する必要があるため安易に使わないこと(同梱漏れでモデルが出ません)。npx @gltf-transform/cli webp model.glb model.webp.glb npx @gltf-transform/cli resize --width 1024 --height 1024 model.webp.glb out.glb - 音声は128kbpsで十分。 無圧縮WAVや320kbpsは避ける。
- ZIPに余計なものを入れない。
.git/node_modules/ ソース素材(.psd 等)/ 開発ドキュメントは配信に不要です。 - CLIの「内訳トップ5」で大物を特定。 どのフォルダが重いか一目で分かるので、そこから削る。
総量が大きいゲームを作る場合
総量は2GiBまで置けますが、それを起動時に全部読ませてはいけません。 初回ロードは 必須アセットだけ(メニュー+最初のステージ ≈10〜20MB)に絞り、 残りはゲーム内で遅延ロード(プレイしながら追加ダウンロード)してください。
プレイヤーは要求したファイルだけを個別に取得します(ZIPを丸ごとDLしません)。 R2はCDN配下なので2回目以降はキャッシュが効きます。
⚠ 真の天井は端末のメモリです。ダウンロードは分割できても、 同時にWebGLへ載せる量は端末が決めます(特にiOS Safari)。 総量より「同時常駐メモリの設計」を先に考えてください。
容量アーキテクチャの正本は docs/CAPACITY_ROADMAP.md。
License
MIT
