Skip to content

RustySound is a music player for subsonic api applications such as navidrome using native OS features for Web, Desktop and Mobile devices. Its built dioxus and tailwind css

License

Notifications You must be signed in to change notification settings

AD-Archer/RustySound

Repository files navigation

RustySound

A cross-platform music streaming client for Navidrome and Subsonic-compatible servers, built with Rust and Dioxus.

album page art logo album

Features

  • 🎵 Multi-platform Support: Available on Desktop (macOS, Windows, Linux), Mobile (iOS, Android), and Web
  • 🎧 Audio Playback: High-quality audio streaming with queue management
  • 📱 Server Integration: Connect to Navidrome and Subsonic-compatible music servers
  • 💾 Local Storage: Persistent settings and playback state across sessions
  • 🎼 Playlist Management: Create and manage playlists
  • 🔍 Search & Browse: Browse your music library by artists, albums, and tracks
  • 🎚️ Audio Controls: Play, pause, skip, shuffle, and repeat functionality
  • 🌙 Modern UI: Clean, responsive interface built with Tailwind CSS

Supported Platforms

Web

  • Browser: WebAssembly-based web application
  • Progressive Web App: Installable PWA support

Desktop

  • macOS: DMG installer
  • Windows: MSI installer and portable EXE (not actively mantained.)
  • Linux: AppImage bundle (currently disabled)

Mobile

  • iOS: unsigned .ipa
  • Android: apk (currently disabled)

Installation

Desktop

IOS

  1. Download the latest .ipa file from Releases
  2. Sign the IPA, Personally I sign the ipa using Live Container which I installed using Altstore/Altserver

macOS

Homebrew

brew tap ad-archer/casks
brew install --cask rustysound

To update:

brew upgrade rustysound

DMG

  1. Download the latest .dmg file from Releases
  2. Open the DMG and drag RustySound to your Applications folder

If macOS says the app is damaged or won't open:

  1. In Finder, right-click RustySound.app and choose Open, then confirm.
  2. Or run:
xattr -dr com.apple.quarantine /Applications/RustySound.app
open /Applications/RustySound.app

Windows

Scoop

scoop bucket add ad-archer https://github.com/ad-archer/bucket
scoop install ad-archer/rustysound

To Update:

# Update only RustySound
scoop update rustysound

Executable

  1. Download the latest .exe file from Releases
  2. Open the exe and install RustySound

Note: Antivirus may flag this installer since this exe is not verified by windows.

Note: release artifacts may be unsigned/ad-hoc signed when Apple notarization secrets are not configured in CI. For public distribution without warnings, a paid Apple Developer signing + notarization flow is required.

Web

Visit rustysound to use the web version.

Docker Deployment

You can also run RustySound as a Docker container:

  1. Ensure you have Docker and Docker Compose installed
  2. Clone this repository or copy docker-compose.yml
  3. Run the application:
docker-compose up -d

The web interface will be available at http://localhost:8080.

To stop the container:

docker-compose down

Manual Docker Run

If you prefer to run the container directly:

docker run -d -p 8080:80 --name rustysound ghcr.io/ad-archer/rustysound:latest

Prerequisites

  • Rust 1.70+ (install here)
  • Dioxus CLI: curl -sSL https://dioxus.dev/install.sh | sh

Setup

  1. Clone the repository:
git clone https://github.com/AD-Archer/RustySound.git
cd RustySound
  1. Install dependencies:
cargo build

Running the Application

Development Server

dx serve

Just Shortcuts

just              # list recipes
just serve        # dx serve
just serve-ios    # iOS simulator dev (safe linker env)
just bundle       # macOS + iOS + unsigned IPA
just check        # cargo check

iOS Simulator Development

Use the helper below instead of raw dx serve --ios if your shell exports Homebrew/Nix compiler flags:

./scripts/serve-ios.sh

You can pass normal dx serve options through:

./scripts/serve-ios.sh --device "iPhone 16 Pro"

Specific Platforms

# Web (default)
dx serve --platform web

# Desktop
dx serve --platform desktop

# Mobile (iOS Simulator)
dx serve --platform ios

# Mobile (Android Emulator)
dx serve --platform android

Building for Production

Desktop Bundles

dx bundle --platform desktop --release

Mobile Builds

# iOS
dx bundle --platform ios --release

# Android
dx bundle --platform android --release

Apple Bundles (.app + unsigned .ipa)

./scripts/bundle-apple.sh
  • macOS .app output: dist/apple/macos
  • iOS .app output: dist/apple/ios
  • Unsigned iOS .ipa: dist/apple/ios/*-unsigned.ipa

By default, the script builds for physical iOS devices (aarch64-apple-ios). To build for the simulator instead:

IOS_TARGET=aarch64-apple-ios-sim ./scripts/bundle-apple.sh

If your shell exports Homebrew C/C++ flags (for example LDFLAGS/LIBRARY_PATH for libiconv), prefer this script over raw dx bundle --ios so those vars are unset for iOS linking.

You can also override icon source/name if needed:

APP_NAME="RustySound" IOS_ICON_SOURCE="/absolute/path/to/icon-1024.png" ./scripts/bundle-apple.sh

Project Structure

rustysound/
├── assets/                 # Static assets (icons, styles, etc.)
├── src/
│   ├── main.rs            # Application entry point
│   ├── components/        # Reusable UI components
│   │   ├── app.rs         # Main app component
│   │   ├── player.rs      # Audio player controls
│   │   ├── sidebar.rs     # Navigation sidebar
│   │   └── views/         # Page components
│   │       ├── home.rs    # Home/dashboard
│   │       ├── albums.rs  # Album browser
│   │       ├── artists.rs # Artist browser
│   │       ├── queue.rs   # Playback queue
│   │       └── settings.rs # App settings
│   ├── api/               # Server API integration
│   ├── db/                # Local database/storage
│   └── components.rs      # Component exports
├── Cargo.toml             # Rust dependencies
├── Dioxus.toml           # Dioxus configuration
└── tailwind.css          # Tailwind CSS styles

Configuration

Server Connection

  1. Launch RustySound
  2. Go to Settings
  3. Add your Navidrome/Subsonic server details:
    • Server URL
    • Username
    • Password (optional, depending on server setup)

Supported Servers

  • Navidrome: Full feature support
  • Subsonic: Compatible with Subsonic API v1.16.1+
  • Airsonic: Compatible servers
  • Gonic: Compatible servers

Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/your-feature
  3. Make your changes and test thoroughly
  4. Submit a pull request

Development Guidelines

  • Follow Rust best practices
  • Use Dioxus component patterns
  • Test on multiple platforms when possible
  • Update documentation for new features

License

Copyright © 2026 AD-Archer. All rights reserved.

Acknowledgments

  • Built with Dioxus - A Rust UI framework
  • Audio playback powered by Web Audio API and native platform APIs
  • Icons and UI design inspired by modern music streaming applications

About

RustySound is a music player for subsonic api applications such as navidrome using native OS features for Web, Desktop and Mobile devices. Its built dioxus and tailwind css

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors 2

  •  
  •  

Languages