homelab-tui 1.1.13 β†’ 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +172 -104
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,70 +1,117 @@
1
- <div align="center">
1
+ <p align="center">
2
+ <img src="docs/public/logo.svg" width="88" height="88" alt="homelab-tui logo">
3
+ </p>
2
4
 
3
- # πŸ–₯️ homelab-tui
5
+ <h1 align="center">homelab-tui</h1>
4
6
 
5
- **A cross-platform terminal UI for monitoring your homelab over SSH**
7
+ <p align="center">
8
+ A fast, keyboard-first terminal interface for monitoring and controlling homelab hosts over SSH.
9
+ </p>
6
10
 
7
- [![Bun](https://img.shields.io/badge/Bun-000000?style=for-the-badge&logo=bun&logoColor=white)](https://bun.sh)
8
- [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
9
- [![React](https://img.shields.io/badge/React%20Ink-61DAFB?style=for-the-badge&logo=react&logoColor=black)](https://github.com/vadimdemedes/ink)
10
- [![npm](https://img.shields.io/npm/v/homelab-tui?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/homelab-tui)
11
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](https://github.com/ACHRAF-YOUSSEF/homelab-tui/blob/main/LICENSE)
11
+ <p align="center">
12
+ <a href="https://bun.sh"><img src="https://img.shields.io/badge/Bun-000000?style=for-the-badge&logo=bun&logoColor=white" alt="Bun"></a>
13
+ <a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white" alt="TypeScript"></a>
14
+ <a href="https://opentui.com/"><img src="https://img.shields.io/badge/React%20OpenTUI-61DAFB?style=for-the-badge&logo=react&logoColor=black" alt="React OpenTUI"></a>
15
+ <a href="https://www.npmjs.com/package/homelab-tui"><img src="https://img.shields.io/npm/v/homelab-tui?style=for-the-badge&logo=npm&logoColor=white" alt="npm version"></a>
16
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge" alt="MIT license"></a>
17
+ </p>
12
18
 
13
- [![Linux](https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black)]()
14
- [![macOS](https://img.shields.io/badge/macOS-000000?style=for-the-badge&logo=apple&logoColor=white)]()
15
- [![Windows](https://img.shields.io/badge/Windows-0078D4?style=for-the-badge&logo=windows&logoColor=white)]()
19
+ <p align="center">
20
+ <img src="https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black" alt="Linux">
21
+ <img src="https://img.shields.io/badge/macOS-000000?style=for-the-badge&logo=apple&logoColor=white" alt="macOS">
22
+ <img src="https://img.shields.io/badge/Windows-0078D4?style=for-the-badge&logo=windows&logoColor=white" alt="Windows">
23
+ </p>
16
24
 
17
- <p>
18
- <a href="https://github.com/ACHRAF-YOUSSEF">
19
- <img src="https://img.shields.io/badge/Author-Achraf%20Youssef-181717?style=for-the-badge&logo=github" />
20
- </a>
21
- <a href="https://achraf-youssef.github.io/portfolio/">
22
- <img src="https://img.shields.io/badge/Portfolio-Visit-blueviolet?style=for-the-badge&logo=firefox" />
23
- </a>
25
+ <p align="center">
26
+ <a href="https://github.com/ACHRAF-YOUSSEF"><img src="https://img.shields.io/badge/Author-Achraf%20Youssef-181717?style=for-the-badge&logo=github" alt="Author: Achraf Youssef"></a>
27
+ <a href="https://achraf-youssef.github.io/portfolio/"><img src="https://img.shields.io/badge/Portfolio-Visit-blueviolet?style=for-the-badge&logo=firefox" alt="Portfolio"></a>
24
28
  </p>
25
29
 
26
- > Discovers Docker containers and running programs (Jellyfin, Ollama, LM Studio, game servers…), streams live logs, and shows system metrics β€” all over SSH. Supports Linux, macOS, and Windows remote hosts.
30
+ <p align="center">
31
+ <a href="https://achraf-youssef.github.io/homelab-tui/">Documentation</a>
32
+ Β·
33
+ <a href="https://github.com/ACHRAF-YOUSSEF/homelab-tui/releases">Releases</a>
34
+ Β·
35
+ <a href="https://github.com/ACHRAF-YOUSSEF/homelab-tui/issues">Issues</a>
36
+ </p>
27
37
 
28
- </div>
38
+ ![homelab-tui service monitoring and live logs](assets/logs.png)
29
39
 
30
- ---
40
+ homelab-tui connects to Linux, macOS, and Windows hosts over SSH, discovers Docker containers and native services, displays system metrics and logs, and provides guarded service controls from one terminal.
41
+
42
+ ## Features
43
+
44
+ - **Multi-host monitoring** β€” open several independent SSH connections in responsive panes.
45
+ - **Docker and Compose discovery** β€” inspect status, image, ports, health, and Compose projects.
46
+ - **Native service discovery** β€” find programs listening on TCP ports across supported operating systems.
47
+ - **System metrics** β€” monitor CPU, memory, and disk usage without installing a remote agent.
48
+ - **Live logs** β€” follow Docker logs and supported native-process logs over SSH.
49
+ - **Keyboard-first controls** β€” search, filter, sort, restart, stop, start, and switch panes without a mouse.
50
+ - **Resilient connections** β€” keep healthy hosts usable while another host reconnects or fails.
51
+ - **Secure authentication** β€” use passwords, private keys, encrypted keys, or an SSH agent.
52
+ - **Self-update support** β€” check for and install new GitHub releases from the CLI.
31
53
 
32
54
  ## Install
33
55
 
56
+ ### npm
57
+
34
58
  ```sh
35
59
  npm install -g homelab-tui
60
+ homelab-tui
36
61
  ```
37
62
 
38
- The correct binary for your platform is downloaded automatically on install. No Bun runtime needed.
63
+ The npm package installs the compiled binary for your operating system and CPU architecture. Bun is not required after installation.
39
64
 
40
- ## Usage
65
+ ### Bun
66
+
67
+ Bun requires packages with lifecycle scripts to be trusted:
68
+
69
+ ```sh
70
+ bun add -g homelab-tui
71
+ bun pm trust homelab-tui
72
+ bun add -g homelab-tui
73
+ ```
74
+
75
+ ### Prebuilt binary
76
+
77
+ Download the latest binary from [GitHub Releases](https://github.com/ACHRAF-YOUSSEF/homelab-tui/releases).
78
+
79
+ | Platform | File |
80
+ |---|---|
81
+ | Linux x64 | `homelab-tui-linux-x64` |
82
+ | Linux arm64 | `homelab-tui-linux-arm64` |
83
+ | macOS Intel | `homelab-tui-darwin-x64` |
84
+ | macOS Apple Silicon | `homelab-tui-darwin-arm64` |
85
+ | Windows x64 | `homelab-tui-windows-x64.exe` |
86
+
87
+ ### Build from source
41
88
 
42
89
  ```sh
43
- homelab-tui # launch TUI
44
- homelab-tui --config /path/to/homelab.config.json # use a specific config (session only)
45
- homelab-tui --set-config /path/to/homelab.config.json # persist config path as default
46
- homelab-tui --update # self-update to latest release
47
- homelab-tui --check-update # check latest version without installing
48
- homelab-tui --version # print version
49
- homelab-tui --help # print help
90
+ git clone https://github.com/ACHRAF-YOUSSEF/homelab-tui.git
91
+ cd homelab-tui
92
+ bun install
93
+ bun run dev
50
94
  ```
51
95
 
52
- On first launch, a setup wizard lets you create or locate your `homelab.config.json`.
96
+ ## Quick start
53
97
 
54
- ## Config
98
+ Create `homelab.config.json`:
55
99
 
56
100
  ```json
57
101
  {
58
102
  "hosts": [
59
103
  {
60
- "name": "desktop",
61
- "host": "192.168.1.20",
104
+ "name": "server",
105
+ "host": "192.168.1.10",
62
106
  "port": 22,
63
- "username": "achraf",
64
- "authMethod": "password",
107
+ "username": "admin",
108
+ "authMethod": "key",
109
+ "privateKeyPath": "~/.ssh/id_ed25519",
110
+ "group": "home",
111
+ "refreshInterval": 3000,
65
112
  "discovery": {
66
113
  "docker": true,
67
- "nativeServices": false,
114
+ "nativeServices": true,
68
115
  "includeStoppedContainers": true
69
116
  }
70
117
  }
@@ -72,80 +119,101 @@ On first launch, a setup wizard lets you create or locate your `homelab.config.j
72
119
  }
73
120
  ```
74
121
 
75
- | Field | Description |
76
- |---|---|
77
- | `authMethod` | `"password"` (prompted at launch) or `"key"` (SSH private key, supports agent) |
78
- | `group` | Optional label to group hosts in the selector (filter with `g`) |
79
- | `refreshInterval` | Polling interval in ms (default `3000`, min `1000`, max `60000`) |
80
- | `nativeServices` | Discover processes listening on TCP ports (Jellyfin, Ollama, LM Studio, game servers…) |
81
- | `includeStoppedContainers` | Show stopped Docker containers |
122
+ Then launch:
82
123
 
83
- ## Keyboard shortcuts
124
+ ```sh
125
+ homelab-tui
126
+ ```
84
127
 
85
- ### Host selector
128
+ Passwords and private-key passphrases are prompted at launch and are never stored in the configuration file. See the [configuration guide](https://achraf-youssef.github.io/homelab-tui/guide/configuration) for every field and default.
129
+
130
+ ## Usage
86
131
 
87
132
  | Key | Action |
88
- |-----|--------|
89
- | `↑` / `↓` | Select host |
90
- | `Enter` | Connect to selected host |
91
- | `m` | Multi-host mode (select multiple hosts) |
92
- | `Esc` | Back to previous monitor view (when coming from one) |
93
- | `a` | Add new host |
94
- | `e` | Edit selected host |
95
- | `d` | Delete selected host |
133
+ |---|---|
134
+ | `↑` / `↓` | Select a host or service |
135
+ | `Enter` | Connect or confirm |
136
+ | `Tab` / `Shift+Tab` | Focus the next or previous host pane |
137
+ | `/` | Search services |
138
+ | `f` | Cycle filters |
139
+ | `o` | Cycle sorting |
140
+ | `r` | Restart the selected service |
141
+ | `s` | Stop a container or kill a native process |
142
+ | `t` | Start a Docker container |
143
+ | `l` | Toggle live logs |
144
+ | `a` / `x` | Add or close a host pane |
145
+ | `h` | Return to the host selector |
146
+ | `q` | Quit |
96
147
 
97
- In multi-host mode: `Space` to check/uncheck, `Enter` to open all in split-pane, `Esc` to cancel.
148
+ The footer uses the same key definitions as the input handlers and adapts to the selected service. See the complete [keybinding reference](https://achraf-youssef.github.io/homelab-tui/guide/keybindings).
98
149
 
99
- ### Monitor
150
+ ## Command line
100
151
 
101
- | Key | Action |
102
- |-----|--------|
103
- | `↑` / `↓` | Select service |
104
- | `r` | Restart selected Docker container |
105
- | `s` | Stop selected Docker container / kill selected process |
106
- | `t` | Start selected Docker container |
107
- | `l` | Toggle live log panel |
108
- | `PgUp` / `PgDn` | Scroll log panel |
109
- | `a` | Add another host as a new pane (stays connected) |
110
- | `x` | Close the focused pane |
111
- | `<` / `>` | Move focused pane left / right (swap, connections stay alive) |
112
- | `Tab` / `Shift+Tab` | Switch focused pane |
113
- | `/` | Search by name or image |
114
- | `f` | Cycle filter: all β†’ docker β†’ processes β†’ running β†’ stopped β†’ failed β†’ restarting |
115
- | `o` | Cycle sort: name β†’ status β†’ image |
116
- | `h` | Switch host |
117
- | `q` | Quit |
152
+ | Option | Description |
153
+ |---|---|
154
+ | `--config <path>`, `-c <path>` | Use a configuration file for this run |
155
+ | `--set-config <path>` | Save the default configuration path |
156
+ | `--check-update` | Compare the installed and latest versions |
157
+ | `--update` | Download and install the latest release |
158
+ | `--version`, `-v` | Print the installed version |
159
+ | `--help`, `-h` | Print command help |
160
+
161
+ ## Supported hosts
162
+
163
+ | Capability | Linux | macOS | Windows |
164
+ |---|:---:|:---:|:---:|
165
+ | System metrics | βœ“ | βœ“ | βœ“ |
166
+ | Docker containers | βœ“ | βœ“ | βœ“ |
167
+ | Native process discovery | βœ“ | βœ“ | βœ“ |
168
+ | Native log streaming | `journalctl` | `log stream` | β€” |
169
+ | Native process restart | systemd | β€” | β€” |
170
+
171
+ Remote hosts need an SSH server and standard system utilities. Docker is only required for container discovery and controls. Windows hosts require [OpenSSH Server](https://learn.microsoft.com/windows-server/administration/openssh/openssh_install_firstuse).
172
+
173
+ ## Documentation
174
+
175
+ - [Installation](https://achraf-youssef.github.io/homelab-tui/guide/install)
176
+ - [Configuration](https://achraf-youssef.github.io/homelab-tui/guide/configuration)
177
+ - [Monitoring](https://achraf-youssef.github.io/homelab-tui/guide/monitoring)
178
+ - [Keybindings](https://achraf-youssef.github.io/homelab-tui/guide/keybindings)
179
+ - [Command line](https://achraf-youssef.github.io/homelab-tui/guide/cli)
180
+ - [Troubleshooting](https://achraf-youssef.github.io/homelab-tui/guide/troubleshooting)
181
+
182
+ ## Built With
183
+
184
+ - [Bun](https://bun.sh/) β€” runtime, package manager, test runner, and native binary compiler
185
+ - [TypeScript](https://www.typescriptlang.org/) β€” strict application code
186
+ - [React](https://react.dev/) β€” declarative interface components
187
+ - [OpenTUI](https://opentui.com/) β€” native terminal renderer with React bindings
188
+ - [node-ssh](https://github.com/steelbrain/node-ssh) β€” SSH connections, commands, and log streams
189
+ - [Zod](https://zod.dev/) β€” configuration validation
190
+ - [VitePress](https://vitepress.dev/) β€” documentation site
191
+
192
+ ## Development
118
193
 
119
- > Footer hints adapt to selection: Docker shows `r restart Β· s stop Β· t start`; processes show `r restart Β· s kill` (`r` uses systemd on Linux).
194
+ ```sh
195
+ bun install
196
+ bun run dev
197
+ bun test
198
+ bunx tsc --noEmit
199
+ bun run build:linux-x64
200
+ bun run docs:dev
201
+ ```
120
202
 
121
- ## Features
203
+ Contributions are welcome. Please open an issue before a large behavioral change and run the relevant checks before submitting a pull request.
204
+
205
+ ## License
206
+
207
+ homelab-tui is released under the [MIT License](LICENSE).
208
+
209
+ Copyright Β© 2026 [Achraf Youssef](https://github.com/ACHRAF-YOUSSEF).
210
+
211
+ ## Star History
122
212
 
123
- - **Multi-host split-pane** β€” monitor multiple hosts simultaneously side-by-side; compact per-pane headers with inline metrics; app bar shows all pane statuses; `Tab` to switch focus
124
- - **Host groups** β€” tag hosts with `"group"` in config; press `g` in the selector to filter by group
125
- - **Configurable refresh interval** β€” set per-host polling rate (`"refreshInterval": 5000`)
126
- - **Service-down alerts** β€” audible bell + red banner on running β†’ stopped/failed transitions
127
- - **Disk full warnings** β€” ⚠ badge on disks above 85%
128
- - **Compose stack restart** β€” `r` on a Compose service opens a scope picker (container vs whole stack)
129
- - **Docker discovery** β€” containers with status, image, ports, health, Compose project
130
- - **Process discovery** β€” finds programs listening on TCP ports (Jellyfin, Ollama, LM Studio, game servers…) on Linux, macOS, and Windows
131
- - **Context-aware controls** β€” Docker: restart/stop/start; discovered processes: kill + restart via systemd (Linux)
132
- - **Live logs** β€” `docker logs -f` streamed over SSH; discovered processes stream via `journalctl -f` (Linux) or `log stream` (macOS); scrollable with auto-follow
133
- - **System metrics** β€” CPU %, RAM, disk usage
134
- - **Auth error handling** β€” wrong password shows an error and re-prompts immediately without leaving the app
135
- - **Auto-reconnect** β€” SSH keepalive detects silent drops (15 s interval, 3 missed β†’ reconnect); exponential backoff (3 β†’ 5 β†’ 10 β†’ 20 β†’ 30 s); attempt counter shown in header
136
- - **Command timeout** β€” SSH commands time out after 30 s so a hanging command never blocks the refresh loop
137
- - **Self-update** β€” `homelab-tui --update` checks version first, skips download if already up to date; otherwise replaces the binary in place with a live progress bar
138
- - **Update notifications** β€” checks for a newer release on launch using proper semver comparison; shows `↑ vX.Y.Z available` in the app bar only when an actual upgrade exists
139
-
140
- ## Supported platforms
141
-
142
- | Platform | Architecture |
143
- |----------|-------------|
144
- | Linux | x64, arm64 |
145
- | macOS | x64, arm64 (Apple Silicon) |
146
- | Windows | x64 |
147
-
148
- ## Links
149
-
150
- - [GitHub](https://github.com/ACHRAF-YOUSSEF/homelab-tui)
151
- - [Report an issue](https://github.com/ACHRAF-YOUSSEF/homelab-tui/issues)
213
+ <a href="https://www.star-history.com/?repos=ACHRAF-YOUSSEF%2Fhomelab-tui&type=timeline&legend=top-left">
214
+ <picture>
215
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=ACHRAF-YOUSSEF/homelab-tui&type=timeline&theme=dark&logscale&legend=top-left">
216
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=ACHRAF-YOUSSEF/homelab-tui&type=timeline&logscale&legend=top-left">
217
+ <img alt="Star History Chart" src="https://api.star-history.com/chart?repos=ACHRAF-YOUSSEF/homelab-tui&type=timeline&logscale&legend=top-left">
218
+ </picture>
219
+ </a>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homelab-tui",
3
- "version": "1.1.13",
3
+ "version": "2.0.2",
4
4
  "description": "Terminal UI for monitoring a remote homelab server over SSH",
5
5
  "homepage": "https://github.com/ACHRAF-YOUSSEF/homelab-tui",
6
6
  "repository": {