Euphoria DevelopmentEuphoria Development Docs

Stack and Layout

  • Core app: Nuxt 4, Nitro, TypeScript, Tailwind CSS, Pinia
  • Security and PWA: nuxt-security, @vite-pwa/nuxt
  • Data and auth: Drizzle ORM with local SQLite (@libsql/client), better-auth
  • Desktop: Tauri v2 wrapper in apps/desktop
  • Mobile: Capacitor wrapper in apps/mobile
  • Shared app core: apps/web

Quick Start

Use this flow for first local startup:

pnpm install
pnpm --filter @streamlink/web db:migrate
pnpm dev
pnpm desktop:dev
pnpm mobile:sync

On Windows, reopen your terminal after installing Rust/Java/Android tooling so updated PATH and JAVA_HOME values are loaded.

Environment

Copy apps/web/.env.example to apps/web/.env and set values before production use.

  • DATABASE_URL: defaults to file:./.data/streamlink.sqlite (local DB path apps/web/.data/streamlink.sqlite)
  • XBOX_CLIENT_ID, XBOX_REDIRECT_URI, optional XBOX_CLIENT_SECRET for browser OAuth mode
  • XBOX_XSTS_RELYING_PARTY optional advanced setting (default http://xboxlive.com)
  • XBOX_STREAM_SESSION_ENDPOINT optional custom stream-session broker endpoint

Native Build and Run

Desktop (Windows/Linux)

  • Dev runtime: pnpm desktop:dev
  • Release build: pnpm desktop:build

Android

  • Sync assets: pnpm mobile:sync
  • Build debug APK: pnpm mobile:build:android
  • Run on device/emulator: pnpm mobile:run:android
  • Open in Android Studio: pnpm mobile:open:android

APK output: apps/mobile/android/app/build/outputs/apk/debug/app-debug.apk

iOS

Wrapper generation is supported, but full iOS build/run requires macOS and Xcode.

Integration Routes

Common routes used by account and Xbox integration flows:

  • /api/auth/* Better Auth routes (email sign-up/sign-in/sign-out included)
  • GET /api/integrations/xbox/link/callback OAuth callback
  • POST /api/integrations/xbox/link/device/start Device-code start
  • POST /api/integrations/xbox/link/device/complete Device-code completion

Troubleshooting

  • Desktop build fails: confirm Rust is installed and available in PATH.
  • Android tasks fail: verify Android SDK + Java setup and accepted licenses.
  • Auth flow issues: check redirect URI and Better Auth base URL settings.
  • Database errors: make sure DATABASE_URL points to a writable path.

Current repository note: media transport/player handling is still pending for complete end-to-end video playback.