Technology Stack

Every language, framework, library, and Cloudflare service the SaaS Starter Kit actually depends on.

Pulled directly from the real package.json files and infra/*.ts — nothing here is aspirational.

Runtime & language

Purpose
BunPackage manager and JS runtime for every package and script
TypeScriptEvery package, strict mode

Frontend

Purpose
Nuxt 4App framework — apps/app, apps/web, apps/login
Vue 3Component layer under Nuxt
Nuxt UI v4Component library (built on Reka UI + Tailwind)
Tailwind CSSStyling, plus the forms, typography, aspect-ratio, container-queries plugins
Pinia (@pinia/nuxt)Client state — notifications store, teams store
VueUse (@vueuse/nuxt)Composable utilities
@nuxt/imageImage optimization
@nuxt/fontsWeb font loading
@nuxt/scriptsThird-party script loading
nuxt-svgoSVG-to-component icons
@nuxtjs/i18nInternationalization
@nuxtjs/seoSEO/meta tags, sitemap, OG images (apps/web only)
@unovis/ts / @unovis/vueThe team dashboard's chart (apps/app only)

API layer

Purpose
tRPC (@trpc/server, @trpc/client, trpc-nuxt)Type-safe API between apps/app's client and server
ZodInput validation for every tRPC procedure

Database

Purpose
PostgreSQLPrimary database — any standard instance (Supabase, RDS, Neon, self-hosted)
Drizzle ORM + Drizzle KitSchema, queries, migrations
postgres (postgres.js)The actual wire-protocol driver, via Hyperdrive

Auth & authorization

Purpose
OpenAuth.jsThe independent auth server (apps/functions/src/auth.ts) — password, code, GitHub, Google providers
nuxt-authorizationTeam-scoped RBAC (Bouncer-style abilities)
otpauthTOTP generation/verification for platform-admin MFA
uqrClient-side QR code rendering for MFA enrollment (zero runtime deps)

Infrastructure — Cloudflare, via SST

Deployed entirely as code with SST (sst 4.14.0) and its Pulumi providers (cloudflare 6.20.0, command 1.0.1, random 4.17.0) — see SST.dev.

Cloudflare serviceUsed for
WorkersEvery deployed app (App, Auth, Web, Emails, Websockets, job/DLQ consumers, Cron)
HyperdrivePostgres connection pooling from Workers
KVAuth credentials (AuthKV), rate-limit counters, small cached values
R2 (via @nuxt-hub/core)Blob storage — profile pictures, team logos
D1The docs site's content database (apps/web's search box) — @nuxt/content requires it on Cloudflare
QueuesAsync job processing, plus a dead-letter queue
Durable ObjectsThe WebSockets server
Cron TriggersScheduled tasks
Custom DomainsEvery Worker's public domain, DNS handled automatically

Payments

Purpose
Stripe (stripe SDK)Checkout, billing portal, webhooks
Paddle (@paddle/paddle-js, @paddle/paddle-node-sdk)Same, alternate provider — both can run in parallel

Email

Purpose
React Email (@react-email/components)Templates (packages/emails/templates)
@nuxfire/emails/mailerProvider-agnostic sender — a vendored fork of AdonisJS Mail, adapted to run without the AdonisJS framework (packages/emails/mailer)
Resend, Mailgun, AWS SES, SparkPost, SMTPSupported providers, one active at a time per config.ts flags

Documentation & content site

Purpose
Nuxt Content v3This documentation, the blog, FAQs, and legal pages — all Markdown
ShikiSyntax highlighting for code blocks

Backend Workers runtime

Purpose
HonoHTTP routing inside apps/functions (the auth issuer)
ofetchHTTP client used server-side
valibotValidation inside apps/functions (lighter than Zod for Worker bundle size)

Dev tooling

Purpose
ESLint + PrettierLinting and formatting, every package
vue-tscType-checking Vue SFCs
@cloudflare/workers-typesTypeScript types for Workers runtime APIs
Drizzle KitMigration generation
Nuxfire Production Kit

Ready to build and launch your SaaS?

Get 100% full source code ownership, zero proprietary wrappers, and architecture engineered for millions of requests on Cloudflare.

© 2026 Nuxfire