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.
A complete sell-your-software stack, sovereign end-to-end.
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 you issue 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. Your customers' 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.
Five steps, end to end.
Sideload the .s9pk, or install from registry.keysat.xyz. Keysat declares BTCPay Server as a dependency, so you'll have BTCPay running too.
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.
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.
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.
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.
A working offline check is five lines.
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)
[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);
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)
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.
From the marketplace, or sideload directly.
Add the Keysat marketplace to your Start9:
https://registry.keysat.xyz
StartOS dashboard → Marketplace → Add → paste the URL above. Keysat will appear; click Install.
If you'd rather not add the marketplace:
keysat_x86_64.s9pk from GitHub releases.One click; Keysat handles the rest.
What buyers see on receipts and the public homepage.
Click "Launch UI" on the Keysat service in StartOS. Paste your admin API key. Create your first product, policy, and discount code from there.
Backed up automatically by StartOS as part of your normal backup routine.
Source-available license; one-time payment in sats; everything ships with you when you migrate Start9 hardware.