Skip to content
github-actions[bot] edited this page Aug 18, 2026 · 4 revisions

Welcome to the Enjoy Player wiki — a cross-platform language-learning media player built with Flutter.

Enjoy Player is a language-learning companion that plays local audio/video files, YouTube videos, and provides interactive transcripts, dictionary lookup, vocabulary SRS review, and shadow-reading (echo) practice — all with optional cloud sync and AI-powered transcript/explanations. Supported platforms: Android, iOS, macOS, Windows, Linux. Flutter web is not supported.

Current version: 0.8.2+11 (pubspec.yaml).

Quick Links

  • Getting Started — setup, prerequisites, run, verify
  • Architecture — feature-first layout, data flow, routing
  • Player — media_kit engine, YouTube via WebView, transport bar
  • Transcripts — SRT/VTT, YouTube captions, dictionary lookup, karaoke, IPA
  • Echo Mode — line-bounded shadow-reading practice
  • Alignment — on-device DTW alignment (ADR-0071 / ADR-0072)
  • Library — local media, cloud index, unified navigation
  • AI and Lookup — AI SDKs, BYOK providers, inline dictionary
  • Persistence — Drift schema, migrations, recovery
  • Release and CI — build, sign, distribute per platform

Tech Stack

  • Playback: media_kit (+ media_kit_video, media_kit_libs_video) for local files/URLs — one single Player instance owned by MediaKitPlayerEngine/PlayerController
  • State: Riverpod 3 + riverpod_annotation codegen
  • Persistence: Drift + drift_flutter + native SQLite
  • YouTube: flutter_inappwebview (separate from media_kit, ADR-0015)
  • Navigation: go_router with ShellRoute for persistent mini player
  • AI SDKs: ai_sdk_dart, ai_sdk_openai, ai_sdk_anthropic, ai_sdk_google with BYOK provider settings (ADR-0033)
  • Auth: google_sign_in, sign_in_with_apple, custom-scheme PKCE callback (ADR-0027, ADR-0034)
  • Logging: package:logging via logNamed() wrapper — no print()

Status

Enjoy Player is an MVP focused on local-first audio/video playback with interactive transcripts, YouTube import, shadow reading, vocabulary learning, and optional cloud metadata sync. The project follows a login-only access model (ADR-0031), a feature-first architecture (ADR-0004), and per-user SQLite isolation (ADR-0012). See AGENTS.md for contributor rules and quality gates.