by Coldcard

Coldcard / firmware

❄️ Firmware and simulator for Coldcard Hardware Wallet

153 Stars 53 Forks Last release: Not found Other 1.0K Commits 39 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Coldcard Wallet

Coldcard is a Cheap, Ultra-secure & Opensource Hardware Wallet for Bitcoin. Get yours at

Follow @COLDCARDwallet on Twitter to keep up with the latest updates and security alerts.

coldcard logo

coldcard picture front coldcard picture back

Check-out and Setup

Do a checkout, recursively to get all the submodules:

git clone --recursive


  • cd firmware
  • git submodule update --init
    (if needed?)
  • brew install autogen
  • virtualenv -p python3 ENV
    (Python > 3.5 is required)
  • source ENV/bin/activate
    source ENV/bin/activate.csh
    based on shell preference)
  • pip install -r requirements.txt

Setup and Run the Desktop-based Coldcard simulator:

  • cd unix; make setup && make; ./

Building the firmware:

  • cd ../cli; pip install --editable .
  • cd ../stm32; make setup && make; make firmware-signed.dfu
  • The resulting file,
    can be loaded directly onto a Coldcard, using this command (already installed based on above)
  • ckcc upgrade firmware-signed.dfu

Which looks like this:

[ENV] [firmware/stm32 42] ckcc upgrade firmware-signed.dfu
675328 bytes (start @ 293) to send from 'firmware-signed.dfu'
Uploading  [##########--------------------------]   29%  0d 00:01:04


You'll probably need to install at least these packages:

brew cask install xquartz
brew install sdl2
brew cask install gcc-arm-none-eabi

Used to be these were needed as well:

brew install sdl2
brew tap PX4/px4
brew search px4
brew install px4/px4/gcc-arm-none-eabi-80 (latest gcc-arm-none-eabi-XX, currently 80)

You may need to reboot to avoid a

DISPLAY is not set


You'll probably need to install these (Ubuntu 16):

apt install libudev-dev python-sdl2 gcc-arm-none-eabi

If you get stuck on the "Skip PIN" screen after the startup, edit the
file located under
and follow the instructions from line 27 to line 31: ```

If on linux, try commenting the following line

addr = bytes([len(fn)+2, socket.AF_UNIX] + list(fn))

If on linux, try uncommenting the following two lines

import struct

addr = struct.pack('H108s', socket.AF_UNIX, fn)

## Code Organization

Top-level dirs:


  • shared code between desktop test version and real-deal
  • expected to be largely in python, and higher-level


  • unix (MacOS) version for testing/rapid dev
  • this is a simulator for the product


  • test cases and associated data


  • embedded micro version, for actual product
  • final target is a binary file for loading onto hardware


  • code from other projects, ie. the dreaded submodules


  • 32k of factory-set code that you cannot change
  • however, you can inspect what code is on your coldcard and compare to this.


  • schematic and bill of materials for the Coldcard


Found a bug? Email: [email protected]

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.