NeoHtop
A cross-platform desktop system monitor built with Rust, Tauri, and Svelte that gives real-time process visibility with a modern, themable UI.
NeoHtop is a native desktop application that reimagines the classic htop experience for modern operating systems. It combines Rust’s low-level system access with Tauri’s lightweight desktop runtime and Svelte’s reactive UI to deliver real-time CPU, memory, disk, and network statistics alongside a full process manager — all in a visually polished package available on macOS, Linux, and Windows.
At its core, NeoHtop addresses the gap between terminal monitors like htop and heavyweight GUI tools like Activity Monitor or Task Manager. It offers the depth of a developer-grade process inspector with the visual comfort of a modern desktop app, including dark/light themes, glassmorphism effects on supported platforms, and configurable column layouts that persist between sessions.
The application exposes advanced process filtering through a search bar that accepts comma-separated multi-term queries and full regular expressions, letting users isolate processes by name, command, or PID patterns without leaving the interface. Critical processes can be pinned to remain visible regardless of sort order, and any process can be terminated directly from the UI. A companion CLI tool, NeoHtop CLI, brings similar capabilities to terminal environments via npm install, making it accessible in SSH sessions and headless environments.
NeoHtop is entirely open source under the MIT License, distributed as notarized macOS binaries and official packages for major Linux distributions including Arch (AUR), Fedora (Terra), and Solus, as well as Windows via Scoop.
What You Get
- Real-time process table - Live-updating list of all running processes with CPU percentage, memory usage, virtual memory, disk read/write bytes, user, status, and runtime — refreshed on a configurable interval.
- Regex and multi-term process search - Search by process name, command, or PID using comma-separated terms for OR logic or regular expressions like
d$to match daemon processes. - Process pinning - Pin important processes to keep them anchored at the top of the table regardless of the active sort column or order.
- One-click process termination - Kill unresponsive or unwanted processes directly from the UI with a confirmation modal to prevent accidental termination.
- System stats bar - Persistent header showing per-CPU-core usage, total and used memory, uptime, load averages, disk utilization, and live network throughput.
- Configurable column layout - Toggle visibility of any column (PID, user, virtual memory, disk usage, start time, etc.) with preferences saved to localStorage between sessions.
- Native platform theming - Glassmorphism blur effects on macOS and Windows via window-vibrancy, with CSS variable-based theming supporting dark and light modes.
- NeoHtop CLI companion - A terminal-mode monitor built with Go and the Charm ecosystem, installable via
npm install -g neohtop-cli, offering sparklines, process trees, filters, and themes for headless environments.
Common Use Cases
- Diagnosing runaway processes - A developer spots a process consuming 100% CPU by sorting the process table and terminates it without opening a terminal.
- Monitoring server resource usage - A DevOps engineer pins nginx, postgres, and redis processes to watch their memory and CPU trends during a load test.
- Filtering by process pattern - A macOS user searches
^\.to surface hidden background daemons, or usescom\.appleto isolate system framework processes. - Cross-platform system checks - A developer working across macOS, Linux, and Windows uses the same NeoHtop interface and muscle memory on every platform.
- SSH session monitoring - A sysadmin installs NeoHtop CLI on a remote server via npm and monitors processes in a terminal session without a GUI.
- Tracking disk I/O per process - A developer identifies which background process is causing disk thrash by sorting the disk usage column in real time.
Under The Hood
Architecture NeoHtop separates concerns cleanly across a Rust backend and Svelte frontend connected through Tauri’s typed IPC boundary. The Rust side organizes into three focused modules: a ProcessMonitor that caches static per-process metadata to avoid redundant allocations on each refresh cycle, a SystemMonitor that tracks incremental network deltas between polling intervals for accurate throughput readings, and a UI module that applies platform-specific window effects at startup. The frontend mirrors this with Svelte stores as the state layer — a factory-pattern processStore centralizes all process operations, sort state, pinned process tracking, and modal visibility, while a settingsStore persists column configuration and refresh rate to localStorage. Components like ProcessTable, StatsBar, and ToolBar consume store slices reactively without owning business logic, keeping the presentation layer thin and focused.
Tech Stack The Rust backend uses the sysinfo crate for cross-platform OS-level data collection covering processes, CPUs, memory, disks, and networks, with Tauri 2.0 bridging it to the desktop runtime. The window-vibrancy crate enables native blur effects on macOS and Windows via Tauri’s private API. The Svelte 5 frontend with SvelteKit runs as a static SPA via the static adapter, built with Vite and TypeScript in strict mode. Styling uses raw CSS variables for theming without a utility framework. FontAwesome and simple-icons handle iconography. GitHub Actions runs platform-specific nightly build workflows for macOS (universal), Linux (x86_64 and aarch64), and Windows, with separate format-check and build-check CI jobs.
Code Quality
The Rust backend demonstrates solid discipline: doc comments on every public struct, method, and module; explicit Result types for all fallible operations with documented panic conditions; and unit tests for both ProcessMonitor and SystemMonitor. Husky pre-commit hooks enforce Prettier formatting on Svelte/TypeScript code and cargo fmt on Rust code before any commit lands. TypeScript is in strict mode with well-defined interfaces for Process, SystemStats, and AppConfig. The Svelte frontend lacks its own test suite, and error handling in the store layer uses basic try/catch without structured error types or recovery strategies, though errors surface to the UI state. Overall code quality is solid on the Rust side and functional but less rigorous on the frontend.
What Makes It Unique The combination of native platform blur (glassmorphism via window-vibrancy on macOS and Windows with CSS fallback on Linux) with a fully CSS-variable-driven theme system gives NeoHtop a visual quality that most Tauri apps do not achieve. The ProcessMonitor’s per-process static info cache reduces allocation pressure on every refresh, a meaningful optimization when polling hundreds of processes at sub-second intervals. The multi-term regex search — accepting comma-separated OR terms alongside standard regular expressions — offers filtering expressiveness well beyond what typical process monitors provide. The companion NeoHtop CLI, distributed via npm despite being a Go binary, lowers the barrier for terminal users to adopt the same mental model across GUI and headless contexts.
Self-Hosting
NeoHtop is released under the MIT License, one of the most permissive open source licenses available. It places no restrictions on commercial use, modification, redistribution, or private use. The only requirement is that the license notice and copyright statement appear in any copy or substantial portion of the software. There are no copyleft obligations, no contributor license agreements, and no source disclosure requirements. Developers and organizations can embed, bundle, or redistribute NeoHtop binaries and source freely without legal friction.
Running NeoHtop yourself means installing a pre-built binary from GitHub Releases or a community package (Homebrew, AUR, Fedora Terra, Scoop, Solus eopkg) on each target machine. There is no server component, no configuration management, and no persistent daemon — the application runs as a standard desktop process. Updates require manual re-installation or re-pulling from a package manager; there is no built-in auto-update mechanism beyond the release page check visible in the AppInfo modal. Processes requiring elevated access (system daemons on macOS/Linux) need NeoHtop launched with sudo or pkexec, a step documented in the README that teams should account for in managed deployments.
NeoHtop has no commercial tier, hosted offering, or enterprise support contract. There is no SLA, no managed update channel, no cloud backup, and no professional support beyond GitHub Issues and community discussions. Organizations evaluating it alongside tools like ActivityWatch, Glances, or commercial APM agents should expect to own the full operational lifecycle — packaging, distribution, version pinning, and platform compatibility testing — without vendor assistance.
Related Apps
Uptime Kuma
Monitoring
Self-hosted monitoring for every service you run — 23 monitor types, 95 notification channels, live dashboards, and public status pages with no vendor lock-in.
Uptime Kuma
MITNetdata
Monitoring · Devops
Real-time per-second metrics, ML-powered anomaly detection, and zero-config observability for any infrastructure.
Netdata
GPL 3.0Grafana
Monitoring · Analytics
The open-source observability platform that unifies metrics, logs, and traces from any data source into dynamic, queryable dashboards.