Getting Started
Set up TermPod for development — prerequisites, installation, and running locally.
Prerequisites
- macOS 13+ (Ventura or later)
- Xcode 16+ (for iOS builds)
- Rust (latest stable via rustup)
- Node.js 20+ (LTS)
- pnpm 10+ (
npm install -g pnpm) - XcodeGen (
brew install xcodegen)
Installation
1. Clone and install
git clone https://github.com/termpod/termpod.git
cd termpod
pnpm install2. Configure environment
cp .env.example .envEdit .env with your values. See Configuration for details on each variable.
3. Run in development
# Desktop app (dev mode with hot reload)
pnpm dev:desktop
# Relay server (local via Miniflare)
pnpm dev:relay
# Both at once
pnpm dev4. iOS app
# Generate Xcode config from .env and regenerate .xcodeproj
pnpm ios:generate
# Open in Xcode
open apps/ios/TermPod.xcodeprojBuild and run from Xcode on a simulator or device. The APPLE_TEAM_ID from your .env is used for code signing automatically.
5. Production builds
# Desktop (sources .env for signing identity + notarization)
cd apps/desktop
pnpm build:release
# Relay (deploy to Cloudflare)
cd relay
wrangler secret put JWT_SECRET
wrangler secret put RESEND_API_KEY
wrangler secret put SENTRY_DSN # optional
wrangler deployBuild Commands Reference
| Command | Description |
|---|---|
pnpm install | Install all dependencies |
pnpm dev | Run desktop + relay together |
pnpm dev:desktop | Tauri dev with hot reload |
pnpm dev:relay | Wrangler local dev (Miniflare) |
pnpm build | Build all packages via Turborepo |
pnpm lint | TypeScript type checking (all packages) |
pnpm test | Run all tests (Vitest) |
pnpm format | Prettier format (write) |
pnpm format:check | Prettier format (check) |
pnpm ios:generate | Generate xcconfig + xcodeproj from project.yml |
cd apps/desktop/src-tauri && cargo clippy | Lint Rust code |
Code Style
- TypeScript: Prettier (
semi: true, singleQuote: true, trailingComma: all, printWidth: 100). Lint istsc --noEmit(no ESLint). - Rust: Clippy. Edition 2024.
- Swift: Standard Swift conventions.