https://github.com/alibahmanyar/simon
Minimal, web-based system monitor with Docker support, live metrics, alerts, and a built-in file browser—all bundled into a single binary
https://github.com/alibahmanyar/simon
alerting docker docker-monitoring embedded-linux file-browser lightweight low-memory monitoring rust self-hosted single-binary system-metrics web-based
Last synced: about 1 month ago
JSON representation
Minimal, web-based system monitor with Docker support, live metrics, alerts, and a built-in file browser—all bundled into a single binary
- Host: GitHub
- URL: https://github.com/alibahmanyar/simon
- Owner: alibahmanyar
- License: mit
- Created: 2025-03-20T18:16:50.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2026-02-09T09:55:18.000Z (about 1 month ago)
- Last Synced: 2026-02-09T12:29:56.228Z (about 1 month ago)
- Topics: alerting, docker, docker-monitoring, embedded-linux, file-browser, lightweight, low-memory, monitoring, rust, self-hosted, single-binary, system-metrics, web-based
- Language: Rust
- Homepage:
- Size: 15.1 MB
- Stars: 148
- Watchers: 1
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Simon
A lightweight, all-in-one system monitor with Docker support, live metrics, alerts, and full file management
It's a single, dependency-free binary written in Rust, designed for resource-constrained environments like embedded Linux systems
Real-time monitoring, Docker integration, file browsing, and alert management - all in one interface
View All Screenshots
---
## Table of Contents
- [Features](#features)
- [Quick Start](#quick-start)
- [Documentation](#documentation)
- [Building from Source](#building-from-source)
- [Gallery](#gallery)
- [License](#license)
- [Acknowledgments](#acknowledgments)
## Features
### 🪶 Lightweight
- **Written in Rust:** For a memory-safe, high-performance core
- **Single Binary:** A self-contained executable with no external dependencies to install or manage
- **Minimal resource footprint** - Perfect for embedded systems and low-power devices
### 📊 System Monitoring
- **Real-time metrics** - Live tracking of CPU, memory, disk usage, disk I/O, and network activity
- **Historical data** - Visualize trends with interactive charts
- **Cross-platform** - Runs on Linux, Windows, Android, and FreeBSD
- **Multi-architecture** - Native support for x86_64, i686, aarch64, and armv7
### 🐳 Docker Integration
- **Container monitoring** - Track resource usage for all running containers
- **Log viewer** - Access and search container logs directly from the web interface
- **Real-time stats** - Per-container CPU and memory metrics
### 📁 File Browser & Management
- **Filesystem navigation** - Browse and explore directories through the web UI
- **File viewer** - Preview file contents directly in your browser
- **File uploads** - Upload files with drag-and-drop support
- **File operations** - Create folders, move files, delete items
- **File downloads** - Range request support for resumable downloads and media streaming
### 🔔 Alerting System
- **Flexible alerts** - Set custom thresholds for CPU, memory, disk, and network
- **Multiple channels** - Send notifications via Telegram, ntfy, or custom webhooks
- **Templates** - Pre-configured notification templates for quick setup
## Quick Start
### Option 1: Prebuilt Binary
Download the latest release for your platform from the [Releases](https://github.com/alibahmanyar/simon/releases) page and run:
```bash
chmod +x simon
./simon
```
The web interface will be available at `http://localhost:30000`
**To enable file browsing**, use either environment variable or CLI flag:
```bash
# Using environment variable
export SIMON_SERVE_DIRS="/path/to/dir1,/path/to/dir2"
./simon
# Using CLI flags (can specify multiple directories)
./simon --serve-dir /path/to/dir1 --serve-dir /path/to/dir2
# Custom port and bind address
./simon --port 8080 --address 127.0.0.1 --serve-dir /home --serve-dir /var/log
```
### Option 2: Docker
```bash
docker run -d \
--name simon \
-p 30000:30000 \
-v /sys:/sys:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /:/fs:ro \
-v ./simon-data:/app/simon-data \
alibahmanyar/simon
```
**To enable file browsing**, add the `SIMON_SERVE_DIRS` environment variable:
```bash
-e SIMON_SERVE_DIRS="/fs/home,/fs/var/log"
```
### Option 3: Docker Compose
```yaml
services:
simon:
image: alibahmanyar/simon
hostname: simon
ports:
- "30000:30000"
environment:
SIMON_PASSWORD_HASH: "$$2a$$12$$nmCGsgJ3ovx76sc/J8Bcs.Vn235KLQK7Cze83Kzm36a1v59QKVOO."
volumes:
- /sys:/sys:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /:/fs:ro
- ./simon-data:/app/simon-data
```
Run with: `docker-compose up -d`
> **Note:** The default password for the example hash is `secret`. See [Authentication](docs/SETUP.md#authentication) for instructions on generating your own secure hash.
**To enable file browsing**, add `SIMON_SERVE_DIRS` to the environment section:
```yaml
environment:
SIMON_SERVE_DIRS: "/fs/home,/fs/var/log"
```
---
## Documentation
Comprehensive documentation is available in the `docs/` directory:
- **[Setup Guide](docs/SETUP.md)** - Installation methods, Docker configuration, reverse proxy setup, and authentication
- **[Configuration Reference](docs/CONFIGURATION.md)** - Complete list of configuration options and environment variables
- **[Alerts and Notifications](docs/ALERTS.md)** - Setting up alerts, notification methods, and notification templates
### Key Configuration Options
| Option | CLI Flag | Environment Variable | Default | Description |
|--------|----------|---------------------|---------|-------------|
| Address | `-a`, `--address` | `SIMON_ADDRESS` | `0.0.0.0` | Network address to bind the server to |
| Port | `-p`, `--port` | `SIMON_PORT` | `30000` | Server port |
| Update Interval | `-T`, `--update-interval` | `SIMON_UPDATE_INTERVAL` | `2` | Metrics refresh interval (seconds) |
| Password Hash | `-H`, `--password-hash` | `SIMON_PASSWORD_HASH` | None | Bcrypt hash for authentication |
| Database Path | `--db-path` | `SIMON_DB_PATH` | `./simon-data/simon.db` | SQLite database location |
| Serve Directories | `--serve-dir` | `SIMON_SERVE_DIRS` | None | Directories for file browser (use flag multiple times or comma-separated env var) |
See the [Configuration Reference](docs/CONFIGURATION.md) for all available options.
## Building from Source
Simon consists of a Rust backend and a Svelte-based web frontend.
### Prerequisites
- [Rust toolchain](https://rustup.rs/) (latest stable)
- [Bun](https://bun.sh/docs/installation) (for building the web frontend)
### Build Steps
```bash
# Clone the repository
git clone https://github.com/alibahmanyar/simon.git
cd simon
# Setup and build web frontend
make web-setup
make web
# Build Simon
make release
```
---
## Gallery
---
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Contributing
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
## Acknowledgments
Simon is built on top of excellent open-source projects:
**Backend (Rust)**
- [axum](https://github.com/tokio-rs/axum) - Web framework
- [sysinfo](https://github.com/GuillaumeGomez/sysinfo) - System information
- [bollard](https://github.com/fussybeaver/bollard) - Docker API client
- [tokio](https://tokio.rs/) - Async runtime
- [rusqlite](https://github.com/rusqlite/rusqlite) - SQLite interface
**Frontend**
- [Svelte](https://svelte.dev/) - UI framework
- [SvelteKit](https://kit.svelte.dev/) - Application framework
- [Chart.js](https://www.chartjs.org/) - Data visualization
- [Bun](https://bun.sh/) - Build tooling
Thank you to all the contributors and maintainers of these projects!
---
**Happy Monitoring!**