WinLux is a lightweight, Windows-only desktop utility built with Tauri 2 + React. It lets you quickly switch Windows light/dark themes, stay in the system tray, manage app language preferences, and use Sunrise/Sunset Auto Theme Switching.
- Features
- Screenshots
- Tech Stack
- Requirements
- Quick Start
- Lazy Window Lifecycle
- Scripts
- Validation
- Project Structure
- Sunrise/Sunset Auto Theme Notes
- OpenStreetMap Attribution
- Language Notes
- License
- One-click switch between dark and light mode (for both Apps and System).
- Reads and writes Windows theme settings from:
HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize
- System tray support:
- Open main window
- Quick switch to dark/light mode
- Toggle Sunrise/Sunset Auto Theme
- Change language preference
- Quit app
- Close-to-tray behavior (closing the window hides it instead of exiting).
- Language preference support (
autofollow-system or manual selection). - Sunrise/Sunset settings panel:
- Resolve address to coordinates for Sunrise/Sunset Auto Theme setup (OpenStreetMap Nominatim)
- Save a location and query sunrise/sunset for a target date
- Automatically switch Apps/System theme by local sunrise/sunset transitions
- NSIS installer language selection with 30 language options.
| Main Window | Tray Menu |
|---|---|
![]() |
![]() |
| Main interface | Tray quick actions |
- Frontend: React 18 + TypeScript + Vite
- Desktop runtime: Tauri 2
- Backend: Rust +
winreg+reqwest+sunrise+tokio - Package manager: Bun
- Windows 10 or Windows 11
- Bun (recommended latest stable)
- Rust stable toolchain (MSVC target)
- Tauri prerequisites for Windows (WebView2 / build tools)
- Internet access (only required for address geocoding via OpenStreetMap Nominatim)
Install from WinGet:
winget install Lparksi.WinLuxOr build/run from source:
bun install
bun run tauri:devThe app starts without rendering the main window and can be controlled from the tray icon.
- On startup, WinLux does not create the main WebView window (tray + background features only).
- Clicking tray left button or "Open Main Window" creates and shows the UI on demand.
- Closing the main window hides it first, then destroys the window instance after 3 minutes.
- Reopening from tray within 3 minutes cancels pending destroy and keeps the window alive.
| Command | Description |
|---|---|
bun run dev |
Run Vite frontend only (http://localhost:5173) |
bun run build |
Type-check and build frontend assets into dist/ |
bun run typecheck |
Run TypeScript checks only |
bun run i18n:check |
Validate locale keys and placeholders |
bun run tauri:dev |
Run the Tauri desktop app in development mode |
bun run tauri:build |
Build desktop distributables (NSIS target) |
bun run release |
Build release with version inferred from latest Git tag |
bun run icon:gen |
Generate Windows icon assets |
Before opening a PR, run at least:
bun run typecheck
cargo test -p winlux.
├─ src/ # React frontend and Tauri bridge
│ └─ lib/tauri.ts # invoke wrappers + shared TS contracts
├─ src-tauri/src/ # Rust backend (commands, tray, i18n)
├─ src-tauri/icons/ # App/package icons
├─ scripts/ # Build/release helper scripts
└─ dist/ # Frontend output consumed by Tauri builds
- Geocoding endpoint:
https://nominatim.openstreetmap.org/search
- Sunrise/Sunset Auto Theme worker:
- Runs in the background and applies light/dark based on local sunrise/sunset at saved coordinates.
- If Sunrise/Sunset Auto Theme is enabled but no location is saved, the app reports a configuration-required error.
- Settings stored in:
HKCU\Software\WinLux\SolarAddressHKCU\Software\WinLux\SolarDisplayNameHKCU\Software\WinLux\SolarLatitudeHKCU\Software\WinLux\SolarLongitudeHKCU\Software\WinLux\SolarAutoThemeEnabled
- WinLux uses OpenStreetMap Nominatim (
https://nominatim.openstreetmap.org/search) to convert user-entered addresses into coordinates for the Sunrise/Sunset Auto Theme feature. - Geocoding data is © OpenStreetMap contributors, licensed under ODbL 1.0.
- Copyright and license details:
https://www.openstreetmap.org/copyright
- Supported language options (30):
- English, Simplified Chinese, Traditional Chinese, Japanese, Korean, Thai, Vietnamese, Indonesian, French, German, Italian, Spanish (Spain), Spanish (International), Portuguese (Portugal), Portuguese (Brazil), Russian, Polish, Turkish, Ukrainian, Czech, Hungarian, Greek, Bulgarian, Romanian, Arabic, Dutch, Danish, Finnish, Norwegian, Swedish
- Main-window UI strings are localized for all supported language options above.
- Tray menu strings are loaded from
src/locales/tray-texts.json. - Language preference is stored at:
HKCU\Software\WinLux\LanguagePreference
MIT. See LICENSE.

