Skip to main content

Remix SaaS Review 2026: Community Remix Starter Kit

·StarterPick Team
remix-saasremixreview2026

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

FeatureRemix SaaSEpic Stack
LicenseFree/MITFree/MIT
DatabasePostgreSQL (Prisma)SQLite (Drizzle)
AuthSessions + OAuthSessions + TOTP
UIshadcn/uiCustom
TestingBasicFull (Playwright + Vitest)
EmailResendResend
Organizations❌ (user-centric)
DocumentationMinimalGood
MaintenanceCommunityKent C. Dodds
PhilosophyFeature-richProduction 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 →

Comments