Get the apps

On your Mac or Linux machine today: the Lab, the whole workshop with the real firmware emulator, and the Flasher, one-button USB flashing. Local-first. No account, no telemetry.

Free & open source · macOS 11+ · most modern Linux

macOS

Universal · Apple Silicon & Intel

Grab the .dmg and drag SecuraCV Lab into Applications. Releases are signed with a Developer ID and notarized by Apple, so macOS asks once whether to open an app downloaded from the internet: click Open, and it launches normally from then on. No Terminal step: the .dmg window of app-v0.3.4 says the same. Older windows still show a Terminal command, which is for unsigned builds, so skip it.

Download for macOS
Unsigned build (a fork, a local build, or a release page that says so)

A build made without the project's Apple signing keys isn't notarized, and macOS refuses to open it (“can't be opened” or “is damaged”). Nothing is wrong with the app; clear the quarantine flag once in Terminal (right-click → Open no longer works on recent macOS):

xattr -dr com.apple.quarantine "/Applications/SecuraCV Lab.app"

Only on a copy you built yourself or downloaded from this project's release page — never on an app that opens by itself. Full steps & the Terminal-free path →

Looking for the file? It's SecuraCV.Lab_*_universal.dmg on the release page.

Linux

AppImage · or .deb

Take the .AppImage (runs anywhere — chmod +x and go), or the .deb on Debian/Ubuntu.

Download for Linux
Files: *.AppImage and *.deb on the release page.

SecuraCV Flasher

A separate app · macOS · Linux

A focused native tool that writes firmware onto a Canary over USB with bundled espflash — no browser, no Web Serial. It's its own app on its own release train (tags starting flasher-v), signed and notarized by Apple on macOS like the Lab. The Lab's Flash page runs its flash engine; the Flasher keeps the extras: the automatic safety copy, the rescue bench, local-file installs, the Vision camera module and the security-fuse read.

Download the Flasher
For makers: broker encryption

It carries the same Broker encryption select as the browser flasher: plain MQTT by default (what every Canary shipped with), or TLS to your broker — CA-verified, or pinned to the broker certificate's SHA-256 fingerprint — with port 8883 suggested when you pick a TLS mode. Host-tested; not yet run against a TLS broker on hardware.

Like the browser flasher, it can read a board's security fuses before you flash: open New board from a shop or marketplace? on step 1 and press Read its security fuses (since 0.12.0; ESP32-S3, C3 and C6). Read-only, host-tested, not yet bench-tested on a board — a read that can't finish says “not checked”, never “clean”. The read ends by restarting the board into whatever it arrived running, which lets that firmware run — the thing holding BOOT was for. On a board you didn't flash yourself, read the fuses in the browser flasher instead; if you already used this read, unplug it and hold BOOT again before you flash.

All builds live on the GitHub releases page: the macOS and Linux buttons open the SecuraCV Lab release app-v0.3.4, the Flasher button flasher-v0.12.4. Windows isn't built or tested — no release job, no installer target; Windows users run the browser Lab.

Once installed, the Lab checks for its own updates, shows you what's changing, and installs only when you say yes, every update signed and verified first.

Local-first, always

The app runs on your machine and talks to your own devices. It doesn't call our servers — there's nothing to call. It reaches the internet for two things only, both from the project's public GitHub releases: its own update manifest and the firmware for its Flash page (it asks which signed release is published once a board is connected, and downloads the image when you press Flash) — checked against the pinned release key before a byte is written. The same code you can read on GitHub.

It's the real firmware

The emulator is the shipping display firmware compiled to WebAssembly — same faces, same mood engine, same Ed25519 verify. When the firmware changes, the Lab changes with it.

Or just use the web Lab

Not ready to install? The Lab runs in your browser too. The app adds native touches and, since Lab 0.3.0, USB flashing without Chrome: its Flash page runs the Flasher's engine and bundled espflash, host-tested and built by CI, not yet bench-tested from the Lab app. The SecuraCV Flasher above flashes too, and keeps the extras the Lab leaves to it.

On your iPhone, Apple Watch and Apple TV

Both are built and tested in CI, in the open. The iPhone app is on TestFlight by invite; publishing either to the App Store is still ahead.

iPhone, iPad + Apple Watch

One app · the Watch app rides inside it

Your fleet and its alerts on the Lock Screen and your wrist, with each Canary's signed record checked on the phone itself. Adding a Canary is bring it near, tap Set up: Bluetooth for Sense, Vision and WAP, the display's own setup network for a screen.

When your phone is signed in to iCloud, your list of paired Canaries is kept in your own iCloud, not ours.

On TestFlight (ask for an invite) · App Store release pending

Apple TV

The Witness Wall

Your fleet's signed record on the biggest screen in the house, instead of a wall of live feeds. Until the app is on the App Store, the same Wall runs in a browser today.

Built and tested · not on the App Store yet

Your first Canary — the three phone screens, in words

A Sense, Vision or WAP takes your Wi-Fi from the iPhone app in one tap at first power-on. Here is the whole thing, so you know what you are looking at before it happens.

  1. A card appears: “A new Canary is nearby.” Power the Canary on near your phone with the SecuraCV app open; within seconds the card is there. Tap Continue, then Pair when iOS asks.
  2. Pick your Wi-Fi. The list is the networks the Canary itself can see. Choose yours and type its password once; the phone can remember it for the next Canary.
  3. “<name> is on <your Wi-Fi>.” The Canary answers with its own verdict and the phone says so. That is the setup.

No card within about 30 seconds? Unplug the Canary and plug it back in — the door opens for half an hour after power-on. A Sense or Vision also opens it for a minute on one short tap of its BOOT button. The all-rounder Canary and a display have no card at all: the Canary raises its SecuraCV-canary-XXXX setup network (its key is on the Flasher's done card, read off the board's first boot), and a display shows a join QR on its own glass.

The iPhone app is on TestFlight — ask for an invite; its App Store release is pending. The one-tap door is host-tested and not yet tried on a bench device; the setup network always works.

Prefer to build them yourself? The desktop apps are Tauri apps in the main repo — the Lab in desktop-lab/, the Flasher in desktop/ — npm install && npm run build in either. The Apple apps live in ios/ and tvos/.