Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Opinionated template for full-stack universal apps with Expo, Next.js, tRPC, Prisma, Clerk, Solito, and Tamagui.
create-universal-app (CUA) is a GitHub boilerplate template for scaffolding full-stack universal apps — one React Native codebase that runs on iOS, Android, and web through Expo, Next.js, tRPC, Prisma, Clerk, Solito, and Tamagui.
create-universal-app (CUA) is an opinionated, open-source template that generates a full-stack monorepo for universal (mobile + web) development. It takes a blank workspace and produces a project with a Next.js web app (apps/next), an Expo mobile app (apps/expo), and five shared packages: ui for Tamagui components, db for the Prisma schema, app for frontend features/navigation/providers, and api for tRPC routers. It adds Clerk authentication for both Expo and Next.js out of the box, so users can sign in on either platform. The repository is hosted on GitHub and is no longer actively maintained according to its README.
The template ships with eight built-in capabilities that cover the full stack.
packages/app/features using Tamagui Stacks; the same code renders as HTML/CSS on the Next.js side and native components in Expo.SignedIn/SignedOut hooks and components for both Expo and Next.js, plus SDKs for Expo frontend, Next.js frontend, and Next.js server side.packages/api; frontend and backend communicate through type-safe tRPC procedures, with route files added in packages/api/src/router.packages/db; yarn db-push syncs it, and Postgres (e.g., Railway or Supabase) is recommended for production.packages/app/features and then wired into both apps/expo/app and apps/next/pages.npx create-t3-universal-app and optional flags (--with-supabase, --with-drizzle-pg, --with-drizzle-sql); the t3-cua-tools extension automates new screen creation.Developers who want to own every layer of a cross-platform app from one codebase.
packages/app/features.You can scaffold a complete full-stack monorepo, add features, deploy to Vercel, and swap databases using the provided CLI flags.
yarn web, yarn native, yarn dev, yarn studio) ready to go.packages/app/features, put shared UI components in packages/ui, expose a tRPC procedure in packages/api, and use it from both the Expo and Next.js apps.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY, CLERK_SECRET_KEY, and DATABASE_URL, and link the repo to Vercel.--with-supabase flag, or switch to Drizzle with --with-drizzle-pg.Setting up and extending CUA follows these steps:
yarn install to install dependencies and build the workspace..env.example to .env and fill in CLERK_SECRET_KEY and NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY from Clerk; a DATABASE_URL is optional because SQLite is the default.yarn db-push to create the Prisma tables.yarn web (web + backend), yarn native (iOS/Android), yarn dev (all packages), or yarn studio (Prisma Studio).packages/app/features, then add a routeName.tsx file under apps/expo/app and a folder under apps/next/pages.CUA has clear trade-offs that depend on your budget and maintenance appetite.
Pros:
Cons:
These related starters occupy similar territory to CUA.
No. The repository README states it is no longer actively maintained. A community-maintained CLI, npx create-t3-universal-app, offers variations of the original template with Supabase or Drizzle support.
Run npx create-t3-universal-app in your terminal. You can add one of these flags for a specific variation: --with-supabase, --with-drizzle-pg, or --with-drizzle-sql. Then follow the README setup steps.
By default, CUA uses SQLite through Prisma, so you can start without a separate database. For production, the author recommends provisioning Postgres on Railway or using Supabase and setting the DATABASE_URL environment variable.
Install packages that involve interactions with the phone OS (storage, camera, gyroscope, notifications) into the /expo folder. Packages that are pure JavaScript can be installed at the workspace root.
CUA is built on top of create-t3-turbo but adds two things: UI code sharing across apps through Tamagui, and authentication for both mobile and web through Clerk. create-t3-turbo alone has no shared UI layer and no mobile auth.
