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

Keysat is the licensing server you run on your own 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 How it works

## What this enables

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

⚡

### 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 you issue 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. Your customers' 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.

1. ### Install Keysat on your Start9

   Sideload the `.s9pk`, or install from registry.keysat.xyz. Keysat declares BTCPay Server as a dependency, so you'll have BTCPay running too.

2. ### Connect BTCPay in one click

   Click "Connect BTCPay" in the StartOS Actions tab. You authorize once on your BTCPay's consent page; Keysat auto-detects your store and registers a webhook. No API keys to copy.

3. ### Define your products + policies

   In the Keysat web UI: declare your product, set its price in sats, define a policy (duration, seat cap, trial flag, entitlements). The policy slugged `default` drives your public purchase flow.

4. ### Embed your public key in your software

   Copy your Keysat public key into your app's source. Add the SDK (`pip install`, `cargo add`, `npm install`). Five lines of integration code verifies a license at startup.

5. ### Share your purchase URL

   Your buyers hit your public Keysat URL, pay in Bitcoin, get a signed license key delivered. Their copy of your software boots up licensed. You see the sale in your audit log.

## Wiring it into your app

A working offline check is five lines.

### Python

    pip install keysat-licensing-client

    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)

### Rust

    [dependencies]
    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);

### TypeScript / JavaScript

    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)

### Other languages

Any language with Ed25519 + base32 (Go, Java, Swift, C#, C++, …) can verify Keysat keys. The wire format is fully documented; thin SDKs can be ported in a few hours. Go and Java/Swift SDKs are on the roadmap.

- Go (planned)
- Java/Kotlin (planned)
- Swift (planned)
- C#/.NET (planned)
- C++ (planned)

## Install

From the marketplace, or sideload directly.

### From the marketplace

Add the Keysat marketplace to your Start9:

    https://registry.keysat.xyz

StartOS dashboard → Marketplace → Add → paste the URL above. Keysat will appear; click Install.

### Sideload

If you'd rather not add the marketplace:

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

### Then once installed

1. ### Run "Connect BTCPay"

   One click; Keysat handles the rest.

2. ### Set your operator name

   What buyers see on receipts and the public homepage.

3. ### Open the admin web UI

   Click "Launch UI" on the Keysat service in StartOS. Paste your admin API key. Create your first product, policy, and discount code from there.

## Sovereign by default

### What you keep

- 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

- No Stripe
- No Gumroad
- No Paddle
- No Cryptlex / Keygen / LicenseSpring
- No SaaS subscription fees
- No platform decisions about who you can sell to

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