Making widgets
Three ways in, one package out, and how a widget gets its data.
A widget is a small folder: a manifest that says what it is and what it may touch, a view that says how the phone draws it, and, if it needs one, a collector that fetches its data on the PC. Every widget, however it was made, is that same folder, so anything you make can be shared in the gallery.
Three ways in
| Who | Tool | What you can make |
|---|---|---|
| Anyone | Widget Studio in the desktop app: Widgets in the sidebar, then the Make a widget card (where exactly) | Widgets that show PC data. No code. |
| Anyone | The generator: describe it in a sentence | The same, written by a model on your PC. It opens in Widget Studio to adjust. |
| Developers | The SDK and CLI | Anything the permissions allow: web APIs, apps on your PC, logic. |
Most PC-stats widgets are pure bindings and need no code at all, which also makes them the quickest to review.
Two halves
- A collector runs on the PC on a timer and returns plain JSON. It's optional: a widget that only shows PC data doesn't need one. See Collectors.
- A view draws that JSON on the phone. It's JSON too, a tree of ShiftPane's own components, so no code a widget author wrote ever runs on the phone. See Views.
Where the data comes from
- System sources: the PC's CPU, GPU, memory, network, what's playing and more, read once by the app and shared with every widget that declares them. See System sources.
- The web: a collector's
fetchcan reach the internet hosts the manifest lists, and no others. - Apps on your PC or network: LibreHardwareMonitor, OBS, Home Assistant, Ollama and the like, at an exact address and port, after asking you.
The folder
gpu-ring/
manifest.json what it is, and what it may touch
view.json how the phone draws it
sample.json example data, for previews and review
collector.js optional: code that runs on the PC
icon.png optional: 256 × 256
README.md
LICENSE
screenshots/*.png optionalPackage format has the rules and limits, and manifest.json every field.