🐍 Python + 🏃🏻♂️ Expo
tl;dr: This project started out as the official FastAPI project template + Infinite Red's ignite Expo boilerplate plus my own choices for building a cross language React Native app.
Basically I took Fast API Template and replaced the included frontend with Infinite Red's expo boilerplate.
I added the OpenAPI Typescript client such that all data (user data, and item data) are loaded via hook using the OpenAPI generated hooks. And the OpenAPI generated React Query client.
This is a monorepo containing both the backend API and the Expo mobile application.
pypo/
├── app/
│ ├── backend/ # FastAPI backend
│ └── expo/ # Expo React Native app
├── turbo.json # Turborepo configuration
└── package.json # Root workspace configuration
- Node.js >= 20.0.0
- Bun (package manager)
- Python 3.10+
- uv (Python package manager)
-
Install dependencies:
bun install
-
Install Python dependencies for the backend:
cd app/backend uv sync -
Start development servers:
# Start both backend and expo bun run dev # Or start individually bun run dev --filter=backend bun run dev --filter=expo
bun run build- Build all applicationsbun run dev- Start development servers for all applicationsbun run test- Run tests for all applicationsbun run lint- Lint all applicationsbun run clean- Clean all applicationsbun run format- Format code with Prettier
bun run dev- Start FastAPI development serverbun run test- Run pytest testsbun run lint- Run ruff linterbun run format- Format code with ruff
bun run dev- Start Expo development serverbun run android- Run on Androidbun run ios- Run on iOSbun run web- Run on webbun run test- Run Jest testsbun run lint- Run ESLint
The backend is a FastAPI application located in app/backend/. It uses:
- FastAPI for the web framework
- SQLModel for ORM
- Alembic for database migrations
- Pytest for testing
- Ruff for linting and formatting
The Expo app is located in app/expo/ and includes:
- React Native with Expo
- TypeScript
- React Navigation
- TanStack Query for data fetching
- Zustand for state management
The project includes Docker Compose configurations for easy deployment:
# Start all services
docker-compose up -d
# Start with Traefik (production-like)
docker-compose -f docker-compose.traefik.yml up -d- Make sure all tests pass:
bun run test - Ensure code is properly formatted:
bun run format - Check linting:
bun run lint - Commit your changes
This project is licensed under the MIT License - see the LICENSE file for details.