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.
- package/README.md +172 -104
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,70 +1,117 @@
|
|
|
1
|
-
<
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/public/logo.svg" width="88" height="88" alt="homelab-tui logo">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<h1 align="center">homelab-tui</h1>
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
A fast, keyboard-first terminal interface for monitoring and controlling homelab hosts over SSH.
|
|
9
|
+
</p>
|
|
6
10
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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
|
-
>
|
|
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
|
-
|
|
38
|
+

|
|
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
|
|
63
|
+
The npm package installs the compiled binary for your operating system and CPU architecture. Bun is not required after installation.
|
|
39
64
|
|
|
40
|
-
|
|
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
|
|
44
|
-
homelab-tui
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
96
|
+
## Quick start
|
|
53
97
|
|
|
54
|
-
|
|
98
|
+
Create `homelab.config.json`:
|
|
55
99
|
|
|
56
100
|
```json
|
|
57
101
|
{
|
|
58
102
|
"hosts": [
|
|
59
103
|
{
|
|
60
|
-
"name": "
|
|
61
|
-
"host": "192.168.1.
|
|
104
|
+
"name": "server",
|
|
105
|
+
"host": "192.168.1.10",
|
|
62
106
|
"port": 22,
|
|
63
|
-
"username": "
|
|
64
|
-
"authMethod": "
|
|
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":
|
|
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
|
-
|
|
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
|
-
|
|
124
|
+
```sh
|
|
125
|
+
homelab-tui
|
|
126
|
+
```
|
|
84
127
|
|
|
85
|
-
|
|
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
|
|
91
|
-
| `
|
|
92
|
-
|
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
| `
|
|
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
|
-
|
|
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
|
-
|
|
150
|
+
## Command line
|
|
100
151
|
|
|
101
|
-
|
|
|
102
|
-
|
|
103
|
-
|
|
|
104
|
-
|
|
|
105
|
-
| `
|
|
106
|
-
| `
|
|
107
|
-
| `
|
|
108
|
-
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
|
113
|
-
|
|
114
|
-
|
|
|
115
|
-
|
|
|
116
|
-
|
|
|
117
|
-
| `
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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>
|