Optional/community modules for theprototype.app — one
monorepo, one module per folder under modules/, each versioned independently of
app releases via its manifest.json. Core modules that ship in the app bundle
live in the main repo (theprototype-app/core, src/modules/); this repo is for
everything installable through Modules ▸ Install (zip upload or URL).
| Module | What it does |
|---|---|
| flow-toolkit | Reference for flow v2: code-editable nodes shipped via api.registerNodeDefs (Wobble + Breathe) that pair with per-object flows and embedded Object Flow nodes. |
| untangle | The 190 test-flight GAME: drag the dots until no edges cross. Procedural guaranteed-solvable puzzles (seed-deterministic — determinism IS the netcode), desktop+VR drag via api.pointerRay(), replicated moves, lockstep win/level advance, generative WebAudio pad + SFX. Needs app ≥ the api.pointerRay SDK (core PR #37). |
A module is a folder with:
manifest.json—{ id, name, version, description, entry }(entrydefaults tomodule.js)module.js— self-contained (noimportstatements; everything comes from theapiargument):export default { id, name, version, description, register(api) }
The api surface is documented in the main repo's MODULES.md (nodes, effects,
primitives, click handlers, input, physics, possess, state sync, registerNodeDefs).
Zip the CONTENTS of the module folder (manifest.json + module.js at the zip root, not nested in a directory):
Compress-Archive -Path modules/flow-toolkit/* -DestinationPath flow-toolkit.zip -ForceThen in the app: burger menu ▸ Modules ▸ install from zip (or serve the folder and install by URL). Peers receive installed modules automatically (module bytes replicate through the manager).
- Install the zip, create a Box.
- Select the Box → Flow editor shows "Box has no flow yet" → Create flow.
- Add Wobble (toolkit) from the palette's Custom section — the Box wobbles (no Object Selector needed inside an object flow).
- Open the def in the Node Designer and edit the formula — your edit sticks.
- Add a Flow Input named
amount(number) wired into a Breathe node'samount, then right-click the Box → Add flow to Scene graph — the Scene graph gets an Object Flow node whoseamountsocket drives the breathing.
- Bump a module's
manifest.jsonversion per change; the app toasts on version mismatches between peers. - When the main repo's module SDK changes shape, this repo's modules are updated
in the same sitting (see the maintenance contract in the cloud repo's
MAINTAINING.md — same principle: the
apisurface is the API).