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=true to verify writes)
  • SEO foundation on the marketing site — sitemap, robots, JSON-LD structured data, PNG OG image
  • Auto-deploy from GitHub — push to main deploys 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=true for 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 every wrangler 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 endpointPOST /api/v1/cron/retention deletes 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_key field referencing the R2 tree
  • Worker init — constructs R2BucketAdapter from c.env.KREXEL_R2 and passes to createApp

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/:id will 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 deploy from CLI uploads folder to Cloudflare Pages
  • Custom domain via DNS records (manual)
  • Live URL on yourname.krexel.app subdomain
  • 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.