A modern, mobile-first Aria2 WebUI built with Next.js.
Manage downloads in real time with queue controls, history tracking, per-download analytics, notifications, custom branding, and PWA install support.
- Realtime Aria2 queue and status sync
- Dashboard with live speed graph and stats cards
- Queue management:
- Pause / Resume / Cancel
- Stop Seeding
- Per-item Details page
- History management with delete support
- Search in Queue and History
- Accurate status normalization:
- Completed / Failed / Removed / Stopped / Seeding
- Download details page:
- Live progress + speed chart
- Metadata (file, path, URL, timestamps)
- Share link support
- Settings (DB-backed + local fallback):
- RPC host
- Max concurrent downloads
- Max speed limit
- Default file download path
- Seeding on/off
- Notifications on/off
- Theme preference
- Light logo upload
- Dark logo upload
- Notification center:
- DB-persisted notifications
- Read / unread state
- Mark one/all as read
- Browser notifications (with permission)
- PWA support:
- Installable web app
- Manifest + Service Worker
- Responsive UI optimized for desktop and mobile
- Next.js 16 (App Router)
- React 19
- TypeScript
- Zustand
- MySQL (
mysql2) - Recharts
- Tailwind CSS + Radix UI components
npm installDefault DB connection uses:
- Host:
localhost - User:
root - Password: `` (empty)
- Database:
aria2_db
You can override with environment variables:
MYSQL_HOSTMYSQL_USERMYSQL_PASSWORDMYSQL_DATABASE
Run SQL from:
scripts/schema.sql
npm run devOpen: http://localhost:3000
npm run build
npm startSet your Aria2 RPC endpoint in Settings (for example: http://<ip>:6800/jsonrpc).
Make sure your Aria2 daemon is started with RPC enabled and reachable from the app.
GET /api/downloadsPOST /api/downloadsDELETE /api/downloads?gid=<gid>POST /api/downloads/syncGET /api/downloads/[gid]GET /api/settingsPOST /api/settingsGET /api/statsGET /api/notificationsPOST /api/notificationsPATCH /api/notifications
This app can be installed as a Web App (Add to Home Screen / Install App) with:
app/manifest.tspublic/sw.js