A keyboard-driven terminal UI for OpenStack.
Installation ·
Features ·
Keybindings ·
Configuration ·
License
lazystack is a fast, keyboard-first TUI for managing OpenStack resources from the terminal. It follows the "lazy" convention (lazygit, lazydocker) to provide an intuitive alternative to Horizon and the verbose OpenStack CLI.
Single binary. No runtime dependencies. Reads your standard clouds.yaml.
- Server management — list, create, delete, reboot, pause, suspend, shelve, resize with bulk operations
- Volume management — list, detail, delete, detach
- Floating IPs — allocate, associate, disassociate, release
- Security groups — browse groups, expand rules, delete rules
- Key pairs — list and delete
- Load balancers (Octavia) — list, detail tree (listeners/pools/members), cascade delete
- Project switching — switch between accessible Keystone projects without restarting
- Quota overlay — compute, network, and storage quotas with color-coded progress bars
- Dynamic tabs — tabs appear based on available services (no Cinder? no Volumes tab)
- Auto-refresh — all views refresh in the background at a configurable interval
- Console log and action history per server
- Column sorting on all list views
- Client-side filtering with
/
- Bulk select with
space for multi-server operations
- Solarized Dark color scheme with status-aware coloring
Grab the latest release for your platform from the releases page.
go install github.com/larkly/lazystack/cmd/lazystack@latest
- Go 1.26+ (build only)
- OpenStack cloud with Keystone v3 and Nova v2.1+
- A valid
clouds.yaml
lazystack reads clouds.yaml from these locations (first match wins):
./clouds.yaml (current directory)
$OS_CLIENT_CONFIG_FILE
~/.config/openstack/clouds.yaml
/etc/openstack/clouds.yaml
No additional configuration is needed. If only one cloud is defined, lazystack connects automatically.
| Flag |
Default |
Description |
--pick-cloud |
false |
Always show cloud picker, even with one cloud |
--refresh N |
5 |
Auto-refresh interval in seconds |
--no-check-update |
false |
Skip the automatic update check on startup |
--update |
false |
Self-update to the latest release |
--version |
|
Print version and exit |
| Key |
Action |
q / Ctrl+C |
Quit |
? |
Toggle help overlay |
C |
Switch cloud |
P |
Switch project |
Q |
Quota overlay |
1-9 / Left / Right |
Switch tab |
R |
Force refresh |
s / S |
Sort column / reverse sort |
PgUp / PgDn |
Page up / down |
Ctrl+R |
Restart app |
| Key |
Action |
j / k |
Navigate |
Enter |
View detail |
Space |
Select for bulk action |
/ |
Filter |
Ctrl+N |
Create server |
Ctrl+D |
Delete |
Ctrl+O |
Soft reboot |
p |
Pause / unpause |
Ctrl+Z |
Suspend / resume |
Ctrl+E |
Shelve / unshelve |
Ctrl+F |
Resize |
Ctrl+A |
Assign floating IP |
l |
Console log |
a |
Action history |
| Key |
Action |
j / k |
Scroll |
Ctrl+D |
Delete |
Ctrl+O / Ctrl+P |
Soft / hard reboot |
p |
Pause / unpause |
Ctrl+Z |
Suspend / resume |
Ctrl+E |
Shelve / unshelve |
Ctrl+F |
Resize |
Ctrl+Y / Ctrl+X |
Confirm / revert resize |
Ctrl+A |
Assign floating IP |
l |
Console log |
a |
Action history |
Esc |
Back to list |
| Key |
Action |
Enter |
View detail |
Ctrl+D |
Delete |
Ctrl+T |
Detach (from detail) |
| Key |
Action |
Ctrl+N |
Allocate |
Ctrl+T |
Disassociate |
Ctrl+D |
Release |
| Key |
Action |
Enter |
Expand / collapse rules |
Ctrl+D |
Delete selected rule |
| Key |
Action |
Enter |
View detail tree |
Ctrl+D |
Delete (cascade) |
| Key |
Action |
Tab / Shift+Tab |
Next / prev field |
Enter |
Open picker |
Ctrl+S |
Submit |
Esc |
Cancel |
Built with:
src/internal/
app/ # Root model, routing, actions, rendering (7 files)
cloud/ # Auth, service detection, project listing
compute/ # Nova: servers, flavors, keypairs, actions
network/ # Neutron: networks, floating IPs, security groups
volume/ # Cinder: volumes
loadbalancer/ # Octavia: LBs, listeners, pools, members
quota/ # Quota fetching (compute, network, storage)
shared/ # Keys, styles, messages
ui/ # All view components (14 packages)
Apache 2.0