Product Updates & Version Foundation
LaunchKit Pro includes a version and update foundation so buyers can show installed version, latest release, changelog notes, and future secure download integration — without exposing private ZIP files in the demo.
Canonical docs URLs:
- Product Updates (this page)
- Changelog / release notes
- Legacy alias: /updates/changelog
Overview
| Topic | Default behavior |
|---|---|
| Release catalog | Static backend catalog (releases.catalog.ts) — no database migration required |
| Installed version | LAUNCHKIT_VERSION env var (default 1.2.0) |
| Update check | UPDATE_CHECK_ENABLED=true compares installed vs latest catalog version |
| Secure downloads | Disabled — downloadAvailable: false on all catalog entries |
| License gating | Optional — only when LICENSE_ENFORCEMENT_ENABLED=true |
| App access | Never blocked by missing updates or licenses (foundation only) |
Buyer-friendly wording: Version and update foundation included — release notes, update status, and secure download integration placeholders.
Do not claim automatic marketplace updates or public demo ZIP downloads are fully integrated.
Environment variables
Add to backend .env (see .env.example):
LAUNCHKIT_VERSION=1.2.0
UPDATE_CHANNEL=stable
UPDATE_CHECK_ENABLED=true
UPDATE_PROVIDER=MOCK
UPDATE_SUPPORT_EMAIL=support@launchkitlabs.com| Variable | Purpose |
|---|---|
LAUNCHKIT_VERSION | Installed product version shown in API + dashboard |
UPDATE_CHANNEL | Release channel label (default stable) |
UPDATE_CHECK_ENABLED | When false, status messaging reflects disabled update checks |
UPDATE_PROVIDER | MOCK today; extend for Payhip, Gumroad, Lemon Squeezy, S3, R2, or private storage |
UPDATE_SUPPORT_EMAIL | Support contact on buyer updates page |
API endpoints (authenticated)
| Method | Path | Description |
|---|---|---|
GET | /updates/status | Installed vs latest version, update availability, license/update access |
GET | /updates/releases | All stable releases, newest first |
GET | /updates/releases/latest | Latest stable release (static route — registered before :version) |
GET | /updates/releases/:version | One release or friendly 404 |
GET | /updates/releases/:version/download | Placeholder — returns 503 with demo message |
Admin read-only catalog (platform admin):
| Method | Path | Description |
|---|---|---|
GET | /admin/releases | Same catalog for admin review |
GET | /admin/releases/latest | Latest stable release |
Dashboard UI
| Page | Path | Purpose |
|---|---|---|
| Product Updates | /dashboard/updates | Version status, latest release, changelog history, upgrade guidance |
| Settings → About | /dashboard/settings | Small LaunchKit Pro vX.Y.Z label + links |
| Sidebar footer | Dashboard layout | Subtle installed version label |
Admin (optional read-only):
| Page | Path |
|---|---|
| Product Releases | /admin/releases |
Release catalog (v1)
Static entries included:
- 1.2.0 — Editions, license foundation, admin license management, updates foundation
- 1.1.0 — AI provider integration foundation
- 1.0.0 — Initial release foundation
Each release includes version, title, date, summary, highlights, fixes, breaking changes, upgrade notes, optional docs URL, and download placeholders.
Secure downloads (intentionally disabled)
The demo does not serve private package ZIP files publicly.
- Catalog entries set
downloadAvailable: false - Download endpoint returns: "Secure downloads are not enabled in this demo."
- Buyer UI shows a disabled Secure download not enabled in demo action
Connect your own flow later:
- Marketplace delivery (Payhip, Gumroad, Lemon Squeezy)
- Signed URLs from S3, R2, Cloudinary, or private storage
- License-gated download tokens when enforcement is enabled
License + update access
When LICENSE_ENFORCEMENT_ENABLED=false (default):
- Update page shows optional foundation messaging
- Active license still displays update access active
When enforcement is enabled later:
- Status can show license required if no active license
- Active license shows update access active
See License Activation for key activation flows.
Customization for buyers
- Bump
LAUNCHKIT_VERSIONafter each buyer deployment. - Edit
releases.catalog.tsor replace with DB/marketplace sync. - Set
UPDATE_PROVIDERand implement provider adapter for real download URLs. - Enable signed download endpoint behind license checks — keep disabled until storage is configured.
- Link docs/changelog URLs per release (
docsUrlfield).
Manual test checklist
- Sign in → open
/dashboard/updates - Confirm installed + latest version visible
- Confirm release history lists v1.2.0, v1.1.0, v1.0.0
- Confirm download button is disabled / informational only
/dashboard/license, billing, AI, and admin pages still workGET /updates/releases/bad-version→ friendly 404GET /updates/releases/1.2.0/download→ 503 demo message- Admin →
/admin/releasesshows read-only catalog
curl examples
Replace TOKEN with a valid JWT:
curl -s -H "Authorization: Bearer TOKEN" http://localhost:4000/updates/status | jq
curl -s -H "Authorization: Bearer TOKEN" http://localhost:4000/updates/releases/latest | jq
curl -s -H "Authorization: Bearer TOKEN" http://localhost:4000/updates/releases/1.2.0 | jq
curl -s -o /dev/null -w "%{http_code}\n" -H "Authorization: Bearer TOKEN" \
http://localhost:4000/updates/releases/9.9.9
curl -s -H "Authorization: Bearer TOKEN" \
http://localhost:4000/updates/releases/1.2.0/downloadAfter backend build, optional catalog verification:
npm run build
node scripts/verify-updates.mjs