MCPcopy Index your code
hub / github.com/FengZeng/soia

github.com/FengZeng/soia @v0.2.7

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.2.7 ↗ · + Follow
1,604 symbols 3,575 edges 137 files 0 documented · 0% updated 3d agov0.2.7 · 2026-06-27★ 1285 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Soia Soia

🎬 HDR & Dolby Vision · 🌐 WebDAV + DLNA + SMB Streaming · 🖥 Cross-platform

⬇️ Download Latest Release · 🐞 Report a Bug

Soia App Preview

A modern mpv frontend focused on performance and clean design.

Soia is a high-performance video player built on mpv, designed for smooth playback of everything from local Dolby Vision content to remote WebDAV, DLNA, and SMB streams — all in one fast, elegant, cross-platform experience.

✨ Key Features

High-Performance Playback

  • mpv-powered playback with hardware acceleration (4K, HDR, Dolby Vision*)
  • Picture in Picture (PiP) on macOS and Windows
  • Dual subtitles for bilingual viewing
  • Fuzzy subtitle matching for both local and network media
  • Online subtitle search via OpenSubtitles and SubSource
  • Advanced subtitle appearance controls for font, color, size, and position
  • Custom shaders for high-quality scaling and rendering
  • Anime mode with auto-detection and shader auto-apply

Dolby Vision is not currently supported on Linux

Streaming & Remote Media

  • WebDAV browsing and streaming
  • DLNA and SMB/Samba discovery, browsing, and playback
  • M3U (IPTV) parsing and playback
  • Smart buffering with real-time speed indicators
  • Resume playback with history tracking

Native Experience

  • Native media keys and Now Playing integration (macOS)
  • Borderless window across macOS, Windows, and Linux (Wayland)
  • Experimental Wallpaper Mode (Windows)
  • Flexible playback preferences (speed, seek, auto-play, skip intro)

Install

Download from the release page.

Or you can build it yourself. Support macOS 13+, Windows, and Linux(Ubuntu). Current Linux builds target Ubuntu Wayland sessions only (X11 is not supported at this time).

FAQ

Q: macOS says "Soia is damaged and can't be opened" or cannot verify it is free of malware.

A: This happens because the app is not yet signed with an Apple Developer ID certificate, so macOS may block it on first launch.

Easy fix (recommended): 1. Right-click Soia.app 2. Click "Open" 3. Click "Open" again in the dialog

If that doesn't work, run:

sudo xattr -r -d com.apple.quarantine /Applications/Soia.app

You can also go to System Settings -> Privacy & Security and click "Open Anyway" (it appears after a blocked launch attempt).

The app is open-source and its code is publicly available for anyone to inspect.

Tech Stack

  • Frontend: Vue 3 + TypeScript + Vite
  • App runtime: Tauri v2
  • Backend: Rust
  • Playback engine: libmpv
  • Persistence: SQLite (media.db) + JSON state files

Getting Started

  1. Prerequisites

Ensure you have the following installed:

  • Node.js 18+ & pnpm 10.x
  • Rust (stable toolchain)
  • Tauri build prerequisites for your specific platform

  • Setup

bash # Automatically prepares runtime libs pnpm install

  1. Run

bash # Launches with auto-injected library paths pnpm tauri dev

Build and Bundle

Common release build commands:

pnpm bundle:mac:release
pnpm bundle:linux:release
pnpm bundle:win:release

Keyboard Shortcuts

  • Space: play/pause
  • Left / Right: seek backward/forward (step from settings)
  • I: toggle playback info panel
  • Double-click video area: toggle fullscreen

Data Storage

App data is stored in Tauri's local app data directory and includes:

  • media.db: default playlist entries, playback history, and local installation/device/sync metadata
  • state.json: UI state and settings (for example active panel, multiple-playlist metadata, and preferences)
  • network_connections.json: saved network connections
  • thumbnails/: captured artwork for Now Playing

Security Note

Saved network credentials are currently persisted in network_connections.json as plain text. Avoid using sensitive production credentials on shared machines.

Troubleshooting

  • If Linux build fails with glib-2.0 / gdk-3.0 / *.pc not found, install the Ubuntu deps:
sudo apt update
sudo apt install -y \
    build-essential \
    curl \
    wget \
    file \
    libgtk-3-dev \
    libayatana-appindicator3-dev \
    librsvg2-dev \
    pkg-config \
    libwebkit2gtk-4.1-dev
  • Linux runtime note: current bundle targets Ubuntu Wayland sessions only; launching under pure X11 is not supported.

  • If build fails with Cannot find libmpv, run:

pnpm setup:libs
  • If pnpm setup:libs fails, confirm release access to:
  • https://github.com/FengZeng/mpv/releases/tag/v0.41.0-r12
  • or set MPV_RELEASE_ASSET_URL to a direct asset URL and retry.

  • If Linux/Windows bundle scripts report missing runtime manifest, generate it on the target platform:

pnpm sync:runtime:linux
pnpm sync:runtime:win
  • If you have a local bundled mpv + dependencies directory for dev testing, use:
pnpm setup:libs /absolute/path/to/mpv-bundle

Author & Maintainer

Soia is an independent project developed and maintained by @FengZeng.

While development is driven independently, issues and feedback are actively reviewed and addressed whenever possible.

If you find Soia useful, consider giving it a ⭐ Star — it helps the project grow and reach more users.

License

This project is licensed under the GNU General Public License v3.0 only (GPL-3.0-only). See LICENSE for the full text.

Extension points exported contracts — how you extend this code

SubtitleProvider (Interface)
(no doc) [2 implementers]
src-tauri/src/online_subtitles.rs
ProgressPayload (Interface)
(no doc)
src/types/media.ts
PlatformIntegration (Interface)
(no doc) [2 implementers]
src-tauri/src/platform/mod.rs
MediaTrack (Interface)
(no doc)
src/types/media.ts
StreamBackend (Interface)
(no doc) [2 implementers]
src-tauri/src/mpv/stream_proxy.rs

Core symbols most depended-on inside this repo

get
called by 164
src-tauri/src/mpv/stream_proxy.rs
resolve
called by 69
src-tauri/src/mpv/ytdlp_resolver.rs
insert
called by 22
src-tauri/src/mpv/stream_proxy.rs
hasKeyword
called by 20
src/mock/mediaInfo.ts
set_option_string
called by 20
src-tauri/src/mpv/handle.rs
handle
called by 17
src-tauri/src/mpv/stream_proxy.rs
normalizePlaybackKey
called by 14
src/utils/playbackDisplay.ts
getMediaKey
called by 14
src/composables/useMediaTracks.ts

Shape

Function 1,362
Class 141
Method 85
Enum 11
Interface 5

Languages

Rust55%
TypeScript45%

Modules by API surface

src-tauri/src/mpv/stream_proxy.rs77 symbols
src-tauri/src/online_subtitles.rs56 symbols
src-tauri/src/commands/persistence.rs56 symbols
src-tauri/src/network/protocols/smb.rs51 symbols
src/composables/usePlaybackFlow.ts50 symbols
src/composables/usePlaylistState.ts46 symbols
src-tauri/src/platform/macos.rs42 symbols
src/composables/settings-sections/generalSection.ts41 symbols
src-tauri/src/commands/playback.rs39 symbols
src/composables/useMediaTracks.ts35 symbols
src/composables/usePlaybackHistory.ts31 symbols
src-tauri/src/store/ui_state_store.rs30 symbols

For agents

$ claude mcp add soia \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page