{"id":37731352,"url":"https://github.com/ad-archer/rustysound","last_synced_at":"2026-04-28T21:01:07.985Z","repository":{"id":332220844,"uuid":"1133101454","full_name":"AD-Archer/RustySound","owner":"AD-Archer","description":"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","archived":false,"fork":false,"pushed_at":"2026-04-27T17:32:40.000Z","size":6403,"stargazers_count":8,"open_issues_count":7,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-27T18:32:12.644Z","etag":null,"topics":["dioxus","dioxus-desktop","dioxus-web","navidrome","navidrome-client","opensubsonic","opensubsonic-client","rust","subsonic-client","tailwindcss"],"latest_commit_sha":null,"homepage":"http://rustysound-demo.adarcher.app/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AD-Archer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":null,"patreon":"ad_archer","open_collective":null,"ko_fi":"ad_archer","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"adarcher","thanks_dev":null,"custom":null}},"created_at":"2026-01-12T22:10:14.000Z","updated_at":"2026-04-27T16:49:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AD-Archer/RustySound","commit_stats":null,"previous_names":["ad-archer/rustysound"],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/AD-Archer/RustySound","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AD-Archer%2FRustySound","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AD-Archer%2FRustySound/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AD-Archer%2FRustySound/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AD-Archer%2FRustySound/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AD-Archer","download_url":"https://codeload.github.com/AD-Archer/RustySound/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AD-Archer%2FRustySound/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32399010,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T19:38:08.556Z","status":"ssl_error","status_checked_at":"2026-04-28T19:37:55.688Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dioxus","dioxus-desktop","dioxus-web","navidrome","navidrome-client","opensubsonic","opensubsonic-client","rust","subsonic-client","tailwindcss"],"created_at":"2026-01-16T13:50:48.999Z","updated_at":"2026-04-28T21:01:07.979Z","avatar_url":"https://github.com/AD-Archer.png","language":"Rust","funding_links":["https://patreon.com/ad_archer","https://ko-fi.com/ad_archer","https://buymeacoffee.com/adarcher"],"categories":[],"sub_categories":[],"readme":"# RustySound\n\nA lightweight cross-platform music streaming client for Navidrome and Subsonic-compatible servers, built with Rust and Dioxus, \u003c 15mb\n\n\u003cdiv style=\"display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin: 20px 0;\"\u003e\n  \u003cimg src=\"https://www.antonioarcher.com/images/projects/rustysound/desktop/sound_menu.webp\" alt=\"RustySound desktop screenshot\" style=\"width: 100%; border-radius: 6px;\" /\u003e\n  \u003cimg src=\"https://www.antonioarcher.com/images/projects/rustysound/desktop/shot.gif\" alt=\"RustySound lyrics demo\" style=\"width: 100%; border-radius: 6px;\" /\u003e\n  \u003cimg src=\"https://www.antonioarcher.com/images/projects/rustysound/desktop/desktoptheme1.webp\" alt=\"RustySound desktop theme\" style=\"width: 100%; border-radius: 6px;\" /\u003e\n  \u003cimg src=\"https://www.antonioarcher.com/images/projects/rustysound/desktop/desktoptheme2.webp\" alt=\"RustySound desktop theme variant\" style=\"width: 100%; border-radius: 6px;\" /\u003e\n  \u003cimg src=\"https://www.antonioarcher.com/images/projects/rustysound/mobile/mobiletheme1.webp\" alt=\"RustySound mobile theme\" style=\"width: 100%; border-radius: 6px;\" /\u003e\n    \u003cimg src=\"https://github.com/user-attachments/assets/bc93c22e-bcf1-4a41-9d3c-fdba82a36214\" alt=\"RustySound album view\" style=\"width: 100%; border-radius: 6px;\" /\u003e\n\n\u003c/div\u003e\n\n## Features\n\n- **Multi-platform**: Desktop (macOS, Windows, Linux), Mobile (iOS, Android), and Web\n- **Audio streaming**: High-quality playback with queue management\n- **Server integration**: Connect to Navidrome and Subsonic-compatible servers\n- **Offline support**: Local storage, downloads, persistent settings and playback state\n- **Playlist management**: Create and organize playlists\n- **Browse and search**: Find music by artist, album, or track\n- **Full controls**: Play, pause, skip, shuffle, repeat, and more\n- **Modern UI**: Clean, responsive Tailwind CSS interface\n- **Customizable themes**: Multiple built-in themes with CSS overrides\n\n## Supported Platforms\n\n| Platform    | Installation                                               |\n| ----------- | ---------------------------------------------------------- |\n| **iOS**     | AltStore (recommended), manual sideloading, or source feed |\n| **Android** | APK from Releases                                          |\n| **macOS**   | Homebrew, DMG installer                                    |\n| **Windows** | Scoop, standalone EXE                                      |\n| **Linux**   | Flatpak                                                    |\n| **Web**     | Browser + PWA, Docker                                      |\n\n\u003e **Note**: Android is feature-aligned but not under active day-to-day development and may have platform-specific issues.\n\n## Installation\n\n### iOS\n\n#### AltStore Installation (Recommended)\n\nThis is the easiest way to install and keep RustySound updated on iOS.\n\n\u003ca href=\"https://stikstore.app/altdirect/?url=https://ad-archer.github.io/packages/source.json\" target=\"_blank\"\u003e\n\u003cimg src=\"https://github.com/CelloSerenity/altdirect/blob/main/assets/png/AltSource_Blue.png?raw=true\" alt=\"Add to AltStore\" width=\"200\"\u003e\n\u003c/a\u003e\n\nOr manually add `https://ad-archer.github.io/packages/source.json` as a source in:\n\n- [AltStore](https://altstore.io/) or [AltServer](https://altstore.io/) for Mac/Windows\n- [LiveContainer](https://github.com/LiveContainer/LiveContainer) on iOS\n\n#### Manual Sideloading\n\n1. Download the latest `.ipa` file from [Releases](https://github.com/AD-Archer/RustySound/releases)\n2. Use [AltStore](https://altstore.io/), [Sideloadly](https://sideloadly.io/), or [Xcode](https://developer.apple.com/xcode/) to install\n\n### Android\n\n1. Download the latest `.apk` file from [Releases](https://github.com/AD-Archer/RustySound/releases)\n2. Enable \"Installation from unknown sources\" in Settings\n3. Install the APK and launch RustySound\n\n### Desktop\n\n#### macOS\n\n##### Homebrew (Recommended)\n\n```bash\nbrew tap ad-archer/homebrew-tap\nbrew install --cask rustysound\n```\n\nTo update:\n\n```bash\nbrew upgrade rustysound\n```\n\n##### DMG Installer\n\n1. Download the latest `.dmg` file from [Releases](https://github.com/AD-Archer/RustySound/releases)\n2. Open the DMG and drag RustySound to your Applications folder\n\n**Troubleshooting**: If macOS says the app is damaged or won't open:\n\n```bash\n# Option 1: Right-click in Finder and choose Open, then confirm\n# Option 2: Run this command\nxattr -dr com.apple.quarantine /Applications/RustySound.app\nopen /Applications/RustySound.app\n```\n\n#### Windows\n\n##### Scoop (Recommended)\n\n```powershell\nscoop bucket add ad-archer https://github.com/ad-archer/scoop\nscoop install ad-archer/rustysound\n```\n\n##### Portable Executable\n\n1. Download the latest `.exe` file from [Releases](https://github.com/AD-Archer/RustySound/releases)\n2. Open the exe and install RustySound\n\n\u003e **Note**: Antivirus may flag the installer since it is not verified by Windows. This is safe to ignore for builds from the official repository.\n\n#### Linux\n\n##### Flatpak (Recommended)\n\n```bash\nflatpak remote-add --if-not-exists --user adarcher-rustysound https://ad-archer.github.io/packages/rustysound.flatpakrepo\nflatpak install --user adarcher-rustysound app.adarcher.rustysound//stable\nflatpak run app.adarcher.rustysound\n```\n\nTo update:\n\n```bash\nflatpak install --user adarcher-rustysound app.adarcher.rustysound//stable\n```\n\nTo remove:\n\n```bash\nflatpak uninstall --user app.adarcher.rustysound\nflatpak remote-delete --user adarcher-rustysound\n```\n\n**Troubleshooting — missing GNOME runtime**\n\nIf you see an error like:\n\n```\nerror: The application app.adarcher.rustysound/x86_64/master requires the runtime org.gnome.Platform/x86_64/49 which was not found\n```\n\nInstall the runtime from Flathub:\n\n```bash\n# Add Flathub (if not already present)\nflatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo\n\n# Install the GNOME 49 runtime\nflatpak install --user flathub org.gnome.Platform//49\n\n# Reinstall the app\nflatpak install --user adarcher-rustysound app.adarcher.rustysound//stable\n```\n\nFor system-wide install, omit `--user` from the commands.\n\n### Web\n\nVisit [rustysound](https://rustysound-demo.adarcher.app) to try the web version.\n\n#### Docker Deployment\n\n##### Docker Compose (Recommended)\n\n1. Ensure you have Docker and Docker Compose installed\n2. Clone this repository or copy [`docker-compose.yml`](https://raw.githubusercontent.com/AD-Archer/RustySound/refs/heads/main/docker-compose.yml)\n3. Run:\n\n```bash\ndocker-compose up -d\n```\n\nThe web interface will be available at `http://localhost:8080`.\n\nTo stop:\n\n```bash\ndocker-compose down\n```\n\n##### Manual Docker Run\n\n```bash\ndocker run -d -p 8080:80 --name rustysound ghcr.io/ad-archer/rustysound:latest\n```\n\n## Development\n\n### Prerequisites\n\n- Rust 1.70+ ([install here](https://rustup.rs/))\n- Dioxus CLI: `curl -sSL https://dioxus.dev/install.sh | sh`\n\n### Setup\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/AD-Archer/RustySound.git\ncd RustySound\n```\n\n2. Install dependencies:\n\n```bash\ncargo build\n```\n\n### Running Locally\n\n#### Web\n\n```bash\ndx serve --platform web\n```\n\n#### Desktop\n\n```bash\ndx serve --platform desktop\n```\n\n#### Mobile\n\n##### iOS Simulator\n\n```bash\n./scripts/serve-ios.sh\n```\n\nYou can pass `dx serve` options:\n\n```bash\n./scripts/serve-ios.sh --device \"iPhone 16 Pro\"\n```\n\n##### Android Emulator\n\n```bash\ndx serve --platform android\n# or with auto-setup (NixOS):\njust serve-android\n```\n\n### Quick Commands\n\nUse `just` for common tasks:\n\n```bash\njust              # list all recipes\njust serve        # dx serve (web)\njust serve-ios    # iOS simulator dev (safe linker env)\njust serve-android # Android dev/debug (auto-create/start emulator)\njust check        # cargo check\njust bundle       # macOS + iOS + unsigned IPA\njust bundle-android-release # Android release APK\n```\n\n### Building for Release\n\n#### Desktop\n\n```bash\ndx bundle --platform desktop --release\n```\n\n#### iOS\n\n```bash\ndx bundle --platform ios --release\n```\n\nOr use the Apple bundling script:\n\n```bash\n./scripts/bundle-apple.sh\n```\n\nOutputs:\n\n- macOS `.app`: `dist/apple/macos`\n- iOS `.app`: `dist/apple/ios`\n- Unsigned iOS `.ipa`: `dist/apple/ios/*-unsigned.ipa`\n\nTo build for simulator:\n\n```bash\nIOS_TARGET=aarch64-apple-ios-sim ./scripts/bundle-apple.sh\n```\n\nIf your shell exports compiler flags (e.g., `LDFLAGS`), use the script to avoid linking issues.\n\nCustomize the icon and app name:\n\n```bash\nAPP_NAME=\"RustySound\" IOS_ICON_SOURCE=\"/absolute/path/to/icon-1024.png\" ./scripts/bundle-apple.sh\n```\n\n#### Android\n\n```bash\n./scripts/bundle-android.sh\n# or\njust bundle-android-release\n```\n\nThis exports release `.apk` to `dist/android`.\n\nOptional signing environment variables:\n\n- `ANDROID_KEYSTORE_BASE64` or `ANDROID_KEYSTORE_PATH`\n- `ANDROID_KEYSTORE_PASSWORD`\n- `ANDROID_KEY_ALIAS`\n- `ANDROID_KEY_PASSWORD` (optional)\n\n## Project Structure\n\n```\nrustysound/\n├── assets/                 # Static assets (icons, styles, etc.)\n├── src/\n│   ├── main.rs            # Application entry point\n│   ├── components/        # Reusable UI components\n│   │   ├── app.rs         # Main app component\n│   │   ├── player.rs      # Audio player controls\n│   │   ├── sidebar.rs     # Navigation sidebar\n│   │   └── views/         # Page components\n│   │       ├── home.rs    # Home/dashboard\n│   │       ├── albums.rs  # Album browser\n│   │       ├── artists.rs # Artist browser\n│   │       ├── queue.rs   # Playback queue\n│   │       └── settings.rs # App settings\n│   ├── api/               # Server API integration\n│   ├── db/                # Local database/storage\n│   └── components.rs      # Component exports\n├── Cargo.toml             # Rust dependencies\n├── Dioxus.toml           # Dioxus configuration\n└── tailwind.css          # Tailwind CSS styles\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/your-feature`\n3. Make your changes and test thoroughly\n4. Submit a pull request\n\n### Development Guidelines\n\n- Follow Rust best practices\n- Use Dioxus component patterns\n- Test on multiple platforms when possible\n- Update documentation for new features\n\n## License\n\nLicensed under the GNU General Public License v3.0 (GPL-3.0-or-later).  \nSee [LICENSE](./LICENSE) for full terms.\n\n## Acknowledgments\n\n- Built with [Dioxus](https://dioxuslabs.com/) - A Rust UI framework\n- Audio playback powered by Web Audio API and native platform APIs\n- Icons and UI design inspired by modern music streaming applications\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fad-archer%2Frustysound","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fad-archer%2Frustysound","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fad-archer%2Frustysound/lists"}