muxtop
A modern, multiplexed system monitor for the terminal.
muxtop remplace le workflow htop + iftop + ctop par une interface à onglets unique.
Pensez htop, mais avec une UX de multiplexeur (à la tmux/zellij) et une palette de commandes à la VS Code.
Installation
Via crates.io
Via Homebrew (macOS / Linux)
Via APT (Debian / Ubuntu)
# Ajout du repo (une seule fois)
|
|
# Installation
Binaire pré-compilé (Linux / macOS)
|
Depuis les sources
# Binaire disponible dans target/release/muxtop
MSRV : Rust 1.88
Fonctionnalités
| Fonctionnalité | Détail |
|---|---|
| Onglets | General (CPU, mémoire, charge), Processes et Network — Alt+1 / Alt+2 / Alt+3 |
| Onglet Réseau | Tableau d'interfaces avec RX/s, TX/s, totaux, erreurs + sparklines en temps réel |
| Palette de commandes | Ctrl+P — kill firefox, sort memory, sort net rx, etc. |
| Raccourcis htop | F3 recherche, F4 filtre, F5 arbre, F6 tri, F9 kill, F10 quitter |
| Recherche fuzzy | Propulsé par nucleo (issu de l'éditeur Helix) |
| Vue arborescente | F5 bascule l'affichage hiérarchique parent/enfant |
| Renice | + / - pour ajuster la priorité d'un processus |
| Monitoring distant | --remote host:port + --token pour surveiller un serveur distant via TLS chiffré |
| TLS natif | Chiffrement rustls (TLS 1.2/1.3), génération auto de certificats self-signed (--tls-generate), auth par token obligatoire |
| Collecte asynchrone | Basé sur tokio — le UI n'est jamais bloqué, même à 3000+ processus |
| Thème Tokyo Night | TrueColor natif, repli automatique sur les terminaux ANSI/16 couleurs |
| Binaire statique | Un seul binaire musl, aucune dépendance système |
| Zéro télémétrie | Aucun appel réseau côté client, jamais (voir Vie privée) |
Utilisation
# Démarrer le serveur (TLS + auth obligatoire)
# Monitoring distant (TLS)
MUXTOP_TOKEN="mon-secret-16chars"
Raccourcis clavier
| Touche | Action |
|---|---|
Ctrl+P |
Palette de commandes |
Alt+1 / Alt+2 / Alt+3 |
Changer d'onglet (General / Processes / Network) |
F1 |
Aide |
F3 / / |
Recherche |
F4 |
Filtre de processus |
F5 |
Vue arborescente |
F6 |
Menu de tri |
F9 |
Tuer le processus |
F10 / q |
Quitter |
j / k |
Navigation (style vim) |
+ / - |
Renice (priorité) |
Benchmarks
Testé sur macOS avec 500+ processus (benchmark Thomas) :
| Métrique | Cible | muxtop |
|---|---|---|
Démarrage (--about) |
< 100 ms | ~5 ms |
| Taille du binaire | < 10 MB | ~4 MB |
| FPS (TUI) | > 30 | ~60 |
| RAM | < 10 MB | < 8 MB |
Lancez le benchmark vous-même :
# ou
Architecture
muxtop/
├── src/ # Point d'entrée (CLI clap + bootstrap tokio)
└── crates/
├── muxtop-core/ # Collecte système, modèles de données, actions
│ ├── src/collector.rs # Boucle async sysinfo
│ ├── src/process.rs # Tri, filtrage, arbre de processus
│ └── src/system.rs # Snapshots CPU / mémoire / charge
├── muxtop-tui/ # Interface ratatui
│ ├── src/app.rs # Machine à états, gestion des événements
│ └── src/ui/ # Onglets General, Processes, palette, thème
├── muxtop-proto/ # Protocole filaire et sérialisation binaire
└── muxtop-server/ # Daemon TCP pour le monitoring à distance
Développement
Feuille de route
| Version | Objectif |
|---|---|
| v0.1 ✓ | Remplacement htop — onglets, palette de commandes, vue arborescente |
| v0.2 ✓ | Onglet Réseau (remplace iftop) + architecture client-serveur (muxtop-server, --remote) |
| v0.3 | Onglet Conteneurs (Docker / Podman / K8s) + monitoring GPU |
| v1.0 | Système de plugins WASM + thèmes + fichier de configuration |
Vie privée & télémétrie
muxtop ne collecte AUCUNE télémétrie, AUCUNE statistique et ne contacte PERSONNE. Jamais.
Il ne fait aucun appel réseau. Il est conçu pour les serveurs de production air-gappés. Si vous observez une activité réseau sortante depuis muxtop, c'est un bug — veuillez le signaler.
Contribuer
Les contributions sont les bienvenues ! Consultez CONTRIBUTING.md pour les prérequis, les conventions de code, le workflow de branches et les instructions pour soumettre une PR.
Licence
Disponible sous l'un ou l'autre des licences suivantes, à votre choix :
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT License (LICENSE-MIT)