You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+18Lines changed: 18 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,23 @@
1
1
# Changelog
2
2
3
+
## [0.0.16] - 2026-08-11
4
+
5
+
### Added
6
+
- PSBT review shows the fee as a percentage of the total inputs and flags it in red at or above 10%, so an outsized fee no longer reads like a normal one
7
+
- Signing reports inputs that did not receive a signature: cleared inputs are counted against inputs that actually gained one (ECDSA map, taproot key signature and leaf signatures diffed rather than trusting the return code), and the scan page names the shortfall before offering export
8
+
- Project landing page at `site/index.html`, with the web flasher moved under `site/flash/`; `just site` stages branding plus locally built firmware exactly the way CI does and serves it on localhost, so a board can be flashed from the local copy before anything is pushed
9
+
10
+
### Changed
11
+
- New devices default to testnet. Consolidating Kern as a research platform, experimentation is the out-of-box state instead of a setting to find first
12
+
- The unproven-fee confirmation behind Sign is dropped; both fee warnings now live on the review screen itself
13
+
- Dev tools and the QR decode debug scaffolding are removed, both gates were permanently compiled out and k_quirc's own test harness covers the capture/decode pages
14
+
- Updated k_quirc and cUR
15
+
16
+
### Fixed
17
+
- An input Kern refused could still collect a signature: libwally signs every input whose keypath names the key it is given, so a UTXO of ours listed under someone else's fingerprint was shown as external while its signature was harvested anyway. Classification now runs up front, refused inputs are snapshotted and restored around signing, and discarded signatures are counted and reported
18
+
- Sighash flags other than ALL are refused, in the review gate and again per-input inside signing; under NONE, SINGLE or ANYONECANPAY the outputs and fee on screen are not what gets broadcast
19
+
- Input amounts are verified against the prevout txid instead of trusting whichever utxo the PSBT offered: amounts are classified as proven, asserted, invalid or missing, the proven value wins for display, and contradictory data is refused before the review screen. Unproven amounts still sign, coordinators trim the previous transaction for air-gapped transfers, but the fee is marked unproven
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+11-9Lines changed: 11 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,8 @@
2
2
3
3
Thank you for your interest in contributing to Kern! This document outlines the guidelines for contributing to the project.
4
4
5
+
Kern is a research and development project exploring new hardware and Bitcoin self-custody ideas. Contributions are welcome in that spirit: the goal is to learn and publish, not to ship a product.
6
+
5
7
## Getting Started
6
8
7
9
1. Fork the repository and clone it locally.
@@ -15,10 +17,10 @@ Thank you for your interest in contributing to Kern! This document outlines the
15
17
16
18
Kern follows a strict layer separation:
17
19
18
-
-**`main/core/`** — Bitcoin logic. Must never depend on UI headers. Use callbacks for any user interaction.
19
-
-**`main/pages/`** — UI pages with create/show/hide/destroy lifecycle.
20
-
-**`main/ui/`** — Reusable LVGL UI primitives.
21
-
-**`main/qr/`** — QR scanning, parsing, and encoding.
20
+
-**`main/core/`**: Bitcoin logic. Must never depend on UI headers. Use callbacks for any user interaction.
21
+
-**`main/pages/`**: UI pages with create/show/hide/destroy lifecycle.
22
+
-**`main/ui/`**: Reusable LVGL UI primitives.
23
+
-**`main/qr/`**: QR scanning, parsing, and encoding.
22
24
23
25
Do not introduce UI dependencies into core modules. If a core function needs user confirmation, accept a callback parameter.
24
26
@@ -38,7 +40,7 @@ The project uses two static analysis tools to catch bugs early. Both are availab
38
40
39
41
Both tools cover `main/` and first-party components (`bbqr`, `cUR`, `k_quirc`, `sd_card`, `video`, `wave_4b`, `wave_35`, `wave_43`, `crowpanel`, `tdisplay_p4`). `libwally-core` and `wave_5` are excluded (third-party upstream code: libwally-core is the original; wave_5 ships a vendored ST-style HX8394 driver).
40
42
41
-
**clang-tidy** (recommended — catches real bugs):
43
+
**clang-tidy** (recommended, catches real bugs):
42
44
```bash
43
45
# Requires a build first (for compile_commands.json)
44
46
idf.py build
@@ -55,7 +57,7 @@ find main components/bbqr components/cUR components/k_quirc \
The project `.clang-tidy` config enables bug-finding and security checks tuned for embedded C. Warnings about unknown GCC flags (`-fno-tree-switch-conversion`, `-fstrict-volatile-bitfields`) are expected and harmless — they come from clang analyzing GCC-compiled code.
60
+
The project `.clang-tidy` config enables bug-finding and security checks tuned for embedded C. Warnings about unknown GCC flags (`-fno-tree-switch-conversion`, `-fstrict-volatile-bitfields`) are expected and harmless; they come from clang analyzing GCC-compiled code.
Note: `cppcheck` does not understand secure memory wipe patterns (zeroing variables before return) and will flag them as dead stores — these are intentional and should be ignored.
78
+
Note: `cppcheck` does not understand secure memory wipe patterns (zeroing variables before return) and will flag them as dead stores. These are intentional and should be ignored.
77
79
78
80
### Security
79
81
@@ -86,7 +88,7 @@ Kern is a Bitcoin signing firmware. Security is not optional.
86
88
87
89
## Objectivity
88
90
89
-
We value focused, purposeful contributions. Every PR should clearly state **what problem it solves** — this helps reviewers understand your intent and keeps the project lean.
91
+
We value focused, purposeful contributions. Every PR should clearly state **what problem it solves**. This helps reviewers understand your intent and keeps the project lean.
90
92
91
93
Whenever possible, link to a previously discussed **Issue** where the problem has been described and agreed upon. If no issue exists yet, consider opening one first to give the community a chance to weigh in. For small, self-evident fixes (typos, obvious bugs), describing the problem directly in the PR is perfectly fine.
92
94
@@ -104,7 +106,7 @@ Whenever possible, link to a previously discussed **Issue** where the problem ha
104
106
105
107
Open an Issue describing:
106
108
107
-
-**The problem** — what is wrong or missing, and why it matters.
109
+
-**The problem**: what is wrong or missing, and why it matters.
Copy file name to clipboardExpand all lines: README.md
+7-5Lines changed: 7 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,11 +9,13 @@
9
9
<ahref="ROADMAP.md"><b>Roadmap</b></a>
10
10
</p>
11
11
12
-
Kern is a young open-source project building an air-gapped Bitcoin signing device on the ESP32-P4. The chip has no radio, so keys are generated and used on hardware that physically cannot reach a network. Transactions cross the air gap as QR codes or over an SD card.
12
+
Kern is a research and development project exploring what new hardware can do for Bitcoin self-custody. It takes the form of an air-gapped signing device on the ESP32-P4: the chip has no radio, so keys are generated and used on hardware that physically cannot reach a network. Transactions cross the air gap as QR codes or over an SD card.
13
+
14
+
The goal is to explore ideas: new silicon, new interfaces, new backup and signing workflows. They get implemented, tested and documented in the open. Kern is a research platform and intends to stay one; it is not on a path to becoming a product.
13
15
14
16
It signs PSBTs for single-sig, multisig and miniscript policies on both native segwit and taproot, built on [libwally](https://github.com/ElementsProject/libwally-core/), the same core library used by Blockstream Jade.
15
17
16
-
> **Warning:** Kern is under active development and has not been audited. Secure boot is not enabled by default and builds are unvetted development snapshots. Do **not** use Kern to manage real savings.
18
+
> **Warning:** Kern is a research and development project, built for experimentation and testnet use. It has not been audited and secure boot is not enabled by default; builds are unvetted development snapshots. Any mainnet use is entirely at your own risk. The project makes no security guarantees.
17
19
18
20
## Hardware
19
21
@@ -29,7 +31,7 @@ the LilyGO T-Display-P4:
29
31
|[CrowPanel Advanced 10.1" ESP32-P4](https://github.com/Elecrow-RD/CrowPanel-Advanced-10.1inch-ESP32-P4-HMI-AI-Display-1024x600-IPS-Touch-Screen) and 7" siblings (`crowpanel`) | 1024x600 MIPI DSI | GT911 | SC2336, included |
ESP32-P4 does not contain radio (WiFi, BLE), but these boards have a radio in a secondary chip (ESP32-C6 mini). Later the project will migrate to use radio-less, simpler and cheaper boards with ESP32-P4only.
34
+
ESP32-P4 does not contain radio (WiFi, BLE), but these boards have a radio in a secondary chip (ESP32-C6 mini). Exploring radio-less, simpler and cheaper ESP32-P4-only boards is part of the project's hardware research.
33
35
34
36
A MIPI CSI camera is required for all boards. Kern ships drivers for the
35
37
OV5647 and SC2336 sensors and probes for whichever one is attached at boot, so
@@ -169,7 +171,7 @@ The flasher offers two modes:
169
171
-**Latest CI Build**: fetches firmware built by the most recent `master` push directly from the site and flashes it to the selected board.
170
172
-**Custom ZIP Bundle**: accepts a `firmware-<board>.zip` artifact downloaded from the [Actions tab](../../actions) to flash any PR or older build.
171
173
172
-
> **Warning:** CI builds are unvetted development snapshots from a young, unaudited project. Secure boot is not enabled; do **not** use flashed firmware to manage real savings.
174
+
> **Warning:** CI builds are unvetted development snapshots from a research project. Secure boot is not enabled. Flash them for experimentation and testnet use; any mainnet use is entirely at your own risk.
173
175
174
176
> **Note:** The project site and flasher are deployed automatically on every successful push to `master`, from `site/` in this repository. To enable it for your fork, go to **Settings → Pages** and set the source to **GitHub Actions**. To preview the site locally, run `just site` and open http://localhost:8000. Web Serial works on localhost, so you can flash a real board from the local copy.
175
177
@@ -218,7 +220,7 @@ Every pull request and push to `master` produces a firmware artifact for each su
218
220
219
221
## Flashing Pre-releases
220
222
221
-
Pre-release firmware is provided **for testing purposes only**. Do not use pre-release builds as a signer for real savings.
223
+
Pre-release firmware is provided **for research and testing purposes only**. Any mainnet use is entirely at your own risk.
Copy file name to clipboardExpand all lines: ROADMAP.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,7 @@
1
1
# Roadmap
2
2
3
+
Kern is a research and development project. This list tracks what has been explored and what is still open: research directions, not a release schedule.
0 commit comments