01 Helm · live screen ▾
02 Vitals · device ▾
All device info
03 Locker · on-device files ▾
04 Drafting · build a C app ▾
Author a Flipper app in C, build it with the DRYDOCK helper on your machine, then install and run it over the same cable. DRYDOCK compiles only; it never opens the port. Download drydock.py from github.com/GreenShoeGarage/Porpoise, then start it with python3 drydock.py.
application.fam (advanced, optional)
Leave blank and DRYDOCK writes one from the fields above.
05 Scripts · JavaScript ▾
Author a Flipper JavaScript app and push it to /ext/apps/Scripts over the cable. The device runs the JS itself with no toolchain. Push and run streams its output in the Console below, or launch it from Apps > Scripts on the Flipper. The JS dialect is mJS and its features vary by firmware.
06 Console · CLI and log ▾
The console speaks the Flipper text CLI. It takes the port, so the live mirror and the RPC panels pause while it is open. Close the console to hand the port back and resume.
07 Bench tools ▾
08 About ▾
PORPOISE v1.2.1 is a bench-side console for a Flipper Zero connected over USB. It mirrors and steers the device screen, reads its vitals, browses and writes its storage, authors and runs JavaScript apps, opens the device CLI and log, and (with the optional DRYDOCK helper) builds a native C app and runs it on the device, all from a single file that runs off disk.
Two tiers. Tier one is this page plus a USB cable: mirror, control, vitals, files, JavaScript authoring, and the CLI console and log. The device runs the JavaScript itself, so no toolchain is involved. Tier two adds the Drafting panel, which needs DRYDOCK, a small local helper you run yourself (python3 drydock.py) that compiles your C with uFBT and hands back a .fap. DRYDOCK never opens the serial port; this page keeps the port and writes the .fap over its own link, so the two never contend. When DRYDOCK is not running, Drafting is simply unavailable and the rest of PORPOISE is unchanged.
The spine is a hand-rolled Flipper RPC client: length-delimited protobuf over the device CDC serial, with the message subset built by hand rather than a vendored library. Field numbers are taken from the official flipperzero-protobuf schema.
Known limitations. The Flipper has one USB serial pipe, and its RPC mode (mirror, vitals, files) and text CLI (console, log, running a script) cannot share it. Opening the console therefore pauses the mirror and RPC panels until you close it again. Native C builds need DRYDOCK and a working uFBT toolchain on your machine; the browser itself does not compile anything. There is no emulator, and it is USB only (no BLE). Only one program can hold the serial port at a time, so close qFlipper, lab.flipper.net, or any terminal first. Web Serial needs a Chromium browser. Three behaviors are most likely to need a small correction on first contact with a real device: the CLI-to-RPC handshake, the RPC-to-CLI switch, and the screen framebuffer bit order. Each is isolated behind one function so a fix is a one-line change.
Roadmap. An optional port-owning transport where DRYDOCK relays both RPC and CLI over a local socket, which would let PORPOISE run in Firefox and Safari and support host-side whole-device backups. The device is always the runtime.
Source. PORPOISE and the DRYDOCK helper live at github.com/GreenShoeGarage/Porpoise. Download drydock.py there to enable native C builds.
License: GPL-3.0. Make. Hack. Learn. Share. Repeat.