Flash your badge

This page writes firmware to your badge. You need no toolchain, no drivers and no command line. The browser talks to the badge over USB and writes the image. It can install the badge’s asset files in the same session.

This browser cannot flash. WebUSB is required, and only Chromium-family browsers ship it (Chrome, Edge, Brave, Opera, Arc). Firefox and Safari do not. You can still flash from a terminal with dfu-util.

1 Pick your badge

BornHack 2026 — Cyber Ægg Badge documentation →

2 Put the badge in DFU mode, then connect

disconnected
Product
Serial
VID:PID
Mode

3 Choose the firmware

4 Flash

idle
Do not unplug the badge while it is writing. The bootloader writes straight to the application partition — there is no backup slot — so an interrupted flash leaves the badge in DFU mode until you flash it again. That is recoverable; just re-run the flash.

5 Add the asset files

Firmware alone leaves the badge without artwork. In DFU mode it also appears as a small USB drive named CYBR followed by four hex digits; the sprites, sponsor slides and the event programme belong in the root of that drive. Each firmware image has its own set — the one below follows your choice in step 3.

Copy them straight to the drive

Pick the CYBR… drive when your browser asks, and the files are written for you — no download, no unzipping.

idle
This browser has no File System Access API, so it cannot write to the drive directly. Download the zip below instead.

Or download the zip

Unpack it into the root of the badge drive, not into a subfolder. Eject the drive when you are done, then power-cycle the badge.

5 Add the data it needs

Diagnostics

If something goes wrong

The device chooser is empty. The badge is not in DFU mode. Put it in the bootloader first. On the Cyber Ægg, slide the ON/OFF switch at the top left of the front off, then back on, while you hold Execute. The LED then blinks red. Click Connect again. The battery keeps the badge running, so a disconnection of USB does not restart it.

The page connects, but it reports “application firmware (CDC)”. The cause is the same. You reached the running firmware, not the bootloader. Power cycle the badge into DFU mode.

“Failed to open the device” on Linux. A udev rule is missing. The badge’s own repository has one. Install the rule, connect the badge again, and retry.

The write stopped in the middle. Nothing is damaged. The bootloader writes directly to the application partition, so an interrupted write leaves the badge in DFU mode. Connect again and write again.

Checksum mismatch. The download did not match the published hash, and the page refused it before it wrote anything. Load the page again and retry. If the error continues, report it.

The badge reports “No sprites on flash”. The firmware is installed, but the asset files are not. Do step 5 above, then power cycle the badge.

I flashed DOOM, and nothing happens or it asks for game data. The firmware is only half of DOOM. DOOM does not use the USB drive. Its game data goes into the badge’s QSPI flash over a serial connection. Upload a WAD before you play.

Sprites are missing or wrong after a change of edition. Each firmware image has its own asset set, and the Community Edition draws many more sprites than the standard image. Install the assets of the image you wrote. Step 5 follows your choice in step 3 automatically.

No drive appears for the assets. The badge shows its USB drive only in DFU mode, the mode you write from. If you already power cycled into the new firmware, enter DFU mode again.

The copy finished, but the badge looks empty. Eject the drive in your file manager before you disconnect it. Until you do that, your operating system can still hold the data in its cache.

Flashing without a browser

Every image on this page is a plain .bin file for the application partition, so dfu-util takes it directly:

dfu-util -d 1915:521f -D cyber-aegg.bin

Adding a badge or a firmware image

data/firmwares.toml in the website repository drives the flasher. Put the image in static/firmware/<badge-id>/, record it in that file with its sha256sum, and it appears here. There is no backend to deploy.

Asset payloads work in the same way. Build the archive with flat, deflate-compressed entries. Put it in static/assets/<badge-id>/, and point the badge’s assets entry at it:

cd assets/to-badge && zip -rX -9 cyber-aegg-assets.zip .

Two constraints are important:

  • This site must serve the images. A cross-origin download needs CORS headers, and the release assets of Codeberg and GitHub do not send them.
  • Application images only. A combined image that holds the bootloader (cyber-aegg-full.bin on the Cyber Ægg) starts at address 0x00000000, and it is for SWD or J-Link recovery. DFU writes the application partition, so a combined image here would damage badges.