# Introduction

![socktop logo](https://raw.githubusercontent.com/jasonwitty/socktop/master/docs/socktop_demo.apng)

**socktop** is a TUI-first remote system monitor built with Rust. Two components:

- **socktop (TUI Client)** - A terminal-based user interface for viewing system metrics
- **socktop-agent** - A lightweight background service that collects and serves system metrics over WebSocket

## Features

- TUI built with ratatui, Catppuccin Frappe theme
- CPU: overall sparkline + per-core bars, accurate per-process CPU% (normalized 0-100%)
- Memory/Swap gauges
- Disks: per-device usage
- Network: per-interface throughput with sparklines
- Temperatures: CPU (optional)
- Top processes (top 50): sortable by CPU% or memory, scrollable
- Optional GPU metrics
- Remote monitoring via WebSocket (JSON over WS)
- Optional WSS (TLS): agent auto-generates self-signed cert on first run, client pins cert via --tls-ca/-t
- Optional auth token
- Connection profiles for quick access to saved hosts
- Built-in demo mode (--demo)

## Architecture

socktop uses a client-server architecture:

```
┌─────────────────┐         WebSocket          ┌──────────────────┐
│                 │ ◄────────────────────────► │                  │
│  socktop (TUI)  │    (with TLS optional)     │  socktop-agent   │
│     Client      │                            │   (Background)   │
│                 │                            │                  │
└─────────────────┘                            └──────────────────┘
        │                                               │
        │                                               │
        ▼                                               ▼
  User Terminal                                  System Metrics
  Local or Remote                                (sysinfo crate)
```

The agent runs on each system you want to monitor, collecting metrics using the `sysinfo` crate. The client connects to one or more agents to display real-time system information.

## Quick Demo

```bash
socktop --demo
```

Spins up a temporary local agent on port 3231 and connects to it. Stops automatically when you quit.

## Use Cases

- Remote server monitoring
- Homelab / Raspberry Pi cluster monitoring
- Development / testing resource usage
- Custom dashboards via `socktop_connector` library

## Project Status

socktop is actively maintained and used in production environments. The project follows semantic versioning and maintains backward compatibility within major versions.

- **Current Version**: 1.50.x
- **Minimum Rust Version**: 1.70+
- **Supported Platforms**: Linux (amd64, arm64, armhf, riscv64)
- **License**: MIT

## Community and Support

- **GitHub Repository**: [https://github.com/jasonwitty/socktop](https://github.com/jasonwitty/socktop)
- **Issue Tracker**: Report bugs and request features on GitHub
- **crates.io**: 
  - [socktop](https://crates.io/crates/socktop) - TUI client
  - [socktop-agent](https://crates.io/crates/socktop-agent) - Background agent
  - [socktop-connector](https://crates.io/crates/socktop-connector) - Library for integrations
- **APT Repository**: [https://jasonwitty.github.io/socktop/](https://jasonwitty.github.io/socktop/)

## Next Steps

See [Quick Start](./installation/quick-start.md) for installation.
