Skip to content
Wallets21 October 2026

Build a DIY Jade for €15 and set up Blockstream multisig

A DIY Jade from a €15 LilyGO board: build it, connect it to the Blockstream app and set up 2-of-2 multisig with 2FA. Every step, with screenshots.

Article image for: Build a DIY Jade for €15 and set up Blockstream multisig

I wanted to know how far you can get with a Jade that costs almost nothing. So I built one from a LilyGO T-Display S3 (about €15) with Blockstream's official Jade firmware, connected it to the Blockstream app on a Mac and set up a 2FA Protected (2-of-2 multisig) account with an authenticator app. Then I sent a small test amount to it. This is the whole process, tested on 19 October 2026.

At a glance

  • Board: LilyGO T-Display S3, ESP32-S3 chip, about €15
  • Firmware: Jade 1.0.41 (commit e6a51ab), built from the official repository
  • Works with: Blockstream app 3.6.0 on macOS, over USB
  • Account: 2FA Protected, multisig 2-of-2
  • Two-factor: authenticator app, threshold of one satoshi
  • Test deposit: 0.0001 BTC, from unconfirmed to confirmed

The six steps are: build and flash, set the PIN and write down the recovery phrase, connect to the app, add a multisig account, turn on two-factor authentication and receive a first test amount.

Which platforms the app runs on

The Blockstream app is available for mobile and desktop, so you can add a multisig account on the device you prefer.

Download links on blockstream.com for Android, iOS, F-Droid, Mac Apple Silicon, Mac Intel, Windows and Linux AppImage

Blockstream app downloads: Android, iOS, F-Droid, Mac (Apple Silicon and Intel), Windows and Linux (AppImage). Source: blockstream.com/app/multisig.

This guide uses the Blockstream app for macOS (Apple Silicon), version 3.6.0, with the Jade connected over USB.

What you need

  • LilyGO T-Display S3. 1.9 inch screen, 170×320 pixels. Mine is marked "T-Display S3 22-8-2 V1.2".
  • A USB-C data cable. A power-only cable will not work for flashing.
  • A computer. macOS or Linux to build the firmware (the Jade repository also offers a Docker build environment). The Blockstream desktop app runs on macOS, Windows and Linux. I used a Mac with Apple Silicon.
  • Blockstream app 3.6.0, from blockstream.com/app or the GitHub releases.
  • Paper and a pen for the PIN and the recovery phrase.

How to recognise the right board: the silkscreen says T-Display S3 with revision V1.2, the chip is an ESP32-S3, the label reads MODEL: T-Display-S3, and a green power LED lights up when it gets USB power. The original TTGO T-Display is a different board, with a smaller screen and an ESP32 chip. Use the matching build profile for whichever you have.

Back of the LilyGO T-Display S3 showing the ESP32-S3 chip, the Winbond flash chip and the T-Display-S3 label with the FCC ID

The back of the board.

Other DIY boards you can use

The T-Display S3 is only one option. The Jade repository ships build profiles for several low-cost boards. I built and tested the T-Display S3.

BoardApprox. priceInputBuild profile
LilyGO TTGO T-Display$10Two buttonssdkconfig_display_ttgo_tdisplay
LilyGO T-Display S3 (used here)$15Two buttonssdkconfig_display_ttgo_tdisplays3
M5Stack M5StickS3$16Two buttonssdkconfig_display_m5sticks3
M5Stack M5StickC PLUS 2$20Two buttonssdkconfig_display_m5stickcplus2
M5Stack Basic Core$40Three buttonssdkconfig_display_m5blackgray

More profiles exist for the M5Stack FIRE, Core2 and CoreS3, the Waveshare touch displays and the LilyGO T-Watch S3. Prices and details come from the Jade DIY guide, so check the DIY README for the current list before you order.

Step 1: Build and flash the firmware

I used the official Blockstream/Jade repository at firmware 1.0.41, ESP-IDF 5.5.5 and Python 3.12. The repository ships a build profile for this board, so nothing has to be edited.

Install the toolchain

git clone --depth 1 --branch v5.5.5 --recursive --shallow-submodules https://github.com/espressif/esp-idf.git
cd esp-idf
./install.sh esp32s3
. ./export.sh
pip install cmake ninja cbor2 pycryptodome wallycore

Build

git clone --recursive https://github.com/Blockstream/Jade.git
cd Jade
cp configs/sdkconfig_display_ttgo_tdisplays3.defaults sdkconfig.defaults
idf.py set-target esp32s3
idf.py all

Flash

  1. Hold BOOT, plug in the USB cable, then release BOOT. The screen stays black.
  2. Run idf.py -p /dev/cu.usbmodemXXXX flash.
  3. Unplug and replug the cable. The Jade menu appears.

The Jade home screen on the LilyGO T-Display S3 right after flashing, showing Options, Uninitialized and Set Up

Right after flashing: the Jade home screen reads Uninitialized, with Options and Set Up.

On my Mac, ESP-IDF did not provide cmake and ninja, so I installed both with pip inside the ESP-IDF environment. The DIY README also warns never to flash DIY firmware onto an official Jade, or the reverse.

Step 2: Set the PIN and create the wallet

The Jade asks for a connection method (USB or Bluetooth) and then waits for the companion app. The PIN and the recovery phrase are created on the device itself, with its two buttons.

  1. Choose Begin Setup on the Jade.
  2. Pick a six-digit PIN and confirm it.
  3. Write down the recovery phrase on paper.

The Confirm PIN screen on the LilyGO T-Display S3 running Jade, with the two buttons on the side of the board

Confirming the PIN on the Jade with the two side buttons.

The Jade showing four words of the recovery phrase on its screen

The Jade shows the recovery phrase four words at a time. Write them down on paper.

Both photos come from an earlier test setup. That wallet has since been wiped and never held any funds.

I started this step from the Mac with the Jade Python client over USB. The PIN screen appeared on the device and setup completed normally:

# run from the Jade repository, with the ESP-IDF environment active
from jadepy import JadeAPI
jade = JadeAPI.create_serial('/dev/cu.usbmodemXXXX')
jade.connect()
jade.auth_user('mainnet')   # the PIN screen now appears on the Jade

Step 3: Connect to the Blockstream app

Plug the Jade into the Mac and open the Blockstream desktop app. The Jade shows up as a hardware device. A DIY board is not a retail Jade, so the app's genuine check does not pass it as one; continue as a DIY device. After you enter the PIN on the device, the app shows Connected and loads the wallet.

Blockstream app on macOS showing Jade 15794C as a connected hardware wallet with a balance of 0 EUR

The Blockstream app on macOS with the DIY Jade connected.

Wallet list in the Blockstream app with Jade 15794C under Hardware Devices and a green dot

The Jade listed under Hardware Devices, with a green dot while connected.

The desktop app recognises the DIY Jade over USB and treats it as a normal hardware wallet.

Step 4: Create the multisig account

  1. Open the menu next to the wallet name and choose Add New Account.
  2. Keep Bitcoin as the asset.
  3. Pick 2FA Protected. It is the multisig 2-of-2 option, aimed at active spenders.
  4. Confirm on the Jade if it asks.

Menu next to the wallet name with Get Support, Rename, Add New Account, Refresh, View archived accounts and Logout

The menu next to the wallet name. Choose Add New Account.

Create New Account panel listing Standard singlesig, 2of3 with 2FA and 2FA Protected

Security policies when creating a new account.

The 2-of-3 option needs a third, emergency key and suits long-term holding, so I did not use it here.

The new 2FA Protected account with a balance of 0 BTC and Buy, Send, Receive and Swap buttons

The 2FA Protected account right after creation.

The account is listed as 2FA Protected, multisig 2-of-2. One key lives on the Jade.

Step 5: Turn on two-factor authentication

  1. Open Settings → Two-Factor authentication.
  2. Switch on Authenticator app and scan the QR code with your authenticator.
  3. Enter the six-digit code to confirm.
  4. Set the 2FA threshold to the minimum, 0.00000001 BTC, so every spend needs a code.
  5. Leave the 2FA expiry at the default of 12 months.

Two-Factor authentication settings listing Email, SMS, Phone call and Authenticator app, all disabled

The available 2FA methods before setup. I used the authenticator app.

Two-Factor authentication settings with the Authenticator app enabled and the threshold set to 0.00000001 BTC

Authenticator app enabled, threshold at one satoshi.

Left: confirmation that the Two-Factor threshold is 0.00000001 BTC. Right: the Two-Factor expiry options of 6, 12 and 15 months with 12 months selected

Left: the 2FA threshold is set to 0.00000001 BTC. Right: the expiry options are 6, 12 or 15 months; I kept 12.

Blockstream co-signs only when it receives the code from the authenticator app. The Jade holds the other key.

Step 6: Receive a first test amount

To see the account work with real coins, I sent a small test amount to it.

  1. Click Receive and choose the 2FA Protected account (multisig 2-of-2).
  2. Check the receiving address in the app. If the app offers to verify the address on the device, confirm it there too.
  3. Send a small amount to that address from an exchange or another wallet.
  4. The transaction first appears as pending, then as confirmed once it is in a block.

Receive panel listing the Bitcoin accounts Standard (singlesig, native SegWit) and 2FA Protected (multisig 2-of-2)

Choose the account to receive on. The test amount went to the 2FA Protected account.

Blockstream app overview with the Jade connected, a total balance of 7.36 EUR and a received transaction of 0.0001 BTC

The overview after the test deposit: 0.0001 BTC, about €7.36, with the Jade still connected.

The deposit in the app

Shortly after sending, the transaction showed up in the app as Received and Unconfirmed. Once it is included in a block, the app counts confirmations out of six.

Transaction details in the Blockstream app, from left to right: unconfirmed, 1 of 6 confirmations, fully confirmed. Account 2FA Protected; receiving address and transaction ID blurred

From left to right: unconfirmed, still waiting for a block; 1 of 6 confirmations; confirmed, the pending badge is gone.

The receiving address and the transaction ID are blurred in all three screenshots on purpose.

DetailValue
Account2FA Protected
Amount0.0001 BTC, about €7.35
Network fee0.00000284 BTC at 2 sat/vbyte, paid by the sender

What I tested

StepResultNotes
Build and flash Jade 1.0.41WorksOfficial build profile for the T-Display S3, no edits needed.
PIN and wallet on the deviceWorksPIN screen and recovery phrase on the Jade itself.
Blockstream app 3.6.0 on macOS, USBWorksDevice recognised and shown as connected right away.
2FA Protected multisig accountWorksCreated from the Add New Account menu.
Authenticator app 2FAWorksEnabled, threshold set to one satoshi.
Test deposit of 0.0001 BTCWorksShows up as received, first unconfirmed, later confirmed.

Security: small amounts only

This is a DIY board. I did not enable secure boot or flash encryption, so anyone with physical access to it has more options than with a retail Jade. Only send an amount you are fine with losing, keep the recovery phrase on paper, and never share it or the PIN.

Related: Blockstream app multisig · Blockstream/Jade on GitHub.

Disclosure: Cryptocodes is a partner in Blockstream's affiliate programme. This guide documents my own test on my own hardware.

#jade#blockstream#hardware wallet#multisig#diy#lilygo#2fa