Langsung ke konten utama
LiveBridgeLiveBridge

Manifest and checks

The manifest.json fields (with a JSON Schema), the check codes and how to fix them.

manifest.json

JSON Schema: https://livebridge.vn/schemas/game-manifest.json. Rules:

  • id: the id of the game you created, ^[a-z0-9-]{3,40}$, immutable; no reserved word (admin, api, app, www, sdk, dev, developers, games, static, cdn, mail, livebridge, test) or existing game id.
  • version: x.y.z, greater than the live one.
  • name, summary, description: each has both vi and en, non-empty, no blocked words.
  • platform: "web". connection: { "needsApp": false, "sendUsername": true, "sendAvatar": true } (needsApp is always false).
  • entry: path of the main HTML file from the folder root (case-sensitive). Uploaded games use entry, not url.
  • cover: a 16:9 cover image (for example 1280x720) that exists in the folder. screenshots: at most 8 images. tags: at most 5.
  • connectOrigins: where the game may call over the network, as https://host or wss://host (lower case, no path, no *). Default [].
  • actions: what the game can do, each { id, name, name_vi, description, description_vi }. defaultGiftMapping: the suggested mapping, each row has either giftName or minDiamonds (optionally with maxDiamonds), plus an actionId that exists in actions.

Pre-upload checklist (check codes and fixes)

check and upload print issues as [code] (field) with a "Fix" line. The usual fixes:

  • zip_invalid: re-create the archive with a normal zip (no password, no rar/7z). The CLI zips for you so this is rare.
  • zip_too_big: more than 50 MB unpacked. Compress images/audio, delete unused files, or load big assets from a CDN.
  • zip_too_many_files: more than 2,000 files. Bundle JS/CSS, combine images into sprite sheets.
  • zip_path_escape: a path has .., \ or starts with /. Rename the file.
  • zip_symlink: a symbolic link. Replace it with the real file.
  • zip_duplicate: two files differ only by letter case. Rename one.
  • manifest_missing: no manifest.json at the folder root.
  • manifest_invalid: one field is wrong. Read the field name in the issue and fix it against the JSON Schema.
  • version_not_newer: version is not greater than the live one. Raise it.
  • version_exists: this version number was already uploaded. Raise version.
  • entry_missing: entry does not point to a real file. Fix the path (case-sensitive).
  • cover_missing: the cover (or a screenshots image) is missing. Add the file or fix the path.
  • file_type_forbidden: only html htm js mjs css json png jpg jpeg gif webp avif svg ico mp3 ogg wav m4a mp4 webm woff woff2 ttf otf wasm txt map are allowed. Delete the others.
  • words_blocked: the name/summary/description has an unsuitable word. Reword it.
  • url_not_https, url_unreachable: for external_web games (uploaded on the web, not through the CLI).
  • smoke_timeout: the page did not respond within 20 seconds. Look for an infinite loop or heavy work at load.
  • smoke_js_error: a JavaScript error during the test run. Open ?t=lbg_dev, read the Console, fix it.
  • smoke_sdk_not_connected: the SDK did not connect. Load https://livebridge.vn/sdk/livebridge.js and call new LiveBridgeGame({...}) on page load.
  • smoke_load_failed: the entry could not be opened. Check entry and that the file exists.
  • smoke_infra: a problem on the checker's side. Upload the same version again in a few minutes; no need to change the version.
  • sdk_missing (CLI only, a warning): no .html file loads /sdk/livebridge.js.

Limits: at most 10 games per developer, 20 uploads per day, the files of the 5 newest versions are kept.

How to read a check failure

Every issue has a code, a field (if any), a description and a "Fix" line in Vietnamese and English. Work in this order: (1) fix the first issue exactly as its Fix line says; (2) run check again; (3) repeat. If the developer pastes you text that starts with LiveBridge upload check failed for <game> v<version>: (the Sao chép lỗi cho AI / copy-for-AI button on the web, or the last block of check), that is the issue list: fix each item.