Web interface for managing file replication powered by rclone.
Version française : README.fr.md
| Tasks list | Task detail & logs |
|---|---|
![]() |
![]() |
| Remote storages | New remote form |
|---|---|
![]() |
![]() |
- Remote storage — Manage rclone remotes (S3, SFTP, FTP, SMB, local, and all rclone types)
- Replication tasks — Cron scheduling, manual trigger, restore mode (reverse sync)
- Auto-retry — Automatic retry on failure with configurable linear backoff
- Real-time monitoring — SSE progress and live logs during execution
- History — Last 100 runs per task with rclone statistics (transfers, volume, errors)
- Notifications — Alerts via Apprise (Slack, Mattermost, email, webhooks) on error, success, or skipped tasks
- Overlap protection — A running task cannot be started again
| Component | Technology |
|---|---|
| Backend | Rust (Axum) |
| Frontend | React 18 + TypeScript + Vite + Tailwind CSS |
| Database | PostgreSQL (external) |
| Scheduling | tokio-cron-scheduler |
| Replication | rclone |
| Notifications | apprise-go |
┌─────────────────────────────────────┐
│ Frontend container │
│ nginx → static files │
│ → proxy /api/* to backend │
└─────────────────────────────────────┘
↕ HTTP/REST + SSE
┌─────────────────────────────────────┐
│ Backend container │
│ Rust (Axum) + rclone + apprise-go │
└─────────────────────────────────────┘
↕ SQL
┌─────────────────────────────────────┐
│ PostgreSQL (external) │
└─────────────────────────────────────┘
- Docker + Docker Compose
- PostgreSQL accessible from the containers
- Rust 1.75+
- Node.js 18+
- PostgreSQL 14+
- rclone
- apprise-go (optional, for notifications)
No external database needed — everything runs in Docker:
docker compose -f docker-compose.postgres.yml up --buildOpen the interface: http://localhost
- Create a
.envfile at the project root:
DATABASE_URL=postgresql://user:password@host.docker.internal:5432/rclone_ui- Start the containers:
docker compose up --build- Open the interface: http://localhost
cd backend
export DATABASE_URL="postgresql://user:password@localhost:5432/rclone_ui"
cargo runThe server starts on http://localhost:3000. Migrations run automatically on startup.
cd frontend
npm install
npm run devThe Vite dev server starts on http://localhost:5173 and proxies /api/* to the backend.
| Variable | Description | Default |
|---|---|---|
DATABASE_URL |
PostgreSQL connection URL | Required |
BIND_ADDR |
Backend listen address | 0.0.0.0:3000 |
RCLONE_BIN |
Path to rclone binary | rclone |
APPRISE_BIN |
Path to apprise binary | apprise |
RUST_LOG |
Log levels | info,rclone_replication_ui=debug,sea_orm=warn,sqlx=warn |
rclone-replication-ui/
├── backend/
│ ├── src/
│ │ ├── entities/ # SeaORM entities
│ │ ├── migration/ # Database migrations
│ │ ├── models/ # Request/response DTOs
│ │ ├── routes/ # API handlers
│ │ ├── services/ # Business logic (rclone, scheduler, notifications)
│ │ └── sse/ # Server-Sent Events
│ ├── Cargo.toml
│ └── Dockerfile
├── frontend/
│ ├── src/
│ │ ├── pages/ # React pages
│ │ ├── components/ # UI components
│ │ ├── hooks/ # React hooks
│ │ ├── api/ # API calls
│ │ ├── types/ # TypeScript types
│ │ └── config/ # Configuration schemas
│ ├── nginx.conf
│ ├── package.json
│ └── Dockerfile
└── docker-compose.yml
# Backend
cd backend && cargo build # Build
cd backend && cargo clippy # Lint
cd backend && cargo fmt # Format
# Frontend
cd frontend && npm run build # Production build
cd frontend && npm run dev # Dev server
cd frontend && npm run lint # Lint
# Docker
docker compose up --build # Start
docker compose down # Stop
docker compose logs -f backend # Backend logsMIT



