ShipFast alternatives with multi-tenancy, RBAC and tests

An honest map of the ShipFast alternatives worth evaluating — free and paid — and a close look at the three capabilities people actually leave for: org-scoped multi-tenancy, real RBAC, and a test suite gated in CI.

MC
Martin Coll

If you are searching for ShipFast alternatives, you are usually not a first-timer. You shipped something with a landing-page-first kit, it worked, and then the product asked for the parts that kit was never built to carry: more than one organization per account, roles that actually gate endpoints, and a test suite you trust enough to refactor behind. This post is an honest map of the ShipFast alternatives worth looking at — free and paid, Next-only and full-stack — and then a close look at the three capabilities that tend to be the real reason people move on: multi-tenancy, RBAC, and tests.

Full disclosure up front: this is the UseDeploy blog, so UseDeploy is on the list. I have tried to keep the rest of the list fair, cite every competitor claim to a source, and phrase anything that could change with "as of July 2026", because boilerplates change constantly.

Why people look for ShipFast alternatives in the first place

ShipFast is the volume leader for a reason — a huge community, a launch-this-weekend focus, and a founder who ships in public. It earned its audience. But three recurring reasons push people to look elsewhere:

  • The 2024 security drama. In October 2024 a public thread demonstrated a paywall bypass and missing server-side validation in ShipFast; it reached millions of views and the author patched it live. The reaction that made "serious architecture" a buying trigger in this category was one commenter's: "The entire point of boilerplate code is that it takes care of… security best practices."
  • JavaScript-first, Next-only. ShipFast is a pragmatic, JavaScript-first Next.js kit with light automated test coverage (as of July 2026). Teams that want TypeScript end-to-end and a backend they can test in isolation often outgrow that shape.
  • No multi-tenancy, RBAC, or admin panel. As of July 2026 ShipFast ships none of those out of the box — which is fine for a single-tenant indie product and a wall the moment you sell to a company with more than one seat.

There is also a category-wide objection worth naming, because it is the loudest one on Indie Hackers and Hacker News: boilerplates get outgrown and rebuilt. Buyers report they "eventually end up rebuilding software from scratch" and warn that "it's very easy to diverge from a kit." That is an architecture complaint, and it is the right lens for picking an alternative: the question is not "which kit launches fastest" but "which kit can grow instead of being thrown away."

The three things that actually make you leave

Strip away the feature-list marketing and the migrations people describe come down to the same three gaps:

  1. Multi-tenancy — one account, many organizations, and a hard guarantee that org A can never read org B's rows.
  2. RBAC — roles that gate real endpoints, not a boolean isAdmin column.
  3. Tests — enough coverage, gated in CI, that you can refactor the base under your product without praying.

So the useful way to read any ShipFast alternative is: does it ship these three, and does it enforce them or just document them?

The alternatives, honestly

supastarter — the closest analog

The nearest competitor for this exact buyer. As of July 2026 supastarter is ~$299, spans Next.js / Nuxt / TanStack, uses BetterAuth, and ships multi-tenancy, i18n, and multiple payment providers (including Polar / Creem / Dodo). It also ships AGENTS.md guidelines "optimized for Cursor and Claude Code, designed to be extended by AI coding agents." If you want multi-framework breadth and payment-provider breadth, it is the strongest pick. The distinction to probe: its architecture guidance is guidelines, not compiler-enforced boundaries.

MakerKit — the battle-tested B2B option

MakerKit has been shipping since 2022 and has the deepest B2B multi-tenancy of the paid kits (as of July 2026, ~$299 Pro / $599 Team, lifetime). The two documented tradeoffs: a steep learning curve — "it assumes knowledge of modern React, and some features are hard to discover" — and vendor lock-in, since it "relies on Supabase Auth or Firebase, which ties you to those platforms." If you are already all-in on Supabase, that lock-in is a non-issue; if you are not, it is the thing to weigh.

create-t3-app — free, but it is scaffolding

The default free starting point a lot of devs reach for (~28k+ GitHub stars). Important distinction: it deliberately ships no auth flows, billing, multi-tenancy, or admin — it wires Next + tRPC + Tailwind + Prisma/Drizzle and stops. That is a typesafe skeleton, not a SaaS boilerplate. If you are comparing "just use t3 for free" against a paid kit, you are comparing the wiring against the boring-hard parts (2FA, magic link, OAuth, RBAC, billing webhooks, tenant isolation) that t3 leaves entirely to you.

The strongest free, full-featured rival. OpenSaaS is MIT-licensed on the Wasp framework and ships Stripe subscriptions, auth, email, jobs, an admin panel, and a blog — coverage "comparable to or exceeding what paid boilerplates ship" at zero cost. Its friction is the Wasp DSL: "learning a DSL, and debugging generated code takes getting used to," plus a persistent Node.js backend. If you do not mind a config language your coding agent has to learn, the price is unbeatable.

LaunchFast — the budget, multi-framework play

Priced to undercut everyone (as of July 2026, one-time ~$75 Astro / ~$79 Next.js / ~$199 SvelteKit, per its listing), spanning three frameworks with Stripe + LemonSqueezy, auth, storage, email, and a blog. It wins on framework breadth and cost, not on tenancy depth, RBAC, or observability. A fine pick if you are a cost-sensitive solo shipper and the trio above is not on your roadmap.

Bedrock — premium and GraphQL-first

Bedrock (Max Stoiber, ~$396) is a Next.js + GraphQL + monorepo kit. It is the most expensive on this list and its GraphQL- first, heavy-monorepo stack is a heavier lift than most AI-assisted builders want today. Worth knowing exists; a mismatch for the fast-moving buyer this post is written for.

UseDeploy — enforced, not just documented

Where UseDeploy fits: it is the heavier, opinionated base for when the architecture has to outlive the launch. It ships org-scoped multi-tenancy, RBAC, a durable outbox, native Stripe / MercadoPago / Polar billing adapters, and a multi-layer test suite gated in CI — and, unlike the guidelines-based kits, its DDD layering is enforced by ESLint, so the boundary is something the compiler rejects rather than a convention an agent can drift past. The rest of this post shows the trio in real code, because "enforced" only means something if you can read the enforcement.

What the trio looks like when it is built in

Multi-tenancy: a guard that throws instead of leaking

The most common way a B2B app leaks data is a findMany that forgot its where: { organizationId }. UseDeploy answers that with a Prisma client extension that treats a missing tenant filter as a crash, not a silent cross-tenant read. A fixed allowlist of org-owned models is guarded:

export const TENANT_SCOPED_MODELS: Set<string> = new Set([
  'ApiKey', 'Role', 'OrganizationMember', 'Invitation',
  'WebhookEndpoint', 'UsageCounter', 'UsageEvent',
]);

and any guarded read or mutation that cannot prove its where constrains an org throws with a message that tells you exactly what to do:

`Tenant guard: ${model}.${operation} executed without an organizationId ` +
`constraint in \`where\`. Scope the query by organizationId, or inject ` +
`getSystemPrismaClient() explicitly for a legitimate system-context ` +
`(worker / token-lookup / GDPR) access.`

The honest limitation: this is a guardrail, not a formal proof. It does not intercept $queryRaw / $executeRaw — Prisma does not route raw SQL through model-level extensions, so raw queries stay the author's responsibility. The full design, including why "throw" beats "return rows" when an agent is writing half your repositories, is in the deep-dive on the tenant-isolation guard.

RBAC: a typed permission grid, not an isAdmin boolean

Permissions are a Resource × Action matrix with a single typed union, plus a super-admin escape hatch — no stringly-typed guessing at call sites:

export type Permission = `${Resource}:${Action}` | ExtraPermission | '*:*';

export const hasPermission = (
  granted: ReadonlyArray<Permission>,
  required: Permission,
): boolean => granted.includes(SUPER_ADMIN) || granted.includes(required);

Roles live in a per-organization Role table (so each tenant defines its own), and endpoints are gated by middleware that reads the caller's grants for the active org:

export const requirePermission = (permission: Permission): RequestHandler =>
  (req, res, next) => {
    if (!req.session) return sendError(res, new UnauthorizedError('Authentication required'));
    const grants = req.grants ?? [];
    if (!hasPermission(grants, permission)) {
      return sendError(res, new ForbiddenError(`Missing permission: ${permission}`));
    }
    next();
  };

The check runs server-side, against the org the middleware already authorized — which is precisely the "a server that returns all user data and trusts the client to filter it" failure mode that keeps surfacing in audits of AI-generated apps.

Tests: coverage that gates the merge, not a token spec

Business invariants are unit-tested directly. Here is a real one asserting that a role update refuses to touch another org's role — the tenancy boundary proven at the use-case layer, no database required:

it('returns NotFound and does not save when the role belongs to another org', async () => {
  const { roles, saved } = makeRoles();
  const uc = new UpdateRoleUseCase(roles, events);
  const res = await uc.execute({ organizationId: 'org-b', roleId: 'r1', name: 'hacked' });
  expect(res.ok).toBe(false);
  if (!res.ok) expect(res.error).toBeInstanceOf(NotFoundError);
  expect(saved).toEqual([]);
});

The part that makes the coverage load-bearing is the gate. CI runs lint, typecheck, test, an API-types-freshness check, and a golden-path Playwright E2E suite on every pull request, with the full E2E suite on a nightly schedule. A merge that regresses tenant scoping, breaks a typed contract, or fails the golden path does not land. That is the difference between "there are some tests" and "the tests protect the base you are about to refactor."

How to choose

A quick, honest decision guide:

  • You want the fastest indie launch and will genuinely never need the trio. Stay on ShipFast, or reach for LaunchFast if you want it cheaper across multiple frameworks.
  • You want free and full-featured and do not mind a DSL. OpenSaaS on Wasp is hard to beat on price.
  • You want free scaffolding and will build the boring-hard parts yourself. create-t3-app.
  • You want multi-framework and payment-provider breadth with agent-friendly docs. supastarter.
  • You are all-in on Supabase and want the most battle-tested B2B tenancy. MakerKit.
  • You want the trio enforced — org-scoped tenancy that fails loud, typed RBAC, and tests gated in CI — plus native MercadoPago for LATAM. That is the case UseDeploy is built for.

None of these is "the best" in the abstract; they optimize for different buyers. The only real mistake is picking a landing-page kit for a product that already knows it needs organizations, roles, and a test suite it can trust.

If you want the side-by-side with the sources for every claim here, the ShipFast alternative comparison lays it out cell by cell, and the full comparison hub does the same across the rest of the field. Read those next if you are down to a shortlist — they are where the trade-offs get concrete.