SOMETHING ONLINE ARCADE — UNITY C# AND JAVA EXPORT KIT Candidate integration. Do not treat an upload check as engine/device certification. Read verification.json for actual compile/runtime results and outstanding checks. 1. Choose your source engine Unity 6: copy unity/Assets into your own Unity project. Add ArcadeClient and either ArcadeCounter (solo) or ArcadeBoard (online) to one GameObject in your first scene. Add the scene to Build Settings. Something Online > Export Web build creates an uncompressed, single-threaded Web build, with browser data caching disabled. Existing export settings are restored afterward. Custom games subscribe to Message before Connect(), wait for ready, and implement pause/resume including input and audio. The examples contain no audio. Install Unity Web Build Support first. Keep the built-in JSON Serialize module enabled; the examples also need the IMGUI module. For these IMGUI examples select Active Input Handling: Input Manager (Old). The sample counter uses SPACE to collect and S to save; the board accepts keys 1–9. Both examples also have responsive pointer controls. Custom games may use their own input system; test their exported controls before submitting. Java: install JDK 17+ and Maven 3.9+. In java/ run `mvn package` for the solo example; for the online board use `mvn -Darcade.mainClass=com.somethingonline.BoardDemo package`. TeaVM compiles compatible Java to browser JavaScript in java/target/web. This is not a JVM in the browser. Swing, native JNI, desktop OpenGL and arbitrary Java libraries do not automatically work. Port rendering and unsupported APIs to browser APIs. Pin and review dependencies; do not include API keys or personal information. 2. Prepare the cabinet Use arcade-solo.json or arcade-online.json. Change id, title, description, version, classification and controls to describe YOUR game. Provide your own licensed cover. Install Node 24+, then from this kit's root: node prepare-export.mjs unity-web "path/to/WebBuild" arcade-solo.json "path/to/cover.png" "path/to/NEW-cabinet" node prepare-export.mjs java-teavm "java/target/web" arcade-solo.json "path/to/cover.png" "path/to/NEW-cabinet" Use arcade-online.json with either board example. Output must be a NEW folder outside the export folder. The helper leaves source files intact and creates an index wrapper, bridge, manifest, assets and upload.zip. It replaces the exported host page; dependencies must be local. No .jar, .dll, .exe, .cs, .java, .br or .gz belongs in the game upload. The downloadable SOURCE kit itself is not an upload. The workshop checks the resulting ZIP again and requires review of each release. 3. Connect saves, scores and multiplayer Unity: client.Save(new Progress{...}, score, saveVersion); client.Move(cell); client.Stats(); client.SetPlaying(true/false). Java: Arcade.save(progressJson,score, saveVersion), Arcade.move(cell), Arcade.stats(), Arcade.setPlaying(boolean). Requests return an integer ID; events are JSON {type,id,payload}. Match responses by ID. Listen for ready, pause, resume, saved, table, moved, stats and error. Unity parses JSON using your own [Serializable] payload types / JsonUtility. The solo examples demonstrate restoration and saving; the board examples render table snapshots. Save only checkpoint changes; handle errors and let players retry. ready.payload contains progress, bestScore and saveVersion for solo games. Saves accept JSON objects up to 32 KB and integer scores 0..1e12. Revisions/account checks remain in the host. Published account saves persist; private/beta solo saves are temporary. A newer format must read/migrate old saves. Do not erase unknown formats. stats returns the current personal best for solo, or last server winner and ranked status for online. Full W/L/T and opponent history appear in the platform window; this bridge does not expose player IDs or provide a general leaderboards API. Self-reported solo scores are not verified achievements and cannot mint money. Online pilot: grid-lines-v1 ONLY, two players, 3..9 rows/columns, target 3..6 fitting both dimensions, optional gravity. Lobby, join code, friends, clocks, reconnect, return-later turns, rematch and catalog W/L/T are owned by the host/server. table.payload includes phase, revision, seat, turn, board (0/1/2), legal cells, rules, winner and ranked. For gravity send a column; otherwise row-major cell index. Wait for moved/error and updated table. The SDK attaches the latest revision; the server rejects stale/illegal moves. Never predict final results or save online scores yourself. Beta/private matches are unranked. Other multiplayer rules require a separately reviewed server template; no uploaded server code is executed. 4. Test and review Choose the complete upload.zip in the creator workshop; its arcade.json fills the details. Complete rights/AI disclosures. Test load, controls, pause/audio, save/reopen, old save formats and all declared devices. For online use two authorized accounts; test reconnect, out-of-turn moves, forfeit and rematch. An administrator tests the immutable build before beta. JavaScript/Wasm still runs under the same sandbox: no account cookies, external servers, trackers, workers, storage-based saves or wallet connections. Never weaken that sandbox to make an export pass. If your engine requires unsafe-eval, worker threads or cross-origin isolation, that build profile is not supported in this pilot. Pilot limits: ZIP 20 MB; 300 files. Web/Java: 40 MB expanded / 12 MB each. Unity: 64 MB expanded / 32 MB each. Optimize engine modules, textures and audio. These are enforced limits, not a claim that any Unity project fits them. 5. Future commerce commerce-contract.json is a disabled design contract. Solana is the intended network; provider, contracts, assets and launch terms remain undecided. Games will request catalog offers through platform UI. Wallet approval, verified settlement receipts and item entitlements belong to the platform. No blockchain transaction, wallet connection, smart contract, token or purchase API exists in this kit. Official engine references https://docs.unity3d.com/6000.0/Documentation/Manual/webgl-interactingwithbrowserscripting.html https://docs.unity3d.com/6000.0/Documentation/Manual/webgl-building.html https://teavm.org/docs/tooling/maven.html https://teavm.org/docs/runtime/jso.html TWO WAYS TO FINISH — ONE UPLOADABLE ZIP COPY FOR MY AI: open https://somethingonline.com/preview/creator.html#creator-guide, choose this kit's game type, then Copy for my AI. The AI asks a few plain questions, uses the linked kit and returns ONE complete game ZIP, with arcade.json inside. If it cannot download the kit, attach this exact kit. Never claim an unbuilt ZIP. STEP BY STEP: use the same workshop's Step by step guide. Build/test the game, keep all required runtime files and the completed arcade.json at the ZIP root, then choose that one ZIP. The workshop reads the manifest; review its details and complete rights/AI disclosures personally. A separate manifest upload is optional. OPTIONAL CABINET SKIN — EXACTLY ONE NEW IMAGE Classic upright pilot: cabinet/skin.png, one static opaque 1024 x 1024 PNG, <=4 MiB. Read https://somethingonline.com/preview/creator-cabinet-kit/cabinet-template.json and download https://somethingonline.com/preview/creator-cabinet-kit.zip first. Follow its exact six named regions, shared side/back art and physical obstructions; never guess UVs or generate separate panel images. Add cabinetSkin with templateId classic-upright-v1 and texturePath cabinet/skin.png to the manifest. Keep the game's existing one cover unchanged; for a new game make one cover.png at 960 x 640. Thus required submission art is one cover plus one atlas, not extra variants. Agree any gameplay-art filenames, dimensions and count before creating those. Do not put the template GLB, guides, example skin, nested kits, extra covers, mockup renders or unused image versions in the game ZIP. The platform supplies the model. Skin availability is server-gated; use the standard cabinet if off. CURRENT UPLOAD AND REVIEW WORKFLOW — OCTOBER 20, 2026 A compatible existing browser game does not need AI or a starter-kit rebuild. arcade.json is optional: when absent, the workshop suggests entry/cover files and stores your confirmed details alongside the unchanged ZIP. A manifest helps automatic form filling; it does not automatically add pause, saves or scores. Keep the existing SDK contracts. For a new build prepared using this kit, include a completed arcade.json for convenience. For an update, choose My games → Upload new version and preserve the game ID, ownership and compatible save format. Never replace the original source or uploaded archive in place. Scanning, structural checks, isolated testing and review still apply. Regular creators use the beta/final review process. The verified site owner may use the audited Publish as owner option for their own tested submissions without beta votes; other developers do not gain that permission. No kit or passing scan publishes a game automatically. NO-AI PATH: follow Step by step in the workshop and download creator-guides/existing.txt for an existing game. Only declare AI assistance when it was actually used. GUIDED NEW GAMES: creator-guides/25m.txt, creator-guides/1h.txt and creator-guides/4h.txt ask about style, movement, controls and progression. The matching browser starter ZIPs are creator-kit-25m.zip, creator-kit-1h.zip and creator-kit-4h.zip. These playtime targets are estimates to test, not a claim that the sample is a finished campaign.