|
| 1 | +# Vercel vs. Catalyst Native Hosting — Feature Comparison Matrix |
| 2 | + |
| 3 | +> Tracking issue: [LTRAC-1076](https://linear.app/commerce/issue/LTRAC-1076/vercel-vs-native-hosting-feature-comparison-matrix) · Project: Catalyst Native Hosting (GA milestone) |
| 4 | +
|
| 5 | +**Native Hosting** (branded **"Commerce Hosting"**) deploys Catalyst storefronts to |
| 6 | +Commerce's **Cloudflare Workers for Platforms** infrastructure through the **Ignition** |
| 7 | +deploy service. Builds are produced with **OpenNext**, and the entire lifecycle is driven by |
| 8 | +the `catalyst` **CLI** — there is no control-panel deploy flow. The CLI ships as a dependency |
| 9 | +of a scaffolded project and is run through the package manager (e.g. `pnpm catalyst deploy`). |
| 10 | + |
| 11 | +**Vercel** is the third-party platform most Catalyst developers use today (Next.js's first-party host). |
| 12 | + |
| 13 | +This matrix reflects the state of Native Hosting as it approaches GA. Row-level references point |
| 14 | +at the Linear issues that track each capability, with status as of this writing. |
| 15 | + |
| 16 | +**Legend:** ✅ Supported · 🟡 Partial / in progress · 🔜 Planned / spike · ❌ Not supported · ➖ N/A |
| 17 | + |
| 18 | +--- |
| 19 | + |
| 20 | +## 1. Platform & architecture |
| 21 | + |
| 22 | +| Feature | Vercel | Native Hosting | |
| 23 | +| --- | --- | --- | |
| 24 | +| Runtime | Vercel Edge / Node (Fluid compute) | Cloudflare Workers (Workers for Platforms / Dispatch Namespace) | |
| 25 | +| Next.js build adapter | First-party Next.js support | OpenNext (spike to migrate to Cloudflare `vinext`, targeted ~GA — LTRAC-1108) | |
| 26 | +| First-party to BigCommerce | ❌ Third-party vendor | ✅ In-house, part of the Commerce ecosystem | |
| 27 | +| KV / object storage | Vercel KV, Blob | ✅ Cloudflare KV + R2 provisioned by the pipeline | |
| 28 | +| Global edge network | ✅ | ✅ (Cloudflare) | |
| 29 | +| Supported Node versions | Broad | v20 / v22 / v24; pnpm (recommended), npm, or yarn | |
| 30 | + |
| 31 | +## 2. Deployment workflow |
| 32 | + |
| 33 | +| Feature | Vercel | Native Hosting | |
| 34 | +| --- | --- | --- | |
| 35 | +| Deploy trigger | Git push (auto CI/CD) + CLI | ✅ CLI (`catalyst deploy`) | |
| 36 | +| Scaffold new project | `create-next-app` style | ✅ `pnpm create @bigcommerce/catalyst@latest --hosting commerce` | |
| 37 | +| Link project | `vercel link` | ✅ `catalyst project link` / `catalyst channel link` | |
| 38 | +| Local dev server | `vercel dev` | ✅ `pnpm dev` (Next.js dev — not a `catalyst` subcommand) | |
| 39 | +| Local production preview | ➖ | ✅ `catalyst start` (closer to prod than `pnpm dev`) | |
| 40 | +| Build without deploying | ✅ | ✅ `catalyst build`, or `catalyst deploy --dry-run` / `--prebuilt` | |
| 41 | +| Git-integrated preview deployments | ✅ Automatic per-branch/PR URLs | 🔜 Spike for GitHub Actions deploys (LTRAC-969, GA cycle) | |
| 42 | +| Production promotion | ✅ | ✅ (deploy = production) | |
| 43 | +| CI/CD deploys | ✅ | ✅ Set `CATALYST_*` env vars or pass flags; no interactive login needed | |
| 44 | +| Deployment-not-found page | ✅ | 🟡 Not yet built (LTRAC-968) | |
| 45 | +| Framework upgrade tooling | Manual | ✅ `catalyst upgrade` (3-way merge; `--dry-run` to preview) | |
| 46 | +| Auth | Vercel login | ✅ `catalyst auth login/whoami/logout` (browser OAuth device-code) | |
| 47 | +| Diagnostics for bug reports | ➖ | ✅ `catalyst debug`; correlation IDs printed on error | |
| 48 | + |
| 49 | +## 3. Custom domains |
| 50 | + |
| 51 | +| Feature | Vercel | Native Hosting | |
| 52 | +| --- | --- | --- | |
| 53 | +| Auto-generated hostname | `*.vercel.app` | ✅ `<project>.catalyst-sandbox.store` (permanent fallback/preview URL) | |
| 54 | +| Custom / vanity domains | ✅ | ✅ Done (LTRAC-399); `catalyst domains add/list/status/remove` | |
| 55 | +| Subdomain vs. apex setup | ✅ | ✅ Subdomain → CNAME to worker URL; apex → A record to store IP | |
| 56 | +| DNS verification (CNAME/TXT) | ✅ | ✅ Modeled on Vercel's TXT-verification flow (LTRAC-854, LTRAC-472) | |
| 57 | +| Domain claim / transfer between projects | ✅ | ✅ `catalyst domains claim` / `transfer` | |
| 58 | +| Automatic SSL/TLS | ✅ | ✅ (single-level); ⚠️ two-level subdomains can't auto-provision Cloudflare SSL | |
| 59 | +| Merchant's own Cloudflare (Orange-to-Orange) | ➖ | 🔜 Enterprise requirement, spike (LTRAC-448, GA cycle) | |
| 60 | + |
| 61 | +> Note: `catalyst domains add --wait` polls for verification but times out after ~5 min; DNS |
| 62 | +> propagation can take longer, so re-check with `catalyst domains status`. |
| 63 | +
|
| 64 | +## 4. Caching & performance |
| 65 | + |
| 66 | +| Feature | Vercel | Native Hosting | |
| 67 | +| --- | --- | --- | |
| 68 | +| Route / edge caching | ✅ Vercel Edge Cache | 🟡 Catalyst `with-routes` KV adapter available; auto-config for NH still pending (LTRAC-1019, GA) | |
| 69 | +| ISR / on-demand revalidation | ✅ | 🟡 Via OpenNext (`'use cache'` / `cacheLife`); not tracked as a distinct NH feature | |
| 70 | +| Image optimization | ✅ Built-in | ➖ Not in NH scope (images served via BigCommerce CDN) | |
| 71 | +| Performance / load-test story | Published benchmarks | 🟡 Being documented with load testing (LTRAC-765, LTRAC-1103) | |
| 72 | + |
| 73 | +## 5. Logs & observability |
| 74 | + |
| 75 | +| Feature | Vercel | Native Hosting | |
| 76 | +| --- | --- | --- | |
| 77 | +| Real-time log tailing | ✅ | ✅ `catalyst logs tail` (verified working; `--format request` for HTTP access logs) | |
| 78 | +| Historical / persisted log querying | ✅ | ✅ `catalyst logs query` — up to a **7-day** window; rich filters (level, status, method, URL) | |
| 79 | +| Log pagination | ✅ | 🟡 Blocked by a confirmed Cloudflare endpoint bug (LTRAC-966, GA); `--limit` max 500 today | |
| 80 | +| Metrics / usage dashboards | ✅ Analytics + Speed Insights | 🔜 Explored for GA — no dashboard yet (LTRAC-1029) | |
| 81 | +| OpenTelemetry | ✅ | 🔜 Edge-compatible OTel spike (LTRAC-821) | |
| 82 | + |
| 83 | +## 6. Environment variables & secrets |
| 84 | + |
| 85 | +| Feature | Vercel | Native Hosting | |
| 86 | +| --- | --- | --- | |
| 87 | +| CLI management | `vercel env` | ✅ `catalyst env add/remove/list` (values masked on list) | |
| 88 | +| Where vars live | Server-managed per environment | 🟡 Client-side only — stored in local `.bigcommerce/project.json`, sent as secrets on every deploy | |
| 89 | +| One-off / CI secrets | ✅ | ✅ `catalyst deploy --secret KEY=VALUE`, or `CATALYST_*` env vars in CI | |
| 90 | +| Centralized / backend-persisted secrets | ✅ | 🔜 Post-GA spike, "nice to have" (LTRAC-975) — today, deploying from another machine/CI needs the vars re-supplied | |
| 91 | +| `.env` file loading | ✅ | 🟡 `.env.local` auto-read (also `--env-path`); behavior being reconsidered (LTRAC-1091) | |
| 92 | + |
| 93 | +## 7. Rollbacks, history & previews |
| 94 | + |
| 95 | +| Feature | Vercel | Native Hosting | |
| 96 | +| --- | --- | --- | |
| 97 | +| Instant rollback to prior deploy | ✅ | 🔜 Post-GA, "nice to have" (LTRAC-970) — interim path is git revert + re-deploy | |
| 98 | +| Deployment history / activity feed | ✅ | 🔜 Not built (LTRAC-972, LTRAC-978) | |
| 99 | +| Per-branch preview URLs | ✅ | 🔜 Spike only (LTRAC-969) | |
| 100 | +| Deployment versioning | ✅ | 🟡 Cloudflare Workers versioning under the hood; version-tracking field (LTRAC-466) | |
| 101 | + |
| 102 | +## 8. Storefront-specific (Catalyst / BigCommerce) |
| 103 | + |
| 104 | +| Feature | Vercel | Native Hosting | |
| 105 | +| --- | --- | --- | |
| 106 | +| Geolocation headers | ✅ Vercel geo headers | ✅ Done — Cloudflare visitor-location transform → canonical `cf-*` headers (LTRAC-478) | |
| 107 | +| Channel site-URL assignment | Manual | ✅ `catalyst channel update --hostname` / `catalyst deploy --update-site-url` | |
| 108 | +| Configurable checkout URL | Manual | 🟡 Still redirects to old Vercel-hosted checkout; config in progress (LTRAC-447, GA — blocked by 2-level subdomain SSL) | |
| 109 | +| Multiple storefront channels | ➖ | ✅ `catalyst channel create` (LTRAC-976) | |
| 110 | + |
| 111 | +## 9. Migration from Vercel |
| 112 | + |
| 113 | +| Consideration | Detail | |
| 114 | +| --- | --- | |
| 115 | +| Support scope | Native hosting product only; **migration complexity is the developer's responsibility** (per project brief) | |
| 116 | +| `instrumentation.ts` + `@vercel/otel` | ⚠️ Custom server hooks may be incompatible with the managed runtime; setup offers to remove `instrumentation.ts` (interactive only — silently skipped in CI, so remove/gate it yourself) | |
| 117 | +| Vercel-parity blockers at project start | Geo headers ✅ resolved; checkout URL 🟡 in progress (LTRAC-478 / LTRAC-447) | |
| 118 | + |
| 119 | +## 10. Pricing, limits & support |
| 120 | + |
| 121 | +| Feature | Vercel | Native Hosting | |
| 122 | +| --- | --- | --- | |
| 123 | +| Billing model | Vercel plans / usage-based, separate vendor + invoice | Bundled with BigCommerce; pricing/packaging TBD at GA (LTRAC-1102) | |
| 124 | +| Usage limits | Plan-tiered hard limits | Soft-limit program w/ thresholds + playbook (LTRAC-1101, LTRAC-1156) | |
| 125 | +| Support | Vercel support tiers | White-glove (alpha) → docs/community-first (beta) → GA TBD | |
| 126 | +| WAF / DDoS | ✅ Vercel Firewall | ✅ Inherited from Cloudflare (not surfaced as a configurable NH feature) | |
| 127 | + |
| 128 | +--- |
| 129 | + |
| 130 | +## Summary — where Native Hosting stands vs. Vercel |
| 131 | + |
| 132 | +**At or near parity (shipped):** CLI deploy workflow, custom/vanity domains + DNS verification + |
| 133 | +claim/transfer, automatic SSL, real-time log tailing and 7-day historical log querying, geo headers, |
| 134 | +channel site-URL assignment, multi-channel creation, framework upgrade tooling, and first-party |
| 135 | +BigCommerce integration (something Vercel can't match). |
| 136 | + |
| 137 | +**In progress toward GA:** routing-KV auto-configuration, configurable checkout URL, log-query |
| 138 | +pagination, metrics/OTel dashboards, O2O custom domains, deployment-not-found page. |
| 139 | + |
| 140 | +**Deferred to Post-GA ("nice to have"):** instant rollback, centralized/backend-persisted env vars, |
| 141 | +deployment history/activity feed, Git-based preview deployments. |
| 142 | + |
| 143 | +**Structural differences (not necessarily gaps):** CLI-only (no control-panel deploy or Git-push |
| 144 | +CI/CD trigger), env vars are client-side today, bundled pricing with soft limits vs. Vercel's plan |
| 145 | +tiers, and migration-from-Vercel complexity being the developer's responsibility. |
| 146 | + |
| 147 | +**Native Hosting's advantages:** single vendor/invoice with BigCommerce, no third-party relationship, |
| 148 | +purpose-built for Catalyst, lower total cost of ownership (the SLG sales pitch), and Cloudflare's edge |
| 149 | +with inherited WAF/DDoS protection. |
| 150 | + |
| 151 | +--- |
| 152 | + |
| 153 | +_Not represented as tracked Native Hosting features (confirm before treating as committed): image |
| 154 | +optimization, ISR, WAF config, web analytics, and cron jobs — these reflect inherited |
| 155 | +Cloudflare/OpenNext behavior rather than product features._ |
| 156 | + |
| 157 | +_Sources: Catalyst Native Hosting Linear project (verified against individual issues LTRAC-399, 447, |
| 158 | +448, 478, 966, 969, 970, 975, 1019, 1029, 1093), the Native Hosting Beta Onboarding doc, the CLI source |
| 159 | +in `packages/catalyst/src/cli/commands/`, and the project brief._ |
0 commit comments