Remix SaaS Review 2026: Community Remix Starter Kit
TL;DR
Remix SaaS is a solid free alternative to Epic Stack for Remix-based SaaS products. It includes auth, Stripe, multi-tenancy via organizations, and a clean project structure without Epic Stack's SQLite-first opinionation. Free and MIT licensed. Best for Remix developers who want PostgreSQL over SQLite and a lighter footprint than Epic Stack.
What You Get
Source: github.com/dev-xo/remix-saas
Core features:
- Remix 2.x + TypeScript
- Auth: cookie-based sessions + OAuth (GitHub, Google)
- Payments: Stripe subscriptions
- Database: Prisma + PostgreSQL (or SQLite for dev)
- UI: Tailwind CSS + shadcn/ui
- Email: Resend integration
- Organizations/teams
- Plan management
- Free / MIT licensed
The Core Architecture
Remix SaaS follows Remix conventions closely — loaders, actions, and progressive enhancement:
// routes/_app.dashboard.tsx — loader pattern
import { json, type LoaderFunctionArgs } from '@remix-run/node';
import { useLoaderData } from '@remix-run/react';
import { requireUser } from '~/services/auth.server';
import { getOrganizationByUserId } from '~/services/organization.server';
export async function loader({ request }: LoaderFunctionArgs) {
const user = await requireUser(request);
const organization = await getOrganizationByUserId(user.id);
return json({
user,
organization,
plan: organization.subscription?.plan ?? 'free',
});
}
export default function Dashboard() {
const { user, organization, plan } = useLoaderData<typeof loader>();
return (
<div>
<h1>Welcome, {user.name}</h1>
<p>Organization: {organization.name}</p>
<p>Plan: {plan}</p>
</div>
);
}
Authentication
// services/auth.server.ts — Remix session-based auth
import { createCookieSessionStorage, redirect } from '@remix-run/node';
import { prisma } from '~/utils/db.server';
import bcrypt from 'bcryptjs';
const sessionStorage = createCookieSessionStorage({
cookie: {
name: '__session',
httpOnly: true,
path: '/',
sameSite: 'lax',
secrets: [process.env.SESSION_SECRET!],
secure: process.env.NODE_ENV === 'production',
},
});
export async function requireUser(request: Request) {
const session = await sessionStorage.getSession(request.headers.get('Cookie'));
const userId = session.get('userId');
if (!userId) throw redirect('/login');
const user = await prisma.user.findUnique({ where: { id: userId } });
if (!user) throw redirect('/login');
return user;
}
export async function signIn(email: string, password: string) {
const user = await prisma.user.findUnique({ where: { email } });
if (!user || !user.passwordHash) return null;
const valid = await bcrypt.compare(password, user.passwordHash);
if (!valid) return null;
return user;
}
Organization Management
// Multi-tenancy via organizations
export async function createOrganization(userId: string, name: string) {
return prisma.organization.create({
data: {
name,
slug: slugify(name),
members: {
create: {
userId,
role: 'owner',
},
},
},
});
}
export async function getOrganizationByUserId(userId: string) {
const membership = await prisma.organizationMember.findFirst({
where: { userId },
include: {
organization: {
include: { subscription: true },
},
},
orderBy: { createdAt: 'asc' }, // Primary org first
});
return membership?.organization ?? null;
}
Remix SaaS vs Epic Stack
| Feature | Remix SaaS | Epic Stack |
|---|---|---|
| License | Free/MIT | Free/MIT |
| Database | PostgreSQL (Prisma) | SQLite (Drizzle) |
| Auth | Sessions + OAuth | Sessions + TOTP |
| UI | shadcn/ui | Custom |
| Testing | Basic | Full (Playwright + Vitest) |
| Resend | Resend | |
| Organizations | ✅ | ❌ (user-centric) |
| Documentation | Minimal | Good |
| Maintenance | Community | Kent C. Dodds |
| Philosophy | Feature-rich | Production practices |
Choose Remix SaaS when:
- You need PostgreSQL (not SQLite)
- You need organizations/multi-tenancy
- You want shadcn/ui components
Choose Epic Stack when:
- You want battle-tested production practices
- SQLite + Litefs works for your scale
- Testing is a priority
Limitations
- Documentation: Minimal compared to Epic Stack or commercial alternatives
- Testing: No comprehensive test setup (Epic Stack advantage)
- Community: Smaller than Epic Stack (fewer tutorials)
- Maintenance pace: Community-driven; can lag behind Remix releases
- No i18n: Internationalization requires adding separately
Who Should Use Remix SaaS
Good fit:
- Remix developers who want PostgreSQL over SQLite
- Teams needing organizations/multi-tenancy with Remix
- Developers familiar with Remix who want a starting point
- Products where Epic Stack's SQLite approach doesn't fit
Bad fit:
- Teams new to Remix (documentation gaps hurt beginners)
- Products needing comprehensive testing from day one
- Teams wanting commercial support or SLA
Final Verdict
Rating: 3.5/5
Remix SaaS is a capable free foundation for Remix-based SaaS products. The organization system differentiates it from Epic Stack, and PostgreSQL over SQLite suits more deployment scenarios. The limitations (sparse documentation, smaller community, no testing setup) are real trade-offs. For Remix teams that need multi-tenancy and PostgreSQL, it's the best free option available.
Compare Remix SaaS with Epic Stack and other Remix boilerplates on StarterPick.
Check out this boilerplate
View Remix SaaS on StarterPick →