StreamLink is a cross-platform Xbox streaming client scaffold with a shared Nuxt 4 core and wrapper targets for desktop (Tauri) and mobile (Capacitor).
- Frontend and API core: Nuxt 4, Nitro, TypeScript, Tailwind CSS, Pinia
- Security and platform: nuxt-security, @vite-pwa/nuxt
- Data and auth baseline: Drizzle ORM + local SQLite (
@libsql/client), better-auth - Desktop: Tauri v2 wrapper for Windows/Linux
- Mobile: Capacitor wrapper for Android/iOS
apps/webshared application coreapps/desktopTauri desktop wrapperapps/mobileCapacitor mobile wrapper
- Install dependencies:
pnpm install
- Run shared web app:
pnpm --filter @streamlink/web db:migratepnpm dev
- Run desktop shell:
pnpm desktop:dev
- Sync mobile shell assets to native projects:
pnpm mobile:sync
- Dev runtime:
pnpm desktop:dev - Release build:
pnpm desktop:build
If Rust is installed under ~/.cargo/bin, the desktop wrapper scripts automatically prepend that path before invoking Tauri.
- Sync web assets:
pnpm mobile:sync - Build debug APK:
pnpm mobile:build:android - Install and launch on connected device/emulator:
pnpm mobile:run:android - Open native project in Android Studio:
pnpm mobile:open:android
APK output path: apps/mobile/android/app/build/outputs/apk/debug/app-debug.apk
- iOS wrapper files can be generated from this repo, but building/running iOS requires macOS + Xcode.
Copy apps/web/.env.example to apps/web/.env and fill values.
- Default local DB path:
apps/web/.data/streamlink.sqlite - Env var:
DATABASE_URL=file:./.data/streamlink.sqlite - No external database service is required.
- Device-code linking works with defaults and does not require private secrets.
- Optional browser OAuth mode requires:
XBOX_CLIENT_IDXBOX_REDIRECT_URI- optional
XBOX_CLIENT_SECRET
- OAuth callback route is
GET /api/integrations/xbox/link/callback. - Device-code routes:
POST /api/integrations/xbox/link/device/startPOST /api/integrations/xbox/link/device/complete
- Optional advanced stream negotiation:
XBOX_XSTS_RELYING_PARTY(defaults tohttp://xboxlive.com)XBOX_STREAM_SESSION_ENDPOINT(custom stream-session broker endpoint)
- Better Auth routes are mounted at
/api/auth/*. - Email/password auth endpoints are available out of the box (
/api/auth/sign-up/email,/api/auth/sign-in/email,/api/auth/sign-out). - Integration routes now use authenticated Better Auth user identities (not anonymous cookie ids).
- Xbox integration includes browser OAuth PKCE, device-code linking, unlink, token refresh, XBL/XSTS exchange, and stream session orchestration persistence.
- Desktop wrapper now exposes bridge commands for controller-state and haptics events.
- Media transport/player handling is still pending for full end-to-end video playback.
- On Windows, reopen your terminal after installing toolchains so updated
PATH/JAVA_HOMEvalues are picked up.