Software licensing for Bitcoin creators

# Bitcoin-paid software licensing, self-hosted on Start9.

Buyers pay in Bitcoin via your own BTCPay. Your software verifies signed keys offline. You own the signing key, the customer list, and the payment rails — no SaaS, no middleman, no platform risk.

Install Keysat → See how it works
Runs on Start9 Pays via BTCPay Verifies offline
₿
— Certificate of License —

#### Sundial 2.0

Issued under default policy · single seat · 1 year
License key
KS-9F2A-7C41-XK22-6D8E
Issued
2026-04-22
Expires
2027-04-22
Ed25519 · mz7q8r4t1v…h3k2pXq9wL · ✓ verified offline
What this enables

## A complete sell-your-software stack, sovereign end-to-end.

Keysat handles the licensing layer. BTCPay handles payments. Your hardware holds the keys. No third party can mint, revoke, or read your sales records.

### Bitcoin payments, your store

BTCPay Server on your own Start9 takes the payment. Lightning settles in seconds. Funds go straight to your wallet — no intermediary holds them.

### You own the signing key

The Ed25519 keypair lives on your hardware. Every license is signed by it. There's no third party who could mint or revoke licenses.

### Offline verification

Your software verifies licenses against an embedded public key. No network call. Customer apps work even if your Keysat goes offline.

### Trials, expiries, seats, entitlements

Per-product policies for time-limited licenses, multi-seat caps, trial flags, feature entitlements baked into the key.

### Discount & referral codes

Percent-off, fixed-sats-off, or free-license codes (no payment). Run launch promos, comp keys for press, track partner campaigns.

### SDKs in your language

Rust, TypeScript, Python — wire-compatible offline verifiers. Five lines of code in your app and you're verifying real signatures.

How it works

## Five steps, end to end.

From sideload to first sale in an afternoon. No cloud account to create, no API keys to copy.

1. 01

   ### Install on your Start9

   Sideload the `.s9pk`, or install from `registry.keysat.xyz`. BTCPay comes bundled as a dependency.

2. 02

   ### Connect BTCPay

   One click in the StartOS Actions tab. Authorize once on BTCPay's consent page; Keysat registers a webhook automatically.

3. 03

   ### Define products + policies

   Declare a product, set its price in sats, define a policy (duration, seat cap, trial, entitlements).

4. 04

   ### Embed your public key

   Copy your Keysat public key into your app. Add the SDK. Five lines of code verifies a signature at startup.

5. 05

   ### Share your purchase URL

   Buyers hit your public URL, pay in Bitcoin, get a signed license. Their copy of your software boots up licensed.

For developers

### Five lines, in the language you already write.

Keysat licenses are Ed25519-signed and base32-encoded. Verification is pure-function — no network, no daemon, no shared state.

- Wire-compatible across SDKs
- Public key embedded at compile time
- Returns product, policy, expiry, entitlements
- Source-available, easy to port

npm install @keysat/licensing-client

    import { Verifier, PublicKey } from '@keysat/licensing-client'

    const verifier = new Verifier(
      PublicKey.fromPem(ISSUER_PEM)
    )

    const ok = verifier.verify(licenseKeyFromUser)
    console.log('licensed:', ok.productId, ok.expires)

    // Cargo.toml
    // licensing-client = "0.1"

    use licensing_client::{Verifier, PublicKeyPem};

    let pk = PublicKeyPem::from_str(ISSUER_PEM)?;
    let verifier = Verifier::new(pk);
    let ok = verifier.verify(&license_key)?;
    println!("licensed: {}", ok.product_id);

    from keysat_licensing_client import Verifier, PublicKey

    verifier = Verifier(PublicKey.from_pem(ISSUER_PEM))
    ok = verifier.verify(license_key_from_user)

    print("licensed for", ok.product_id)

Sovereign by default

## Everything stays on your hardware.

If you migrate Start9 boxes, all of Keysat goes with you. If Keysat the project disappears, your existing licenses keep verifying — the public key is embedded in your software, the private key is on your machine.

### What you keep

On your Start9, in your normal backups.

- Signing keypair
- Customer email · npub list
- Sale records
- Audit log
- BTCPay invoice history
- Webhook subscribers
- Bitcoin (your wallet)

Backed up automatically by StartOS as part of your normal backup routine.

### What's outside the box

Things you don't have to deal with.

- Stripe
- Gumroad
- Paddle
- Cryptlex
- Keygen
- LicenseSpring
- SaaS subscription fees
- Platform decisions about who you sell to

Source-available license · one-time payment in sats · ships with you when you migrate hardware.

Install

## From the marketplace, or sideload directly.

Recommended

### From the marketplace

Add the Keysat marketplace to your Start9, then click Install.

https://registry.keysat.xyz

StartOS dashboard → Marketplace → Add → paste the URL.

Alternative

### Sideload

If you'd rather not add the marketplace:

1. Download `keysat_x86_64.s9pk` from GitHub releases.
2. StartOS dashboard → Sideload → drag the file in.
3. Click Install.