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.
Keysat handles the licensing layer. BTCPay handles payments. Your hardware holds the keys. No third party can mint, revoke, or read your sales records.
BTCPay Server on your own Start9 takes the payment. Lightning settles in seconds. Funds go straight to your wallet — no intermediary holds them.
The Ed25519 keypair lives on your hardware. Every license is signed by it. There's no third party who could mint or revoke licenses.
Your software verifies licenses against an embedded public key. No network call. Customer apps work even if your Keysat goes offline.
Per-product policies for time-limited licenses, multi-seat caps, trial flags, feature entitlements baked into the key.
Percent-off, fixed-sats-off, or free-license codes (no payment). Run launch promos, comp keys for press, track partner campaigns.
Rust, TypeScript, Python — wire-compatible offline verifiers. Five lines of code in your app and you're verifying real signatures.
From sideload to first sale in an afternoon. No cloud account to create, no API keys to copy.
Sideload the .s9pk, or install from registry.keysat.xyz. BTCPay comes bundled as a dependency.
One click in the StartOS Actions tab. Authorize once on BTCPay's consent page; Keysat registers a webhook automatically.
Declare a product, set its price in sats, define a policy (duration, seat cap, trial, entitlements).
Copy your Keysat public key into your app. Add the SDK. Five lines of code verifies a signature at startup.
Buyers hit your public URL, pay in Bitcoin, get a signed license. Their copy of your software boots up licensed.
Keysat licenses are Ed25519-signed and base32-encoded. Verification is pure-function — no network, no daemon, no shared state.
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)
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.
Backed up automatically by StartOS as part of your normal backup routine.
Source-available license · one-time payment in sats · ships with you when you migrate hardware.
Add the Keysat marketplace to your Start9, then click Install.
StartOS dashboard → Marketplace → Add → paste the URL.
If you'd rather not add the marketplace:
keysat_x86_64.s9pk from GitHub releases.