Skip to content
🔧 Developer beta launches 30 September 2026 — free for developers. Flash your own ESP32-S3 and test it. Learn more →

Flash Guide

Any ESP32-S3 with a native USB-C OTG port works. These are the boards we develop and test on:

  • Development setup — ESP32-S3-N16R8 on a breadboard with both USB-C ports connected: CH343 for flashing, OTG for HID. Green LED lit means the firmware is running.
  • Beta reference board — ESP32-S3-WROOM-1 DevKit. On AliExpress, Mouser or Farnell for about €5, standard form factor, easy to source.
  • Finished product — same chip, same firmware, in a compact PLA case. Available as Kit Standard at launch.

Photos of all three: Developer Beta.

  • ESP32-S3-WROOM-1 (any flash size)
  • USB-C cable connected to the native OTG port (NOT the CH343/flash port if your board has two)

Before you flash — the beta does not burn the eFuses

Section titled “Before you flash — the beta does not burn the eFuses”

The firmware published for the developer beta is the -dev track. Flashing it is an ordinary write_flash: the eFuses are not burned, Secure Boot v2 and Flash Encryption are not activated, and the board stays a standard ESP32-S3 underneath.

This is reversible. If you decide not to continue, flash any other firmware and the board goes back to what it was. You can use the €5 board that was carrying another project.

What you give up is exactly what the eFuses would have bought you:

  • any firmware runs — nothing verifies a signature at boot
  • NVS is not encrypted, so an SPI dump of the flash is readable
  • CMD_GET_SECRET (0x04) responds, and JTAG is not disabled

A beta dongle protects against laptop theft, not against someone holding the dongle. Do not put data on it that you would not want readable by someone with physical access and an SPI flash reader. The full picture is on the beta page and in the security model.

Production dongles (Kit Standard, Kit Pro — April 2027) are the other case: eFuses burned at first boot, the lake8.dev secure boot key in place, flash encryption enabled, JTAG permanently disabled and read-flash refused. That step is permanent, and it does not happen during the beta.

Latest firmware: cryptin.lake8.dev/download

Verify the signature before flashing:

Terminal window
# verify with lake8.dev public key
  1. Open Crypt-in Personal app
  2. Connect ESP32-S3 via USB-C (OTG port)
  3. Click Flash Firmware
  4. Select the downloaded .bin file
  5. Wait for completion

Windows only: set the console encoding before running esptool, or it fails mid-write with a UnicodeEncodeError.

Terminal window
set PYTHONIOENCODING=utf-8

PowerShell:

Terminal window
$env:PYTHONIOENCODING="utf-8"

Then:

Terminal window
pip install esptool
esptool.py --port COMx write_flash --flash-size keep 0x0 cryptin-firmware-vX.X.X.bin

On the beta track the write is the whole procedure — there is no eFuse burn afterwards, and the board is ready as soon as it reboots. The burn step belongs to production dongles, where it happens at first boot.

On first boot, the dongle generates:

  • Ed25519 keypair (K_identity)
  • K_attestation from hardware entropy
  • BIP-39 seed (24 words)

The seed is shown once via serial (UART0/CH343 port, 115200 baud). Write it down immediately — it will never be shown again.

Alcuni contenuti sono stati redatti con il supporto di strumenti di intelligenza artificiale generativa e revisionati dall'autore. Le immagini hardware hanno scopo puramente illustrativo.

Some content was drafted with the support of generative AI tools and reviewed by the author. Hardware images are purely illustrative.

Einige Inhalte wurden mit Unterstützung generativer KI-Werkzeuge verfasst und vom Autor überprüft. Hardware-Abbildungen dienen ausschließlich illustrativen Zwecken.

Algunos contenidos han sido redactados con el apoyo de herramientas de IA generativa y revisados por el autor. Las imágenes de hardware tienen carácter meramente ilustrativo.

In caso di conflitto tra versioni linguistiche, prevale il testo in lingua italiana.