muxtop 0.2.0

A modern, multiplexed system monitor for the terminal
muxtop-0.2.0 is not a library.

muxtop

A modern, multiplexed system monitor for the terminal.

CI Crates.io License

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

cargo install muxtop

Via Homebrew (macOS / Linux)

brew tap lanexadev/tap
brew install muxtop

Via APT (Debian / Ubuntu)

# Ajout du repo (une seule fois)
curl -fsSL https://lanexadev.github.io/apt/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/lanexadev.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/lanexadev.gpg] https://lanexadev.github.io/apt stable main" | sudo tee /etc/apt/sources.list.d/lanexadev.list

# Installation
sudo apt update
sudo apt install muxtop

Binaire pré-compilé (Linux / macOS)

curl -sSfL https://raw.githubusercontent.com/lanexadev/muxtop/main/scripts/install.sh | sh

Depuis les sources

git clone https://github.com/lanexadev/muxtop.git
cd muxtop
cargo build --release
# 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+Pkill 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

muxtop                              # lancement normal
muxtop --refresh 2                  # rafraîchissement toutes les 2 secondes
muxtop --filter firefox             # démarre avec un filtre de processus
muxtop --sort mem                   # tri par mémoire au démarrage
muxtop --tree                       # démarre en vue arborescente
muxtop --about                      # version, licence, déclaration de confidentialité

# Démarrer le serveur (TLS + auth obligatoire)
muxtop-server --token "mon-secret-16chars" --tls-generate
muxtop-server --token "mon-secret-16chars" --tls-cert cert.pem --tls-key key.pem
muxtop-server --token "mon-secret-16chars" --tls-generate --bind 0.0.0.0:4242 --max-clients 10

# Monitoring distant (TLS)
muxtop --remote host:port --token "mon-secret-16chars" --tls-skip-verify  # dev
muxtop --remote host:port --token "mon-secret-16chars" --tls-ca cert.pem  # production
MUXTOP_TOKEN="mon-secret-16chars" muxtop --remote host:port --tls-ca cert.pem

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 :

just bench-thomas
# ou
./scripts/bench-thomas.sh

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

just check    # fmt + clippy + tests
just bench    # micro-benchmarks criterion
just dev      # vérification continue avec bacon

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 :