Skip to content
mrbvrzPublic

About

Ultra-lightweight macOS menu bar internet radio player powered by Tauri v2 & Rust. Native HUD vibrancy, real-time ICY metadata & low memory footprint.

Topics

Resources

Code of conduct

Contributing

Security policy

Accessibility

Stars

1 star

Watchers

0 watching

Forks

Latest commit

ย 

History

134 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Squelch

Squelch App Icon

Modern, ultra-lightweight, cross-platform menu bar internet radio player powered by Tauri v2 & Rust.
Featuring a native macOS HUD Glass interface, real-time Rust ICY metadata extraction, broadcast show schedules with autoplay, and public directory discovery.

License: MIT Version 0.1.2 Tauri v2 Platform


Interface Showcase

Menu Bar Tray Popover
Compact 2-click HUD player with live waveform & sleep timer

Squelch Menu Bar Tray Popover

Main Station Management
Full-featured broadcast directory & preferences

Squelch Main Management
About Squelch
Native macOS dark frosted glass HUD dialog

Squelch About Window

Download & Installation

macOS (Apple Silicon & Intel)

Option 1: 1-Line Terminal Install (Recommended โ€” Fast & Hassle-Free)

Run this single command in your Terminal. It downloads the latest release, installs it directly to /Applications, configures Gatekeeper permissions automatically, and launches Squelch:

curl -fsSL https://raw.githubusercontent.com/mrbvrz/squelch/main/install.sh | bash

Option 2: Manual Download (.dmg or .zip)

Download the ready-to-run package from GitHub Releases:

Tip

First-time launch on macOS: Because Squelch is an independent open-source app distributed outside the paid Apple Developer Program, macOS Gatekeeper may display a prompt on first launch.

To open without issues:

  1. Drag Squelch.app into /Applications.
  2. Right-Click (or Control-Click) Squelch.app in /Applications and select Open.
  3. Click Open on the confirmation dialog. (You only need to do this once).

Alternatively, run this in Terminal after dragging to /Applications:

xattr -cr /Applications/Squelch.app

Windows & Linux

Note

Windows (x64) and Linux (AppImage / .deb) support is in active development!
Squelch's core backend is written in standard Rust with Tauri v2, providing 100% native cross-platform support with minimal system resource consumption.


Support the Project

Trakteer Sayaย  Buy Me A Coffee


Key Highlights

  • Ultra-Lightweight Native Performance (Tauri v2 + Rust)
    • Low RAM consumption (~25โ€“35 MB memory footprint vs. ~160+ MB in legacy frameworks).
    • Instant cold startup under 300ms using system-native WebKit webviews.
    • Robust Rust backend handling atomic JSON persistence, local HTTP proxying, and global window state synchronization.
  • macOS HUD Glass Popover & Animated Waveform
    • Native macOS HUD translucency window with frosted Bento layout (backdrop-filter: blur(24px) saturate(180%)).
    • 12-frame pure white Signed Distance Field (SDF) capsule waveform animation in the menu bar with zero CPU overhead.
    • Quick two-click playback, live audio signal indicators, sleep timer presets (15m, 30m, 60m) with 1-minute remaining desktop notifications, and instant category filters.
  • Show Schedules & Automated Autoplay
    • Configure broadcast programs (e.g. Sarapan Seru on Jak 101 FM, Mondayโ€“Friday 06:00โ€“10:00).
    • Background scheduler engine with daily slot deduplication and native desktop notifications.
    • Optional Autoplay switch to automatically tune in and stream when your show begins.
    • Live on-air pulsating badge (๐ŸŸข On Air Now) indicating active broadcasts.
  • Rust Asynchronous ICY Metadata Proxy & Multi-Codec Engine
    • Background audio engine combining HTML5 Audio with hls.js supporting MP3, AAC / HE-AAC, OGG / Opus, and HLS (.m3u8).
    • High-performance local loopback proxy server (127.0.0.1) built with axum and tokio, requesting Icy-MetaData: 1, extracting StreamTitle chunks in real time without audio glitching.
    • Automatic stream URL resolver supporting direct streams, .m3u, .pls, and Noice catalog endpoints (open.noice.id).
  • Unified Sidebar & Instant Keyboard Navigation
    • Integrated mini player deck docked right below the search bar on the left sidebar.
    • Global โŒ˜F (macOS) / Ctrl+F (Windows/Linux) search shortcut with key badge and auto-focus.
  • Open Public Radio Directory
    • Search global stations powered by the radio-browser.info directory with automatic deduplication.
    • Country selection dropdown with emoji flags and inline audio stream previewing.
  • Listening Analytics
    • Weekly, Monthly, and Yearly listening duration tracking with interactive bar charts.
    • Resolves actual station names and artwork in the listening statistics deck.
  • Personalization & Custom Themes
    • System, Light, and Dark window themes matching macOS neutral graphite tones.
    • 8 native macOS accent color palettes and adjustable frosted glass opacity.
    • Custom system font selector with automatic local font discovery.
    • Atomic JSON data backup and restore.

Architecture & Technical Specifications

Squelch follows a modern, decoupled architecture pairing a high-performance Rust backend (via Tauri v2) with a responsive React 18 + TypeScript + Vite frontend:

squelch/
โ”œโ”€โ”€ src-tauri/                 # Native Rust Backend (Tauri v2)
โ”‚   โ”œโ”€โ”€ Cargo.toml             # Rust package manifest & release profiles
โ”‚   โ”œโ”€โ”€ tauri.conf.json        # Tauri v2 window and bundle configuration
โ”‚   โ”œโ”€โ”€ capabilities/          # Fine-grained security capabilities & permissions
โ”‚   โ””โ”€โ”€ src/
โ”‚       โ”œโ”€โ”€ main.rs            # Application entry point
โ”‚       โ”œโ”€โ”€ lib.rs             # Tray coordinator, menu event handlers & vibrancy
โ”‚       โ”œโ”€โ”€ commands.rs        # IPC Tauri command handlers (CRUD, audio, notif)
โ”‚       โ”œโ”€โ”€ store.rs           # Atomic JSON store (AppStore) & state synchronization
โ”‚       โ””โ”€โ”€ icy_proxy.rs       # Asynchronous ICY metadata demuxer (Tokio + Axum)
โ”œโ”€โ”€ src/                       # Frontend Web Application (React 18 + Vite)
โ”‚   โ”œโ”€โ”€ app/                   # Main management window (App.tsx, styles.css)
โ”‚   โ”œโ”€โ”€ tray/                  # Menu bar tray popover view (TrayPopoverApp.tsx)
โ”‚   โ”œโ”€โ”€ audio/                 # Headless audio worker (audio-renderer.ts)
โ”‚   โ”œโ”€โ”€ bridge/                # Tauri IPC bridge & cross-window sync (tauri-bridge.ts)
โ”‚   โ”œโ”€โ”€ components/            # UI components (StationAvatar, Icons, Modals)
โ”‚   โ”œโ”€โ”€ i18n/                  # Bilingual localization (Indonesian & English)
โ”‚   โ”œโ”€โ”€ types/                 # Shared domain TypeScript interfaces & schemas
โ”‚   โ””โ”€โ”€ utils/                 # Visual appearance, playlist parsers, player state
โ”œโ”€โ”€ index.html                 # Main window HTML entry
โ”œโ”€โ”€ tray.html                  # Tray popover HTML entry
โ”œโ”€โ”€ audio.html                 # Audio transport worker HTML entry
โ”œโ”€โ”€ vite.config.ts             # Vite multi-entry build configuration
โ”œโ”€โ”€ tsconfig.json              # Strict TypeScript configuration
โ”œโ”€โ”€ ARCHITECTURE.md            # Detailed Architecture & Technical Specifications
โ””โ”€โ”€ CHANGELOG.md               # Version Release History

For detailed specifications on the Rust ICY demuxing protocol, state synchronization, and security model, see ARCHITECTURE.md.

For the complete version history, see CHANGELOG.md.


Getting Started

Prerequisites

  • Node.js >= 20.x
  • npm >= 10.x
  • Rust >= 1.78 (with cargo)
  • macOS 12+ (Apple Silicon or Intel), Windows 10/11, or Linux

Installation

# Clone the repository
git clone https://github.com/mrbvrz/squelch.git
cd squelch

# Install frontend dependencies
npm install

Build & Run

# Launch Squelch in development mode (starts Vite dev server & Tauri debug app)
npm run dev

# Or run typecheck and test suites
npm run typecheck
npm test

Development Scripts

Command Description
npm run dev Launches Squelch in live development mode (tauri dev).
npm run build Builds the optimized production frontend bundle (dist-ui/).
npm run tauri:build Builds the production application executable via Tauri.
npm run tauri:dist Creates the production macOS bundle, codesigns, and generates .dmg.
npm test Runs unit and architecture verification test suites with Vitest.
npm run typecheck Runs strict TypeScript verification across all code (tsc --noEmit).
npm run lint Checks TypeScript and React code with ESLint.
npm run format Formats all source files, CSS, HTML, and Markdown with Prettier.
npm run format:check Verifies code formatting without modifying files.

Data Storage

All user configuration, schedules, and listening statistics are stored atomically in the operating system's standard application support folder:

  • macOS: ~/Library/Application Support/com.mrbvrz.squelch/
  • Windows: %APPDATA%\com.mrbvrz.squelch\
  • Linux: ~/.config/com.mrbvrz.squelch/

Files persisted:

  • stations.json โ€” Station library and category groups
  • schedules.json โ€” Configured show schedules, alerts, and autoplay preferences
  • settings.json โ€” User preferences, theme, font, and shortcuts
  • stats.json โ€” Listening activity and duration history (with station names & logos)

Author & License

About

Ultra-lightweight macOS menu bar internet radio player powered by Tauri v2 & Rust. Native HUD vibrancy, real-time ICY metadata & low memory footprint.

Topics

Resources

Code of conduct

Contributing

Security policy

Accessibility

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages