pureplayer Piotr Zieliński
winget install --id=pzielinski.pureplayer -e pureplayer is a minimal, keyboard-driven desktop video player built on Tauri 2 with a React 19 frontend.
winget install --id=pzielinski.pureplayer -e pureplayer is a minimal, keyboard-driven desktop video player built on Tauri 2 with a React 19 frontend.
A minimal, keyboard-driven desktop video player.
Built as a Tauri 2 desktop app with a React 19 + TypeScript frontend on the TanStack stack (Router, Query, Hotkeys) and shadcn/ui + Tailwind v4.
nvm use before any npm command.rustc, cargo).If the Rust toolchain or system prerequisites are missing, npm start fails fast with
a build error from Cargo.
nvm use
npm install
scripts/fetch-ffmpeg.sh # download the bundled ffmpeg/ffprobe sidecars (required before any build)
scripts/fetch-ffmpeg.sh downloads statically-linked ffmpeg+ffprobe for all
supported targets (macOS arm64/x64, Windows x64, Linux x64) into src-tauri/binaries/
(gitignored, SHA-256 pinned). cargo fails to build without the binary for your host
triple present. macOS binaries are GPLv3, Windows and Linux are LGPLv3 - see docs/adr.md.
| Command | Description |
|---|---|
npm start | Run the app in development (tauri dev). |
npm run tauri build | Build the distributable desktop bundle. |
Each launch writes a fresh pureplayer-.log to the OS app-log dir (macOS
~/Library/Logs/com.pzielinski.pureplayer/).
Open files (Mod+O) replaces it, drag & drop
appends (folders recursed, deduped, sorted). Audio files are first-class playlist items.ffmpeg/ffprobe are bundled as Tauri sidecars - the app is standalone.Up/Down/M volume + mute, [/] speed 0.5x-2x, auto-advance with repeat (R)
and shuffle (S).Mod+Shift+R), fit modes (F), zoom (=/-), reset (Mod+0). Transforms are session-sticky.Mod+K) - every runnable action, each with its own global hotkey.Mod+Shift+M) - hide the viewport and shrink the window to just the playlist +
transport bar.Mod+Shift+J) - bottom-docked view of the app logs as they stream in: key=value
runs are searchable with field filters like level:error path:/tmp/x.mkv; Clear in its header.
Hidden by default, hidden on fullscreen, hidden in mini player.Mod+,) - rebind any hotkey (conflicts rejected), playback/UI defaults, theme
(light/dark/system + per-token color customization), reveal-transport-on-hover toggle.Not yet: subtitles, playlist persistence.
The Release workflow builds installers for all three OSes and
publishes them to a GitHub Release. It is manual only: GitHub -> Actions -> "Release" -> "Run
workflow", enter a tag (e.g. v0.1.0). It produces a single universal macOS .dmg, a Windows
installer, and a Linux .AppImage, attached to a draft Release. The binaries are unsigned:
on macOS right-click the app and choose Open; on Windows choose "More info -> Run anyway".
To take installers down later, delete the Release (and its tag) or remove individual assets - the download links 404 immediately. Anyone who already downloaded keeps their local copy.
Release builds ship the Tauri v2 updater: on startup (and via Settings -> Updates -> Check for
updates) the app checks the latest GitHub Release's latest.json and, on a newer version, offers
a one-click Update now that downloads the signed artifact and relaunches. Update artifacts
(.sig files + latest.json) are produced by the Release workflow, which signs them using two
repo secrets: TAURI_SIGNING_PRIVATE_KEY and TAURI_SIGNING_PRIVATE_KEY_PASSWORD (the matching
public key is baked into src-tauri/tauri.conf.json). Caveat: a build can only auto-update to
releases published after it - the first updater-enabled release is still a manual download, and
the pre-updater v0.1.0 cannot retro-update.