App store
Put an app on someone else's badge.
Point this page at a GitHub repository, pick the Lua scripts you want out of it, and address them to a badge by its eight-character ID. The badge asks its wearer, and they decide.
Sending is not installing. An offer sits inert in the badge's inbox until someone standing in front of it presses a button — you cannot install anything on a badge you are not holding.
01 Point at a repository
Any public GitHub repo with a scripts/ folder of .lua files. The
broker reads it, not this page.
owner/repo · https://github.com/owner/repo · …/tree/<ref> · …/tree/<ref>/<dir> · git@github.com:owner/repo.git. Default directory scripts/, default
ref the repository's default branch, not recursive.
02 Name a badge
Eight base58 characters — the start of the badge's public key. The wearer finds it on the badge under Settings → Identity, printed large enough to read across a table.
Case-sensitive. Base58 has no 0, O, I or l, so nothing here is ambiguous on a 320×240 screen.
03 Send it
This queues an offer. It does not install anything — the badge shows the wearer what is being offered and waits for them to press A.
How this works
- Three parties, two hops
- Your browser talks to the broker; the broker talks to GitHub and holds a queue; the badge polls the broker every few seconds and pulls down anything addressed to it. Nothing in this chain is a direct connection between this page and a badge.
- Why a broker exists at all
- Two things this page cannot do. It cannot read a repository, because GitHub sends no CORS headers for raw file content, so the browser is not allowed to look at what it downloads. And it cannot reach a badge: on a conference network the badge has no address you could dial, and often no route in at all. The broker sits where both of those are possible.
- Anyone who knows an ID can offer
- There is no account and no sender authentication — that is deliberate, it is a store. What protects a badge is that the offer does nothing on its own: the wearer sees the repository, the script names and their sizes, and presses A or B. Anything that does install runs in the same Lua sandbox as every other app, with its own state, a PSRAM cap and a wall-clock watchdog.
- What the broker enforces
- 8 scripts per offer, 96 KB per script, 32 files per scan, five pending offers per badge, and an hour before an unanswered offer expires. The bodies are snapshotted when the offer is created, so the badge installs exactly what you were looking at even if the repository changes in between.
- Where the badge ID comes from
- It is the first eight characters of the badge's base58 public key, shown on the device under Settings → Identity. It is derived, never assigned, and the broker recomputes it from the key at registration — so an ID cannot be claimed by another badge.
- Nothing appears on the badge
- Check the badge is on the network and has registered — the ID lookup above says online when it has been seen in the last 30 seconds. Then check the Broker field points at the same broker the badge registered with; a badge on a hotspot and a page on a laptop have to agree on that one URL.
Writing scripts? A script is a single .lua file in scripts/, its app id
is the filename, and its description is the first -- comment line. The same files
can go over USB instead — see the flash page for getting Solana OS onto a board in the first place.