Changelog
Every change to Krexel.
Features, fixes, breaking changes, deprecations. Newest first.
v0.3.1 — Launch ready
2026-07-08
Released: 2026-07-08
This is the first version of Krexel that we consider production-ready for paying customers. Every feature documented on the website now works end-to-end.
What works
- End-to-end deploys — signup, deploy, R2 file storage, Cloudflare Pages build, custom domain, SSL, all verified
- Patch deploys — your AI can edit the live site in 8 seconds via the MCP server
- Rollback — one command to revert to any previous deploy
- Custom domains — GoDaddy, Cloudflare, Namecheap, and any other DNS provider
- Stripe billing — live mode, $10/$25/$50 tiers, webhook handling tested
- API — every endpoint documented, 170 tests pass
- Marketing site — full SEO foundation (sitemap, JSON-LD, OG images)
Added
- Stripe live mode — real payments wired through Krexel's own Stripe account
- Patch deploys — single-file edits to the live site without full rebuild
- R2 file tree storage — every deploy's file tree is stored in Cloudflare R2, enabling patch/rollback flows
- Custom domain support — connect any domain via DNS records
- Self-healing auth — legacy API keys auto-backfill the new token-sha256 index on first use
- /readyz deep probe — opt-in KV round-trip check (use
?deep=trueto verify writes) - SEO foundation on the marketing site — sitemap, robots, JSON-LD structured data, PNG OG image
- Auto-deploy from GitHub — push to
maindeploys to Vercel automatically - Eight reference docs — getting-started, install-cli, install-mcp, connect-custom-domain, dns-godaddy, dns-cloudflare, dns-namecheap, billing-and-plans
Changed
- /readyz no longer probes KV by default — saves 3 KV ops per call; use
?deep=truefor the round-trip check - Auth flow uses sha256 token index — O(1) lookup instead of O(n) scan
Fixed
- R2 was wired read-only — the deploy route now writes the file tree to R2 on every deploy
- Pages manifest field rejected with 8000096 — switched from Blob to string in the multipart form
- OG image was SVG, invisible on social — replaced with 1200×630 PNG
- /sitemap.xml returned 404 — added Next.js dynamic sitemap
- /robots.txt was missing — added declarative robots config
- No structured data on the homepage — added JSON-LD for SoftwareApplication, Organization, WebSite, FAQPage
Security
- Secrets backed up to
~/.hermes/credentials/before everywrangler secret put - Tokens never logged — even in verbose mode
- MCP server scopes per-tool — deploy tool can't read keys, patch tool can't deploy
Known limitations
- No team seats yet — Studio tier pricing is published but team-seat feature isn't wired up. Pricing page has been updated to reflect this.
- KV free tier — daily limit resets at 00:00 UTC. We'll move to paid tier when we exceed it consistently.
- No in-dashboard onboarding tour — first-run experience uses the existing progress checklist. Improved tour coming in v0.4.
- Test customers + Pages projects in KV — cosmetic, not affecting production. Will purge post-quota-reset.
Next: v0.4
- Team seats (Studio tier)
- Onboarding tour for first-time users
- Deploy progress bar (replaces static status pill)
- Deploy success celebration modal
- /blog/ and /changelog/ with weekly content
- Logo redesign (commissioned)
Thanks to everyone who tested, filed issues, and pushed us to ship. Let's go.
R2 file tree storage lands
2026-07-05
Released: 2026-07-05
Every deploy's file tree is now stored in Cloudflare R2. This unlocks patch deploys, rollback, and the future of in-browser file editing.
Added
- R2BucketAdapter — bridges CF's R2Bucket to our internal R2Like interface
- saveTree(deployId, files) — stores a file tree (Map<path, Uint8Array>) to R2
- getTree(deployId) — reads back the file tree as a list of
{path, size, sha256}entries - getFile(deployId, path) — fetches a single file's bytes
- Retention sweep endpoint —
POST /api/v1/cron/retentiondeletes R2 trees older than the configured TTL (default 90 days)
Why
Patch deploys need to read the current file tree before generating a diff. Rollback needs to ship an old tree as a new deploy. Both of those require the file tree to be stored somewhere queryable.
R2 was the right choice because:
- Cheap ($0.015/GB/month)
- Globally distributed reads (CDN-fast)
- Pairs naturally with Cloudflare Pages (where the deploys actually serve)
- Already integrated with our other Cloudflare services
Changed
- Deploy record schema — adds optional
files_keyfield referencing the R2 tree - Worker init — constructs
R2BucketAdapterfromc.env.KREXEL_R2and passes tocreateApp
Fixed
- /api/v1/deploys/:id/files — was returning 404 files_not_available for all deploys. Now returns the actual file tree.
Migration
No user-facing migration. Existing deploys (pre-R2-storage) return files_not_available because their trees weren't stored. New deploys store automatically.
What this unlocks
- Patch deploys — your AI reads the current tree, generates a patch, ships it (8 seconds)
- Rollback — re-ship any past deploy's tree as a new deploy
- Future: in-browser editing —
/dashboard/deploys/:idwill let you click any file and edit it
Performance
- R2 reads: typically <50ms globally (CF network)
- Tree size: ~150 bytes metadata per file + actual file bytes
- For a typical 50-file site: ~7KB metadata + files
Cost
At 100 customers × 50 deploys/month × 7KB metadata = ~35MB R2 metadata storage = ~$0.001/month.
File content storage scales with actual deploy size. Average ~500KB per deploy, so 2.5GB of file content for that workload = ~$0.04/month.
R2 is cheap. Don't worry about it.
First internal alpha
2026-06-20
Released: 2026-06-20
The first end-to-end deploy works. Three teammates used it to ship their personal sites. Lots of rough edges.
What works (in alpha)
- Sign up with email → get API key
krexel deployfrom CLI uploads folder to Cloudflare Pages- Custom domain via DNS records (manual)
- Live URL on
yourname.krexel.appsubdomain - Dashboard with deploy history (basic)
- Stripe test mode checkout
What's rough
- Every deploy does a full rebuild (no patch deploys yet)
- No rollback
- No R2 file storage (so no file tree history)
- Dashboard has minimal styling
- No team features
- Auth uses a naive O(n) key scan
- Documentation is a single README
Why we're shipping it now
We needed real users hitting real edge cases before building the rest. The alpha taught us:
- Most users don't know what an MCP server is. Need a "what is this" explainer.
- Patch deploys are the killer feature. Every user said "I'd use this 10x more if I didn't have to wait for rebuilds."
- Custom domain DNS is confusing. Three users got stuck on Cloudflare's proxy toggle.
- Stripe checkout is the conversion bottleneck. Most users abandon at the card form. Need to optimize.
These insights shaped the v0.4 roadmap.
What changed since alpha
This entry is retrospective — we're writing it now (2026-07-08) to fill in the changelog from the start. Everything in this entry shipped between 2026-06-15 and 2026-06-20 but wasn't tracked in a public changelog at the time.
Future versions get their changelog entries written as they ship.