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 bothvianden, non-empty, no blocked words.platform:"web".connection:{ "needsApp": false, "sendUsername": true, "sendAvatar": true }(needsAppis alwaysfalse).entry: path of the main HTML file from the folder root (case-sensitive). Uploaded games useentry, noturl.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, ashttps://hostorwss://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 eithergiftNameorminDiamonds(optionally withmaxDiamonds), plus anactionIdthat exists inactions.
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: nomanifest.jsonat 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:versionis not greater than the live one. Raise it.version_exists: this version number was already uploaded. Raiseversion.entry_missing:entrydoes not point to a real file. Fix the path (case-sensitive).cover_missing: the cover (or ascreenshotsimage) 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: forexternal_webgames (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. Loadhttps://livebridge.vn/sdk/livebridge.jsand callnew LiveBridgeGame({...})on page load.smoke_load_failed: the entry could not be opened. Checkentryand 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.htmlfile 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.