Virtual badge
A badge you can use without a badge.
This is Solana OS — the same shell, the same launcher, the same Lua runtime and the same bundled apps that get flashed onto the board — running in a worker in this tab. It has a badge ID, it registers with the broker, and it can be sent an app from the store like any other badge.
SOLANA OS · 0 apps
Arrow keys move · Enter or Z is SELECT · Esc or X is CANCEL · hold CANCEL to force-quit an app
What this is not. Lua here is a 64-bit build in wasm, where the badge runs LUA_32BITS: integer overflow and string.pack widths differ. The radios are
simulated — Wi-Fi is a virtual network called browser-uplink backed by this page's own
connection, so wifi.connected() and badge.http work but no radio is
involved and a scan finds nothing else; enterprise joins and the hotspot are not available at all.
BLE cannot advertise from a browser, and ESP-NOW is a relay or a BroadcastChannel rather than a 2.4 GHz frame. There is no SE050, so the identity is a software key in IndexedDB and se050.present() is false. Timing is a browser's, not a 240 MHz ESP32-S3's. Anything
that passes here still has to be tried on the board.
How to use it
- Getting around
- The launcher lists what is installed; SELECT runs it and CANCEL goes back. Holding CANCEL for a second and a half force-quits a running app from outside Lua, which is the escape hatch for an app that traps every button. Settings is the last row of the launcher.
- Sending it an app
- Copy the badge ID from the panel beside the screen and paste it into the app store. Point the store at a repository, pick the scripts, send them — the badge asks before anything is written, exactly as the hardware does, and there is no way to install from this page.
- Where the state lives
- In this browser, in IndexedDB: the filesystem, the settings, the key. Close the tab and come back and the badge is where you left it, apps and all. A factory reset wipes the filesystem and the settings; the keypair, like the one in the SE050, survives.
- Two tabs are two badges
- Not quite — they share a browser profile, so they share an identity and a filesystem. With
networking off they can still see each other over ESP-NOW, because that mode uses a
BroadcastChannelbetween tabs. It is the cheapest way to try a badge-to-badge app without two people. - Console
print()andbadge.log()land in the console pane beside the screen, and in the badge's own Console screen under Settings. The same lines, the same order — one is just easier to read on a laptop.- What to do when it breaks
- An app that wedges the VM is killed by a watchdog and the badge restarts with its filesystem intact. An app that errors leaves its message and traceback on the badge's error screen, and SELECT retries it.
Ready for the real thing? Flash a board over USB from this browser, or read the SDK reference for what an app can reach.