A cross-platform music streaming client for Navidrome and Subsonic-compatible servers, built with Rust and Dioxus.
- 🎵 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
- Browser: WebAssembly-based web application
- Progressive Web App: Installable PWA support
- macOS: DMG installer
- Windows: MSI installer and portable EXE (not actively mantained.)
- Linux: AppImage bundle (currently disabled)
- iOS: unsigned .ipa
- Android: apk (currently disabled)
- Download the latest
.ipafile from Releases - Sign the IPA, Personally I sign the ipa using Live Container which I installed using Altstore/Altserver
brew tap ad-archer/casks
brew install --cask rustysoundTo update:
brew upgrade rustysound- Download the latest
.dmgfile from Releases - Open the DMG and drag RustySound to your Applications folder
If macOS says the app is damaged or won't open:
- In Finder, right-click
RustySound.appand choose Open, then confirm. - Or run:
xattr -dr com.apple.quarantine /Applications/RustySound.app
open /Applications/RustySound.appscoop bucket add ad-archer https://github.com/ad-archer/bucket
scoop install ad-archer/rustysoundTo Update:
# Update only RustySound
scoop update rustysound- Download the latest
.exefile from Releases - 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.
Visit rustysound to use the web version.
You can also run RustySound as a Docker container:
- Ensure you have Docker and Docker Compose installed
- Clone this repository or copy
docker-compose.yml - Run the application:
docker-compose up -dThe web interface will be available at http://localhost:8080.
To stop the container:
docker-compose downIf you prefer to run the container directly:
docker run -d -p 8080:80 --name rustysound ghcr.io/ad-archer/rustysound:latest- Rust 1.70+ (install here)
- Dioxus CLI:
curl -sSL https://dioxus.dev/install.sh | sh
- Clone the repository:
git clone https://github.com/AD-Archer/RustySound.git
cd RustySound- Install dependencies:
cargo builddx servejust # list recipes
just serve # dx serve
just serve-ios # iOS simulator dev (safe linker env)
just bundle # macOS + iOS + unsigned IPA
just check # cargo checkUse the helper below instead of raw dx serve --ios if your shell exports Homebrew/Nix compiler flags:
./scripts/serve-ios.shYou can pass normal dx serve options through:
./scripts/serve-ios.sh --device "iPhone 16 Pro"# Web (default)
dx serve --platform web
# Desktop
dx serve --platform desktop
# Mobile (iOS Simulator)
dx serve --platform ios
# Mobile (Android Emulator)
dx serve --platform androiddx bundle --platform desktop --release# iOS
dx bundle --platform ios --release
# Android
dx bundle --platform android --release./scripts/bundle-apple.sh- macOS
.appoutput:dist/apple/macos - iOS
.appoutput: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.shIf 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.shrustysound/
├── 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
- Launch RustySound
- Go to Settings
- Add your Navidrome/Subsonic server details:
- Server URL
- Username
- Password (optional, depending on server setup)
- Navidrome: Full feature support
- Subsonic: Compatible with Subsonic API v1.16.1+
- Airsonic: Compatible servers
- Gonic: Compatible servers
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Make your changes and test thoroughly
- Submit a pull request
- Follow Rust best practices
- Use Dioxus component patterns
- Test on multiple platforms when possible
- Update documentation for new features
Copyright © 2026 AD-Archer. All rights reserved.
- 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