#charms #sdk #bitcoin #zk #started

charms-sdk

Charms SDK: the only dependency needed to build ZK apps on Bitcoin

28 releases (8 breaking)

Uses new Rust 2024

new 0.9.3 Oct 6, 2025
0.9.1 Aug 31, 2025
0.7.0 Jul 28, 2025
0.5.3 Mar 31, 2025
0.1.10 Dec 31, 2024

#853 in Magic Beans

Download history 246/week @ 2025-06-18 29/week @ 2025-06-25 296/week @ 2025-07-02 22/week @ 2025-07-09 93/week @ 2025-07-23 22/week @ 2025-07-30 108/week @ 2025-08-06 117/week @ 2025-08-13 34/week @ 2025-08-20 277/week @ 2025-08-27 86/week @ 2025-09-03 18/week @ 2025-09-10 122/week @ 2025-10-01

147 downloads per month

MIT license

4KB

This is the only crate you need to get started coding a Charms app.

Usage

Run this command to create a new Charms app:

charms app new my-app

It will create a new directory called my-app with a basic Charms app template.

It'll have this in Cargo.toml:

[dependencies]
charms-sdk = { version = "0.3.0" }

This is how the entire src/main.rs looks like:

#![no_main]
charms_sdk::main!(my_app::app_contract);

The most important function in the app is app_contract in src/lib.rs:

use charms_sdk::data::{
    check, App, Data, Transaction, NFT, TOKEN,
};

pub fn app_contract(app: &App, tx: &Transaction, x: &Data, w: &Data) -> bool {
    match app.tag {
        NFT => {
            check!(nft_contract_satisfied(app, tx, x, w))
        }
        TOKEN => {
            check!(token_contract_satisfied(app, tx, x, w))
        }
        _ => todo!(),
    }
    true
}

Dependencies

~2–3MB
~56K SLoC