Recording a podcast remotely usually means one compressed audio stream for everyone. Okarin captures each participant as a separate track, giving you individual files for professional post-production.
- Multi-track recording - Each participant recorded as a separate audio/video file
- Full quality - No compression from centralized recording
- WebRTC SFU - Scalable media routing via Cloudflare Calls
- Edge signaling - Sub-50ms latency with global Cloudflare Workers
Download the latest release from GitHub Releases.
macOS: Download .dmg, drag to Applications
Windows: Coming soon
Linux: Coming soon
- Node.js >= 18
- pnpm >= 8
- Rust >= 1.70
pnpm install# Development
pnpm dev:desktop # Desktop app with hot reload
pnpm dev:signaling # Local signaling server
# Build
pnpm build # All packages
pnpm tauri:build # Desktop distributable
# Quality
pnpm lint # Check code
pnpm typecheck # Type validationapps/
├── desktop/ # Tauri + React
├── signaling/ # Cloudflare Worker (WebSocket rooms)
└── auth/ # Cloudflare Worker (JWT auth)
packages/
└── ui/ # Shared components
Desktop: Tauri, React 19, Zustand, Tailwind CSS Backend: Cloudflare Workers, Durable Objects, KV Media: Cloudflare Calls SFU, WebRTC
cd apps/signaling
# Set secrets
npx wrangler secret put JWT_SECRET
npx wrangler secret put CLOUDFLARE_APP_SECRET
# Deploy
npx wrangler deploy -c wrangler.jsoncReleases are built automatically via GitHub Actions when pushing to main.
Create apps/desktop/.env:
VITE_SIGNALING_SERVER_URL=https://your-worker.workers.dev
VITE_AUTH_SERVER_URL=https://auth.your-domain.comEdit apps/signaling/wrangler.jsonc:
{
"vars": {
"CLOUDFLARE_APP_ID": "your-cloudflare-calls-app-id"
}
}See CONTRIBUTING.md.
Free to use, modify, and distribute. Commercial sale prohibited.