Nuxter vs Open SaaS
Nuxter ships organizations, one-command kit updates and failed-payment grace on Cloudflare Workers; Open SaaS is a free, MIT-licensed React kit on Wasp.
Checked opensaas.sh
Feature check
Built in, of 14 rows
- Nuxter: 11 of 14 rows built in, 1 partly.
- Open SaaS: 3 of 14 rows built in, 1 partly.
Counted from the feature check below. A row that Open SaaS’s own site and docs do not mention is not counted. See the rows
01The short version
Which one to pick.
Nuxter is a Nuxt 4 kit for a Vue developer who sells to teams. Plans belong to organizations with roles, invitations and seat limits. When a renewal fails, the customer keeps access for 14 days while they fix the card, a full refund removes the access that payment bought, and each webhook is applied once. Open SaaS's docs generally advise against updating an app you have started; Nuxter's pnpm template:update brings kit updates into yours as one commit you review.
Open SaaS suits a React developer who wants a free, MIT-licensed start.
Pick Nuxter if
- You build with Vue and Nuxt and want the kit written in them.
- You sell to teams and need organizations with roles, invitations and seat limits, with the plan bought by the organization.
- You want failed renewals, refunds, trials and repeated webhooks handled before your first customer pays.
- You plan to keep taking the kit's fixes after you start building, as one commit you review.
- You want to run on Cloudflare Workers with the queue, file storage, mail and database connection already declared.
Open SaaS may suit you better if
- You build in React and Node.js and like Wasp generating the client, server and deployment code from a TypeScript spec.
- You host on Fly.io, Railway or your own Docker server.
- You want to start without paying, or to publish your app's source under an open license.
02Feature check
Feature by feature.
What each kit ships for the things buyers ask about most. A question mark means Open SaaS’s own site and docs do not mention it.
- Built in
- Partly
- Not included
- Not in its docs
03Why Nuxter
Why pick Nuxter over Open SaaS.
What Nuxter ships on day one that Open SaaS’s own pages do not describe.
Organizations that own the plan
Every account gets an organization at signup, and plans, members and seats belong to it. Owners, admins and members hold roles, people join by email invitation, each plan caps the member count, and an audit trail records the changes. A product sold to companies starts with the data model it needs.
Kit updates as one commit
pnpm template:updatebrings everything the kit changed since your last update as one commit you review. A table says which paths are the kit's and which are yours, and the kit's migrations run in their own chain. Fixes keep reaching an app you have already built.Failed renewals keep access
When a renewal charge fails, the customer keeps access for 14 days by default and sees a banner with the date access ends and a button that opens the billing portal. A customer whose card expired keeps working while they fix it, and nobody on your side has to step in.
Sign-in security built in
Passkeys and authenticator codes with ten recovery codes are on by default; you pick email and password or magic links, and add GitHub and Google, in the same config block. Every sign-in route locks for 15 minutes after too many attempts, and Cloudflare Turnstile checks for bots once you set two keys. Your users get two-factor sign-in without you building it.
Refunds, trials and webhooks handled
A full refund or a lost Stripe dispute removes the access that payment bought, so a refunded customer does not keep the plan. A trial set per plan reaches Stripe or Polar at checkout, and a buyer who has subscribed before does not get a second one, so nobody collects trials by cancelling and resubscribing. Every webhook is stored by event id and applied once, so a provider's retry never grants a purchase twice.
One platform, already wired
Nuxter builds into one Cloudflare Worker, and the queue, file storage, cache, mail, rate limiting, AI and database connection are bindings, resources Cloudflare attaches to the Worker, declared in one file. You learn one platform and run everything but the database from one Cloudflare account. Postgres comes from a provider you choose, reached through Hyperdrive, Cloudflare's connection pooler.
Support tools for your staff
From the customers list, staff edit or suspend an account, view the app as that customer without write access, send a reset link, grant a plan or refund a one-time purchase. Most support requests are handled inside the app, and every action lands in the customer's activity log.
Tests and CI in the kit
The kit ships 335 test files: 230 unit, 97 component and 8 Playwright specs. About 50 of those files cover payments. CI runs lint, typecheck, both test suites and a production build on every pull request, so a change to kit code shows you what it broke.
04Where Open SaaS is ahead
Where Open SaaS is ahead.
The trade-offs to weigh before you decide.
Free and MIT licensed
Open SaaS costs nothing. Its MIT license lets you use, modify, publish, distribute and sell the code, names no seat or project limit, and asks only that the copyright and permission notice stay in copies.
Deploys to many hosts
wasp deployputs the database, server and client on Fly.io or Railway in one command, and Wasp generates a Dockerfile for the server so it runs on any host that supports Docker.React and Node.js on Wasp
Open SaaS is a React 19 app on Wasp, which compiles a TypeScript spec into the client, an Express server and the deployment code. Its styling is Tailwind CSS with shadcn/ui components.
A Discord and an issue tracker
Its README names GitHub issues and the Wasp Discord's questions forum as the places to get help.
05Side by side
Every row, side by side.
The same nineteen rows on every comparison, so you can read two pages against each other.
06In detail
Part by part.
Stack and hosting
Nuxter is one Nuxt 4.5 app, written in Vue 3.5 with Nuxt UI 4 and Tailwind CSS 4, all past their 1.0 releases. It is a standard Nuxt app with no compiler of its own, and it builds into a single Cloudflare Worker. The queue, file storage, cache, mail, rate limiting, AI and database connection are bindings, resources Cloudflare attaches to the Worker, declared in wrangler.jsonc. There is one platform to learn, everything except the Postgres host runs from one Cloudflare account, and nothing needs wiring between services.
You create the Cloudflare resources once, with the commands in the deployment guide, and a GitHub workflow deploys main when CI passes.
Open SaaS is a React 19 app on Wasp, a full-stack framework over React, Node.js and Prisma. You describe the app in a TypeScript spec file, main.wasp.ts, and Wasp's compiler outputs the client, an Express server on Node.js and the deployment code. Wasp's site labels the framework Beta, says it is already used in production, and says it will be called production-ready at 1.0.
Open SaaS offers more hosting choice: wasp deploy puts the database, server and client on Fly.io or Railway in one command, as the deploying guide shows, and Wasp generates a Dockerfile for the server so other hosts work too.
Sign-in and accounts
You set up Nuxter's sign-in in one block of starter.config.ts. You pick email and password or a mailed magic link as the primary method, then add passkeys, authenticator-app codes with ten recovery codes, and GitHub and Google. Authenticator codes and passkey sign-in are on by default, and a method you switch off has no route at all, so it leaves no unused endpoint exposed.
Every sign-in, sign-up and reset route is rate limited and locks for 15 minutes after too many attempts, and Cloudflare Turnstile, a bot check, turns on when you set two keys. Users see their signed-in devices and can end any session, delete their account with 30 days to restore it by default, and download a JSON file of what the app holds about them.
Open SaaS's sign-in comes from Wasp. Email and password with verification and password reset is the default, and Google, GitHub and Discord are pre-built: you uncomment them and add API keys, as the authentication guide shows. Wasp limits email sign-up to one request a minute per address. Open SaaS's docs do not mention two-factor authentication, passkeys, magic links, account deletion by the user, or other rate limits.
Organizations and permissions
Nuxter gives every account an organization at signup, and plans, members and seats belong to it, so a customer's whole team works under the plan their company bought. Owners, admins and members hold roles built from named permissions, people join by email invitation, and each plan caps how many members an organization may have. An audit trail records membership, invitation and plan changes.
A route behind a paid feature answers 402 (Payment Required) when the organization's plan does not include it, so the page can offer an upgrade.
Open SaaS stores subscription and payment state on the user, as its user overview says, and has two roles, admin and user, held in an isAdmin field. Its docs do not mention teams, organizations, invitations or seats. Access by plan is a check you write in each server operation, on fields such as subscriptionStatus.
Payments and billing
Both kits ship Stripe, Lemon Squeezy and Polar with the provider's hosted checkout and customer portal. Lemon Squeezy and Polar act as merchant of record, meaning they collect and pay sales tax for you. Nuxter adds Creem and can run several providers at once, so a merchant of record can sit beside Stripe; Open SaaS has you pick one and delete the other two.
Nuxter's payments code handles what happens after the charge:
| When | Nuxter | Open SaaS |
|---|---|---|
| A renewal fails | Access for 14 days by default, a banner and a fix button | Marked past_due with a message on the account page; its docs say you choose how to handle it |
| A payment is refunded | A full refund removes the access that payment bought | Not mentioned in its docs |
| A buyer wants a trial | Trial days per plan on Stripe and Polar, one per buyer | Not documented |
Every webhook is stored by event id and applied once, however often the provider sends it. When a webhook never arrives, the page the buyer returns to asks Stripe or Polar directly and applies the payment, so a lost webhook does not leave a paying customer locked out. A ?coupon=CODE link carries a discount to checkout once Stripe, Polar or Creem confirm the code.
Open SaaS has a credit balance built in: each user has one, new users start with 3 credits, and a one-time plan sells 10 more. Nuxter sells credit packs as one-time plans a customer can buy again, and fires an event your code uses to add the credits. Open SaaS's Stripe checkout turns on automatic tax, which Nuxter switches on with one environment variable.
Database, jobs and files
Both kits use Postgres. Nuxter queries it through Drizzle, and the Worker reaches it through Hyperdrive, Cloudflare's connection pooler; the database itself is hosted by a provider you choose, such as Neon or Supabase. Locally, pnpm dev starts PGlite, Postgres compiled to WebAssembly, so a fresh clone runs with no Docker and no database server.
Open SaaS uses Prisma. Its local database starts with wasp start db, which needs Docker running, and you create the first migration after generating the project.
Nuxter's background jobs are typed files that run on Cloudflare Queues and retry with growing delays. A job that fails its last retry moves to a dead letter queue, a holding queue where the Worker logs it and passes it to any error tracker you set up, so a job that keeps failing does not vanish unnoticed. Six cleanup tasks run on a daily cron. Open SaaS gets jobs and cron from Wasp's pg-boss executor, a queue kept in the app's Postgres that runs inside the web server, and ships one hourly job for its admin figures.
Nuxter stores files in Cloudflare R2 under per-purpose rules for type, size and access, reads each upload's format from its first bytes and ignores the type the browser claimed, and ships avatar and organization photo uploads with a ready component. Open SaaS's upload page sends files straight to AWS S3 through presigned URLs, signed upload links that expire after an hour.
Email and notifications
Nuxter sends through Cloudflare Email Sending or Resend, tries the next provider when one fails, and queues the mail for retry when every provider is down, so a short outage delays a password reset instead of losing it. Its nine account mails come from Vue templates styled with Tailwind and compiled by Maizzle into HTML that Outlook renders.
Open SaaS's docs list SendGrid, Mailgun or SMTP, and Wasp also supports Resend. Its verification, password reset and cancellation emails are HTML strings in TypeScript files, and its docs do not mention templating, queueing or retry.
Nuxter's dashboard also has a notification bell and drawer, fed by a one-line notify() call on the server, with payment notifications already wired. Open SaaS's docs do not mention in-app notifications.
AI
Nuxter ships a typed server module for the calls a product makes: text, image, speech, transcription, embeddings and video, on Cloudflare Workers AI through the Worker's binding, with no API key. Each model is named by its role in config and can be swapped per deploy with an environment variable. Another provider is one adapter file.
Open SaaS ships a working example: an AI day scheduler at /demo-app that sends your tasks and hours to OpenAI's chat completions with function calling and gets back a structured schedule. Each generation costs one credit for a user without a subscription, as the source shows.
Content, languages and marketing pages
Nuxter ships in English and Serbian: Serbian routes under /sr/, a language switcher, and emails, legal pages and blog posts in the reader's language, with a test that holds every language file to the same keys. The languages guide walks through adding a third. Open SaaS's docs do not mention internationalization.
Nuxter's blog is part of the app, with tags, drafts and RSS, and a GitHub Actions workflow drafts a post with an AI model and opens a pull request for you to review. The pricing page builds its cards from the plans in config, with a monthly and yearly toggle, so there is no pricing page to edit by hand. Sitemaps, hreflang tags and a generated share image for the landing, pricing, blog and legal pages come configured.
Open SaaS's landing page has a nav bar, features, testimonials and FAQ from one content file, with meta tags, JSON-LD structured data and prerendered landing and pricing pages, as its guided tour lists. Its blog and docs site is a separate Astro Starlight project that deploys on its own.
Admin and operations
From Nuxter's customers list, staff edit an account, suspend it with a reason the user sees at sign-in, view the app as that user for 30 minutes without write access, and send reset or verification mail. That view shows what they see without touching their data. Plan grants and one-time refunds sit on the same page.
Nuxter sends a Content-Security-Policy and hardening headers on every response and refuses cross-site writes to its API. /api/health answers uptime monitors, and server errors can go to Sentry or Better Stack without an SDK.
Open SaaS's /admin analytics page shows total revenue, daily revenue for the past week, paying users and traffic, recomputed hourly; traffic needs Plausible or Google Analytics. Its users page searches and filters users and can make one an admin. The admin docs do not mention impersonation, suspension or refunds, and Open SaaS's docs do not mention error tracking or a health check. Wasp's server sets Helmet security headers.
Tests
Nuxter ships 230 unit test files, run against a real Postgres engine, 97 component test files and 8 Playwright specs. About 50 of those files cover payments. CI runs lint, typecheck, both Vitest suites and a production build on every pull request.
Open SaaS's template ships four Playwright spec files in e2e-tests, and the tests guide says it comes without a GitHub workflow and shows where to copy one from its repository.
Updates
Nuxter keeps the kit as a git remote. pnpm template:update brings everything the kit changed since your last update as one commit on a branch, which you review as a pull request. A table in the kit says which paths are the kit's and which are yours, and the kit's migrations run in their own chain, so kit fixes keep reaching an app already in production.
Open SaaS's update guide generally advises against merging template changes once you have started building, because your code diverges and template changes may not fit it or your version of Wasp. For those who update anyway, the guide recommends a manual merge: fit the latest commits into your code, or copy your logic into a fresh project.
Docs and AI coding agents
Nuxter's documentation is public and also served as llms.txt and llms-full.txt for AI tools. The kit ships AGENTS.md, a 330-line brief on setup, code standards and known traps, with pointer files so Claude Code, Cursor and GitHub Copilot read the same instructions.
Open SaaS's template has AGENTS.md with a CLAUDE.md pointer, which sends the agent to the Open SaaS docs, and three agent skills (instruction files an agent loads for a task) for getting started, a guided tour and installing Wasp's agent plugin. It also has a placeholder llms.txt for your own app. Its maker runs Open Vibe, a free course for building a SaaS with a coding agent, whose second phase builds on this template.
Price and license
| Nuxter | Open SaaS | |
|---|---|---|
| Price | $249 for one seat, $649 for five, one-time | Free |
| License | Commercial, per seat | MIT |
| Your own products | Any number | No limit named |
| Client work | One license per client | No limit named |
You pay for Nuxter once and get every update, and the license never expires. One license covers every product you build and run yourself, and the customers who sign up to them need no license. The two licenses differ in seats and price, as the pricing page shows.
Open SaaS is free: its docs call the template completely free to use and distribute, and the prices on its /pricing page are the demo app's sample plans. Its MIT license asks that the copyright and permission notice stay in copies.
Support and community
Nuxter's 25 docs pages are public, and llms-full.txt holds them together with 24 design notes on why each part works the way it does, so you can search them yourself or with an AI tool before you buy. For anything they leave open, you email Devilos LLC, the company that makes and sells Nuxter, about the kit, a purchase or a license.
Open SaaS's README names two places to get help, GitHub issues and the questions forum of the Wasp Discord, and says the team tries to respond quickly. Wasp's site says the whole Wasp team is on Discord every day.
07Sources
Where this comes from.
Every claim about Open SaaS was read from its own pages on . The main ones are below, and the rest are linked where they are used. Nuxter’s side comes from its own docs and code.
- Open SaaS home pageopensaas.sh
- Open SaaS demo pricing pageopensaas.sh/
pricing - Open SaaS docs: introductiondocs.opensaas.sh/
- Open SaaS repository, with its README, releases and template sourcegithub.com/
wasp-lang/ open-saas - Open SaaS licensegithub.com/
wasp-lang/ open-saas/ blob/ main/ LICENSE - Open SaaS docs: how (not) to update your appdocs.opensaas.sh/
guides/ updating-opensaas/ - Open SaaS docs: user overviewdocs.opensaas.sh/
general/ user-overview/ - Open SaaS docs: authenticationdocs.opensaas.sh/
guides/ authentication/ - Open SaaS docs: deployingdocs.opensaas.sh/
guides/ deploying/ - Open SaaS docs, every page in one text filedocs.opensaas.sh/
llms-full.txt - Wasp home pagewasp.sh
- Wasp docs, every page in one text filewasp.sh/
llms-full.txt
Open SaaS is a trademark of its owner, and Nuxter is not affiliated with it. Found something out of date? Tell us.
Docs
Read the docs before you decide.
Every page of the docs is public, so you can see how each part works before you buy. From $249, one-time.