2 Commits

Author SHA1 Message Date
81a837de99 ci: verify frontend assets are included in source tarball
Some checks failed
CI / Format, lint, build, test (push) Successful in 5m59s
CI / Build SRPM (push) Failing after 24s
CI / Publish to COPR (push) Has been skipped
Add a check that dist/index.html exists in the tarball after
generation. Fails fast if the pre-built frontend wasn't included,
which would cause the desktop app to show "Connection refused".

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 18:00:00 +03:00
f63a8d7647 docs: add COPR badge, install instructions, and systemd section
All checks were successful
CI / Format, lint, build, test (push) Successful in 6m2s
CI / Build SRPM (push) Successful in 1m30s
CI / Publish to COPR (push) Has been skipped
- Add COPR build status badge at the top
- Add "Install from COPR" as the first section
- Add systemd service install instructions for headless server
- Add listen_addr to server config example
- Consolidate build instructions (no tauri-cli needed for release)
- Add monsoon-server to manual install section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 14:21:48 +03:00
2 changed files with 37 additions and 30 deletions

View File

@@ -99,6 +99,8 @@ jobs:
--exclude='*.src.rpm' \
.
mv /tmp/monsoon-${VERSION}.tar.gz .
# Verify frontend assets are in the tarball
tar tzf monsoon-${VERSION}.tar.gz | grep -q "dist/index.html" || { echo "ERROR: dist/index.html missing from tarball"; exit 1; }
- name: Vendor Rust dependencies
run: |

View File

@@ -1,11 +1,21 @@
# Monsoon
[![Copr build status](https://copr.fedorainfracloud.org/coprs/grenade/monsoon/package/monsoon/status_image/last_build.png)](https://copr.fedorainfracloud.org/coprs/grenade/monsoon/package/monsoon/)
A fast BitTorrent client for the GNOME desktop and headless servers, built on the [Vortex](https://github.com/Nehliin/vortex) io-uring engine.
Two interfaces:
- **Desktop app** -- Tauri + Svelte GUI with GNOME integration
- **Headless server** -- REST API + WebSocket + web GUI for remote/LAN deployment
## Install from COPR (Fedora)
```bash
sudo dnf copr enable grenade/monsoon
sudo dnf install monsoon # desktop app
sudo dnf install monsoon-server # headless server
```
## Screenshots
### Torrent List
@@ -20,46 +30,39 @@ Two interfaces:
### Files
![File listing](data/screenshot/torrent-files.png)
## Dependencies
## Building from Source
### Fedora
### Dependencies (Fedora)
```bash
sudo dnf install gtk3-devel webkit2gtk4.1-devel libsoup3-devel \
sudo dnf install rust cargo gcc nodejs pnpm \
gtk3-devel webkit2gtk4.1-devel libsoup3-devel \
pango-devel gdk-pixbuf2-devel glib2-devel libappindicator-gtk3-devel
```
The GTK dependencies are only needed for the desktop app. The headless server has no system library requirements beyond a working Rust toolchain.
The GTK dependencies are only needed for the desktop app. The headless server only requires `rust`, `cargo`, and `gcc`.
### Toolchain
- Rust 1.85+ (edition 2024)
- Node.js 18+
- [pnpm](https://pnpm.io)
- [Tauri CLI](https://tauri.app): `cargo install tauri-cli` (desktop app only)
## Desktop App
### Development
### Desktop App
```bash
pnpm install
cargo tauri dev
pnpm install && pnpm build # build frontend
cargo build --release -p monsoon # build desktop binary (embeds frontend)
```
### Release
For development with hot-reload: `cargo install tauri-cli && cargo tauri dev`
### Headless Server
```bash
pnpm install
cargo tauri build
cd monsoon-web && pnpm install && pnpm build && cd ..
cargo build --release -p monsoon-server
```
The release binary is at `target/release/monsoon` with the frontend assets embedded.
### Install
### Manual Install
```bash
sudo install -Dm755 target/release/monsoon /usr/local/bin/monsoon
sudo install -Dm755 target/release/monsoon-server /usr/local/bin/monsoon-server
sudo install -Dm644 data/cafe.lair.monsoon.desktop /usr/share/applications/cafe.lair.monsoon.desktop
sudo install -Dm644 data/cafe.lair.monsoon.metainfo.xml /usr/share/metainfo/cafe.lair.monsoon.metainfo.xml
sudo install -Dm644 src-tauri/icons/icon.png /usr/share/icons/hicolor/256x256/apps/cafe.lair.monsoon.png
@@ -70,18 +73,11 @@ sudo gtk-update-icon-cache /usr/share/icons/hicolor/
## Headless Server
### Building
```bash
cd monsoon-web && pnpm install && pnpm build && cd ..
cargo build --release -p monsoon-server
```
### Running
```bash
# With web GUI (run from the repo root, or set MONSOON_WEB_DIR)
cargo run --bin monsoon-server
monsoon-server
# Or with explicit web asset path
MONSOON_WEB_DIR=/path/to/monsoon-web/dist monsoon-server
@@ -89,6 +85,13 @@ MONSOON_WEB_DIR=/path/to/monsoon-web/dist monsoon-server
The server listens on `0.0.0.0:3000` by default. Open `http://server-ip:3000` in a browser for the web GUI.
### Systemd
```bash
sudo install -Dm644 data/monsoon-server.service /usr/lib/systemd/system/monsoon-server.service
sudo systemctl enable --now monsoon-server
```
### REST API
| Method | Endpoint | Description |
@@ -138,12 +141,14 @@ Configure in `~/.config/monsoon/config.toml`:
```toml
[server]
listen_addr = "0.0.0.0:3000"
max_concurrent_downloads = 3
min_peers_before_queue = 2
seed_completed_by_default = true
webhook_url = "http://localhost:8080/hook"
```
- **listen_addr** -- HTTP API and web GUI listen address (default `0.0.0.0:3000`)
- **max_concurrent_downloads** -- new torrents are queued when all slots are full; the next queued torrent auto-starts when a slot frees up
- **min_peers_before_queue** -- if a torrent has fewer peers than this and download speed is below 1 KiB/s for 30 consecutive seconds, it rotates to the back of the queue
- **seed_completed_by_default** -- when `false`, completed torrents are paused instead of seeding