Takeout Pro - The full version with more features, templates, and support.
β οΈ v2-beta - This stack is in active development. APIs may change.
A full-stack, cross-platform starter kit for building modern web and mobile applications with React Native.
Before you begin, ensure you have:
- Bun - Install Bun
- Docker - Install Docker (on macOS, we recommend OrbStack as a faster alternative)
- Git - For version control
For mobile development:
- iOS: macOS with Xcode 16+
- Android: Android Studio with JDK 17+
bun install
bun backend # start docker services (postgres, zero)
bun dev # start web dev server at http://localhost:8092At a high level, the primary technologies used are:
- One - Universal React framework
- Zero - Real-time sync
- Tamagui - Universal UI
- Better Auth - Authentication
- Drizzle ORM - Database schema
takeout-free/
βββ app/ # File-based routing (One router)
β βββ (app)/ # Authenticated routes
β β βββ auth/ # Login flows
β β βββ home/ # Main app tabs
β βββ api/ # API routes
βββ src/
β βββ features/ # Feature modules (auth, todo, theme)
β βββ interface/ # Reusable UI components
β βββ database/ # Database schema and migrations
β βββ data/ # Zero schema, models, and queries
β βββ zero/ # Real-time sync configuration
β βββ server/ # Server-side code
β βββ tamagui/ # Theme configuration
βββ scripts/ # CI/CD and helper scripts
βββ docs/ # Documentation
βββ assets/ # Images, fonts, splash screens
# development
bun dev # start web + mobile dev server
bun ios # run iOS simulator
bun android # run Android emulator
bun backend # start docker services
# code quality
bun check # typescript type checking
bun lint # run oxlint
bun lint:fix # auto-fix linting issues
# testing
bun test:unit # unit tests
bun test:integration # integration tests
# database
bun migrate # build and run migrations
# deployment
bun ci --dry-run # run full CI pipeline without deploy
bun ci # full CI/CD with deploymentPostgreSQL runs in Docker on port 5444:
- Main database:
postgresql://user:password@localhost:5444/postgres - Zero sync databases:
zero_cvrandzero_cdb
Update your schema in:
src/database/schema-public.ts- Public tables (exposed to Zero/client)src/database/schema-private.ts- Private tables
Then run:
bun migrate.env.development- Development defaults (committed).env- Active environment (generated, gitignored).env.local- Personal secrets/overrides (gitignored).env.production- Production config (gitignored).env.production.example- Production template (committed)
# authentication
BETTER_AUTH_SECRET=<secret>
BETTER_AUTH_URL=<url>
# server
ONE_SERVER_URL=<url>
# zero
ZERO_UPSTREAM_DB=<connection-string>
ZERO_CVR_DB=<connection-string>
ZERO_CHANGE_DB=<connection-string>
# storage (S3/R2)
CLOUDFLARE_R2_ENDPOINT=<endpoint>
CLOUDFLARE_R2_ACCESS_KEY=<key>
CLOUDFLARE_R2_SECRET_KEY=<secret>See .env.production.example for complete production configuration.
bun ios # run in simulatorRequires macOS, Xcode 16+, and iOS 17.0+ deployment target.
bun android # run in emulatorRequires Android Studio, JDK 17+, and Android SDK 34+.
- Add schema to
src/database/schema-public.ts - Run
bun migrate - Add Zero model to
src/data/models/ - Run
bun zero:generate - Use queries in your components
Reusable components live in src/interface/. Use components from there rather
than importing directly from Tamagui when possible.
This project uses Phosphor Icons. Icons are in
src/interface/icons/phosphor/.
MIT