Air-gapped Bitcoin signing
on the ESP32-P4

Kern turns an inexpensive touchscreen dev board into a powerful signing device. Bitcoin only, written in plain C: a maxCmalist signer.

Supported hardware

Five off-the-shelf boards. Each one needs a MIPI CSI camera module.

BoardTargetDisplayCamera
Waveshare ESP32-P4 4B wave_4b720×720 MIPI DSISold separately
Waveshare ESP32-P4 3.5″ wave_35320×480 SPIOV5647, included
Waveshare ESP32-P4 5″ wave_5720×1280 MIPI DSIOV5647, included
Waveshare ESP32-P4 4.3″ wave_43480×800 MIPI DSIOV5647, included
CrowPanel Advanced 7″ / 10.1″ crowpanel1024×600 MIPI DSISC2336, included

Kern drives both the OV5647 and the SC2336 and probes for whichever one is attached at boot, so either sensor works on any of the boards. The 4B is the one board sold without a camera: pair it with an OV5647 module carrying a DW9714 voice coil motor, which is the only combination that gets autofocus.

These boards carry an ESP32-C6 radio co-processor alongside the P4. Kern does not use it and holds it in reset mode. Users can remove or physically disable it if desired.

Get started

From an unflashed board to a working signer in a few minutes.

  1. Get a supported board with a MIPI camera

    Any of the five boards above. All but the 4B come with a camera in the box; for the 4B, add an OV5647 module with autofocus.

  2. Flash it from your browser

    The web flasher writes the latest build over USB using Web Serial, with no toolchain to install. Requires Chrome or Edge 89+.

  3. Create or restore a key

    Generate a mnemonic from dice rolls or the camera, or restore one you already have by typing it or scanning a QR code.

Documentation

Full user documentation is not written yet. For now, these live in the repository.

📖 README

Hardware, prerequisites, building from source, flashing releases and SD-card updates.

Read →

🗺️ Roadmap

What works today and what is still missing, feature by feature.

Read →

🔐 Security plan

The staged plan for secure boot, flash encryption and anti-rollback, with the current status of each phase.

Read →

🤝 Contributing

Project layout, coding conventions and how to get changes merged.

Read →

Community

Questions, testing reports and development chat.

💬 Telegram

The main discussion group for users and contributors.

t.me/kern_custody →

🐙 GitHub

Source, issues and pull requests. Bug reports very welcome.

odudex/Kern →