Skip to content

About

Ad-free, privacy-first desktop music player with a lot of customization options. Swappable skins, star ratings, playlists and a local library (mp3, flac, wav, m4a, ogg). Built with Tauri 2, React and TypeScript.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

STARPLAYER desktop music player shown in three skins: a dark purple glass list view of songs, a retro orange pixel-art grid of album covers, and a light sky-blue player screen with clouds STARPLAYER now-playing screens in three skins: a magenta neon player with a dot-matrix audio visualizer, a translucent purple glass player with progress and volume sliders, and a black-and-white retro window with square buttons and a rainbow ring around the album art

STARPLAYER

Download here: https://github.com/GVPV12/STARPLAYER/releases/

A cross-platform music player with a retro vaporwave OS-simulator identity — pixelated windows, chunky bitmap fonts, neon glows, and a skin engine that can swap the entire look (5 built-in skins + a custom skin builder) without touching any component code.

This first pass ships the desktop app (Tauri + React + Vite) and the shared core/UI packages. apps/mobile is an intentionally empty placeholder — see apps/mobile/README.md.

Two STARPLAYER skins side by side: the Monochrome Retro skin with a classic window frame, five filled rating stars and pixel-art cover, and the Gradient Glass skin with a magenta background, yellow cover art and a colorful bar equalizer

⚠️ Windows Security Warning

Windows Defender or other antivirus software may flag STARPLAYER as an unknown or potentially unsafe application. This does not necessarily mean the application contains a virus. STARPLAYER is an independent project that is not digitally signed with a Windows-trusted code-signing certificate. Obtaining and maintaining a code-signing certificate involves additional costs, which I chose not to incur for this small, non-commercial project.

On Windows 11, Smart App Control may automatically block the application because it cannot verify its publisher or establish that the app is trustworthy. If you downloaded STARPLAYER from this official repository and still want to run it, you may need to adjust your Windows security settings. Please note that disabling Smart App Control reduces your system's protection against untrusted applications, and whether you can re-enable it afterward depends on your Windows version and updates. Only proceed if you trust the source and have verified the downloaded files.

Project structure

starplayer/
├── packages/
│   ├── core/     Shared TS logic: types, rating rules, playlist queries,
│   │              volume curve, mood classifier, skin tokens, player store
│   ├── ui/       Shared React components + skin-aware CSS, per-skin
│   │              backgrounds, icons (works today on desktop; RN port notes
│   │              in apps/mobile/README.md)
│   └── assets/   Fonts (self-hosted via @fontsource) + notes on swapping in
│                  real pixel-art/photo backgrounds later
├── apps/
│   ├── desktop/  Tauri 2.x + React + Vite
│   └── mobile/   Placeholder (not scaffolded yet)
└── references/   Visual reference images for each skin

Prerequisites

  • Node.js ≥ 20 and pnpm (corepack enable or npm i -g pnpm)
  • Rust + the Tauri system dependencies for your OS, to run the desktop shell (cargo/rustc). Follow Tauri's prerequisites guide — on Windows this is the MSVC Build Tools + WebView2 (usually already present).

Getting started

pnpm install
pnpm --filter @starplayer/desktop tauri dev

tauri dev starts the Vite dev server and the Rust/WebView shell together. If you only want to iterate on the frontend (no native window), you can run pnpm --filter @starplayer/desktop dev directly, but folder scanning, SQLite, autostart, and file:// audio playback all depend on Tauri's plugins and won't work outside the real shell.

On first launch: Settings → Library folder → Choose folder, or use the prompt on the home screen. STARPLAYER recursively scans for .mp3, .flac, .wav, .m4a, and .ogg, reads embedded tags via music-metadata, and stores everything in a local SQLite database (tauri-plugin-sql).

Other commands

pnpm test                                    # Vitest — packages/core logic
pnpm --filter @starplayer/core test          # same, scoped
pnpm typecheck                                # tsc --noEmit across all packages
pnpm --filter @starplayer/desktop build       # tsc + vite build (frontend only)
pnpm --filter @starplayer/desktop tauri build # full installer build (needs Rust)

Skins

Five built-in skins live in packages/core/src/skin/skins.ts: Vaporwave (default), Neo-Brutalist Cute, Gradient Glass, Monochrome Retro, and Soft Glass. Every token (bg, surface, border, textPrimary, accent1/2, fonts, radius, glow) is read from CSS custom properties by packages/ui components — nothing is hardcoded, so a skin swap is instant. Switch modes in Settings: Manual, Random on launch, or Beat-adaptive (maps a track's cached BPM-derived mood to a skin; the mapping table is user-editable). Backgrounds are currently CSS-only (gradients/canvas-free patterns) — see packages/assets/images/README.md for how to drop in real pixel art/photos later.

A note on fonts

The brief named PixelOperator (body/display) and Chicago/Geneva (Monochrome Retro) — none of those are redistributable via npm (PixelOperator is personal-use-only; Chicago/Geneva are Apple system fonts). We substituted freely-licensed, visually-equivalent bitmap fonts (Silkscreen, DotGothic16), self-hosted via @fontsource/* in packages/assets. If you have a proper license for the original fonts, drop the .ttf files in packages/assets/fonts/ and update packages/assets/src/fonts.css — every component already reads fonts through the --font-display/--font-body tokens, so nothing else changes.

Style notes for future changes

  • Send targeted patches, not whole-file rewrites, when iterating.
  • Every interactive element (volume slider, rating stars, buttons, progress bar, playlist carousel) is styled per-skin via data-skin attribute selectors in each component's CSS Module — never a bare default control.
  • New dependencies beyond what's already here should be confirmed first.

About

Ad-free, privacy-first desktop music player with a lot of customization options. Swappable skins, star ratings, playlists and a local library (mp3, flac, wav, m4a, ogg). Built with Tauri 2, React and TypeScript.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages