Windows desktop app for showing synced lyrics in a transparent, always-on-top floating window.
This repo is built with Rust + Tauri 2 and is designed around three runtime modes:
standalone: runs against a local embedded lyrics server on127.0.0.1:1312ytm: runs against a local embedded YTM server on127.0.0.1:1312serverless: connects to a remote lyrics endpoint and exposes a small local control API on127.0.0.1:32145
- Transparent overlay window with no standard window chrome
- Tray-based controls for monitor selection and playback behavior
- Click-through support for non-interactive overlay mode
- Hover-hide behavior with automatic large-layout detection
- Mini-window mode for a regular movable window experience
- Per-mode persisted settings
- Standalone server bootstrap and update flow from GitHub releases
- Deep-link support for packaged builds
The standalone build is the default desktop app variant.
- Connects to
http://127.0.0.1:1312/lyrics - Tray guide shortcut opens
http://localhost:1312/welcomein the browser - Downloads and manages the bundled lyrics server executable automatically
- Checks the latest server release from
dnecra/lyrics-server
The ytm build behaves like standalone, but targets the YTM executable on the same GitHub release.
- Connects to
http://127.0.0.1:1312/lyrics - Downloads and manages
lyrics-ytm-x64.exedirectly from the latest release assets - Uses the product name
Floating Lyrics YTM - Checks the latest server release from
dnecra/lyrics-server
The serverless build targets an externally hosted lyrics source.
- Tries
http://192.168.99.47/lyrics - Falls back to
http://192.168.0.101/lyrics - Runs a local helper API on
127.0.0.1:32145 - Exposes
GET /floating-lyrics/status - Exposes
POST /floating-lyrics/toggle
- Rust 2021
- Tauri 2
- WebView2 on Windows
- Win32 APIs for window behavior, transparency, and topmost handling
This project is Windows-oriented. For local development and packaging, install:
- Rust toolchain
- Tauri CLI
- Microsoft Visual Studio Build Tools with MSVC C++ toolchain
- WebView2 Runtime
The repo uses tauri.cmd to switch the active entrypoint by copying one of src/standalone.rs, src/ytm.rs, or src/serverless.rs into src/main.rs before running Tauri commands.
tauri.cmd dev standalonetauri.cmd dev ytmtauri.cmd dev serverlesstauri.cmd dev-watch standalone
tauri.cmd dev-watch ytm
tauri.cmd dev-watch serverlessIf cargo-watch is not installed, the script falls back to normal cargo tauri dev.
build.batEquivalent to:
tauri.cmd build standalone x64tauri.cmd build standalone x64
tauri.cmd build ytm x64
tauri.cmd build serverless x64
tauri.cmd build all x64Standalone and YTM builds read the GitHub release token from secrets/github-token.txt
first, then fall back to the GITHUB_TOKEN environment variable.
Create the local token file like this:
secrets/github-token.txt
Put only the token on the first non-empty line. Lines starting with # are ignored.
That secrets/ folder is git-ignored, but the standalone and YTM packaged builds include
secrets/github-token.txt as a bundled Tauri resource so the installed app can still use it.
Packaged installers are copied into nsis.
The system tray menu currently includes:
- Local server IP shortcut
- Mini-window mode toggle
- Monitor selection
- Always on top
- Disable hide on hover
- Fancy animations
- Blur Effect
- Pause lyrics
- Open guide
- Restart app
- Quit
Standalone builds also surface server update status/actions in the tray.
Settings are persisted per mode under the app data directory:
settings.normal.jsonsettings.window.json
Tracked settings include:
- selected monitor
- click-through
- always-on-top
- hover-hide preference
- animation toggle
- blur toggle
- mini-window bounds
src: Rust app runtime and platform moduleshtml: minimal web frontend entryscripts: injected browser-side behavior tweaksicons: app iconswindows: NSIS installer hookscapabilities: Tauri capability config
- The app is tuned primarily for Windows behavior.
src/main.rsis generated/swapped bytauri.cmd; avoid treating it as the canonical source of truth.- The standalone updater expects a
.7zasset with a GitHub-providedsha256:digest on the latest release. - The
ytmupdater expects alyrics-ytm-x64.exeasset with a GitHub-providedsha256:digest on the latest release.