Everything you need
after the code works.
License keys, auto-updates, and app distribution. Without writing or maintaining a line of code.
The part nobody talks about
Building the app is the fun part. Launchday handles everything that comes after.
Ed25519-signed license keys
Cryptographically signed license payloads verified against your app's public key. Each product gets its own Ed25519 key pair, stored encrypted in the database.
- ✓ Device binding with configurable seat limits
- ✓ Expiry and status embedded in signed payload
- ✓ Revoke anytime via dashboard or API
Sparkle appcast for macOS auto-updates
Upload a release and Launchday generates a Sparkle-compatible appcast.xml automatically. Point Sparkle at your namespace URL and auto-updates just work.
- ✓ S3-compatible or local storage backends
- ✓ Yank bad releases with one click
- ✓ Per-platform release tracks
CLI-first release workflow
The launchday CLI drops into your existing build pipeline. Upload artifacts, list releases, yank versions, and run a health check. All from the terminal.
- ✓
launchday upload,releases list,doctor - ✓ Config via
launchday.yamlin your project - ✓ Works with GitHub Actions and CI/CD
Waitlist and beta management
Collect beta signups with a hosted waitlist, then invite users in batches. Send license keys via email with a single API call. Build your launch audience before day one.
- ✓ Hosted waitlist signup page
- ✓ Batch invite with automated email delivery
- ✓ Per-product waitlist with invite tokens
Up and running in minutes
Three steps from sign-up to shipping signed licenses and auto-updates.
Create your product
Register your app in the dashboard. Launchday generates a unique Ed25519 key pair. Your public key goes into your client app.
Configure your platform
Add your platforms (macOS, Windows, iOS, and more), set a namespace for each, and wire up storage and email delivery.
Integrate in your app
Call the validation endpoint at launch, verify the Ed25519 signature, and you're done. No SDK required — just a few lines of code in any language.
Integrate in minutes,
no SDK required.
Launchday returns a signed JSON payload your app verifies using any Ed25519 library. A few lines of code is all it takes.
- ◆ Ed25519 signature verified with CryptoKit
- ◆ Expiry date and activation status embedded in the payload
- ◆ Device-bound: one key per seat, not shareable
// Verify a Launchday signed payload
func verifyPayload(
_ response: ValidationResponse,
publicKeyHex: String
) -> Bool {
guard
let pubKeyData = Data(hexString: publicKeyHex),
let pubKey = try? Curve25519.Signing
.PublicKey(rawRepresentation: pubKeyData),
let sigData = Data(hexString: response.signature),
let payloadData = try? JSONEncoder()
.encode(response.payload)
else { return false }
guard pubKey.isValidSignature(
sigData, for: payloadData
) else { return false }
return
response.payload.expiresAt > Date() &&
response.payload.licenseStatus == "active"
}
Platform support
Coming soon
The code works.
Now ship it.
Launchday is invite-only right now. Join the waitlist and we'll reach out when a spot opens up.