Modern desktop music streaming player with syllable-synced lyrics and reactive dynamic visuals.
Preview • Architecture • Getting Started • Building • Docs • Contributing • License
Note
Liner client connects to the official Liner API backend for music catalog, streaming playback, and synchronized lyrics.
The renderer follows Feature-Sliced Design: imports only point down the layers (app → widgets → features → entities → shared).
liner/desktop/
├── electron/
│ ├── main.ts # Main process: windows, IPC, updates, deep links
│ ├── preload.ts # Context bridge between the renderer and the main process
│ ├── local-tracks/ # Imported audio files and the liner-local:// protocol
│ ├── youtube/ # Helpers for the YouTube playback fallback
│ ├── overlay.ts # Floating overlay player window
│ ├── discord.ts # Discord Rich Presence
│ ├── crypto.ts # In-memory WebAssembly request signer
│ └── signer.ts # Embedded WebAssembly binary
├── native/ # Windows snap preview add-on
├── src/
│ ├── app/ # App shell, routes, providers, global styles
│ ├── widgets/ # Screen blocks: sidebar, header, player bar, fullscreen player, modals
│ ├── features/ # player, lyrics, library, search, collection, settings, overlay, …
│ ├── entities/ # track, playlist, artist, user
│ ├── shared/ # API client, storage, UI kit, contracts, utilities
│ ├── languages/ # Translations for 11 languages
│ └── main.tsx # Vite entry point
├── docs/ # Design, storage, privacy, translations, FAQ
├── package.json
└── vite.config.ts
- Node.js
v22+and pnpmv10+ - Windows 10/11, macOS or Linux
git clone https://github.com/tryliner/desktop.git
cd desktop
pnpm install# Electron app with Vite hot reload
pnpm dev# Tests only
pnpm test
# Everything CI runs on a pull request: lint, format check, types, build, tests
pnpm check# Linux (AppImage & .deb)
pnpm electron:build:linux
# Windows (.exe installer)
pnpm electron:build:win
# macOS (.dmg & .zip, for both Intel and Apple Silicon)
pnpm electron:build:macThe macOS build produces x64 (Intel) and arm64 (Apple Silicon) packages. To build only one, add --arm64 or --x64. Packages are placed in the release/ directory.
- Design guidelines: tokens, glass surfaces, motion and building blocks
- Storage: where data lives on your device and what "Clear cache" removes
- Privacy: everything the app sends off your device
- Translations: adding strings, plurals and languages
- FAQ: answers to the most common problems
Bug fixes, small features, translations and docs fixes are welcome. Read CONTRIBUTING.md and AGENTS.md before you open a pull request, and report bugs with the issue forms. Questions and ideas go to Discussions, security issues to SECURITY.md. The license limits what a fork is allowed to do.
@braccato/core&@braccato/parsers— Synced lyrics components and format parsers.- Kawarp — WebGL background shader the fullscreen background is based on.
- Solar Icons & MingCute Icons — Icon collections.
Liner is distributed under the Liner Source-Available & Non-Commercial Contribution License.
- Allowed: Personal non-commercial usage, local builds, and upstream contributions.
- Prohibited: Commercial distribution, public competing forks, extracting core algorithms for third-party products, or running any build (a private one included) against servers other than the official Liner services.
See LICENSE for details.

