Skip to content
juthrbogPublic

About

A TUI for managing resources in the Cloud.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

LazyCloud

A terminal UI for browsing and managing AWS resources

CI Go License Go Report Card Supported by LocalStack

LazyCloud demo: S3 buckets and a file preview, EC2 instances with the detail panel, and SQS queues

Built with Go and the Charm ecosystem. Inspired by amazing TUIs like lazygit and k9s.

Features

  • Browse and manage AWS resources without leaving your terminal
  • ReadOnly by default — mutations blocked regardless of IAM permissions until you switch to ReadWrite with W
  • Drill-down navigation with a side detail panel on wide terminals (≥120 cols)
  • Filterable, sortable tables with vim-style keybindings
  • Multi-select with bulk actions (start/stop/delete across selections)
  • Syntax-highlighted content viewer with visual selection and yank
  • In-app event log, command bar, and fuzzy-search pickers
  • Multiple AWS profiles and regions — switch at runtime
  • 6 color themes: Catppuccin, Dracula, Nord, and Tokyo Night, plus the light themes Catppuccin Latte and Tokyo Night Day. The default auto picks Catppuccin or Catppuccin Latte for the background of the terminal
  • TOML config with XDG support, Nerd Font icons with Unicode fallbacks
  • LocalStack integration for local development

Supported Services

Service Description
S3 Buckets, objects, versions, presigned URLs, copy/move, create/delete
EC2 Instances, AMIs, security groups, VPCs, subnets, start/stop/reboot/terminate, SSM connect, public AMI search
SQS Queues, message peek, send, purge, delete, DLQ redrive

Getting Started

Install with Homebrew

On macOS and Linux:

brew install juthrbog/tap/lazycloud

Install with Go

go install github.com/juthrbog/lazycloud@latest

This needs Go 1.26.2 or later. lazycloud --version shows the module version.

Install from releases

The Releases page has archives for Linux, macOS, and Windows, each for amd64 and arm64. The Windows archives are zip files.

Each release also has an SBOM (a list of the Go modules in the binary) for each archive. To make sure that an archive comes from the release workflow of this repository, use one of these commands:

# With the GitHub CLI
gh attestation verify lazycloud_0.6.0_linux_amd64.tar.gz --repo juthrbog/lazycloud

# With cosign: check the signature of checksums.txt, then the archive
cosign verify-blob checksums.txt --bundle checksums.txt.sigstore.json \
  --certificate-identity-regexp '^https://github.com/juthrbog/lazycloud/\.github/workflows/release\.yml@refs/tags/v' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com
sha256sum --ignore-missing -c checksums.txt

SSM Connect needs the AWS CLI and the Session Manager plugin on all platforms.

Build from source

go build -o lazycloud .
./lazycloud

Quick start

# Default AWS profile
./lazycloud

# Specify profile and region
./lazycloud --profile staging --region us-west-2

# Run against LocalStack
./lazycloud --endpoint http://localhost:4566
Using Taskfile
task deps              # download Go dependencies
task build             # build the binary
task run               # run against real AWS
task localstack:seed   # populate LocalStack with test data (see docs/DEVELOPMENT.md)
task dev               # run against LocalStack

CLI Flags

Flag Description
--profile AWS profile (falls back to AWS_PROFILE)
--region AWS region (falls back to AWS_REGION)
--endpoint Endpoint override for LocalStack (falls back to AWS_ENDPOINT_URL)
--theme Color theme: auto (default), catppuccin, catppuccin-latte, dracula, nord, tokyonight, tokyonight-day
--no-nerd-fonts Use plain Unicode icons instead of Nerd Font glyphs
--config Path to config file (default: ~/.config/lazycloud/config.toml)
--log Path to debug log file
--read-write Start in ReadWrite mode (default: ReadOnly)
--init-config Write default config file and exit
--version Print version and exit

Keybindings

Key Action
j/k or arrows Move the cursor
enter Open the resource. On Home, open the service picker
esc Go back, or clear the selection
/ Filter
space Select several rows
s/S Sort / reverse sort. On Home, s opens the service picker
r Refresh
tab Move the focus between the list and the side panel
backspace Go back to the view where you followed a link, with its panel
W Open the mode picker (ReadOnly or ReadWrite)
P Open the profile picker
R Open the region picker
T Open the theme picker
L Open the event log
: Command bar
? Help overlay (full keybinding reference)
ctrl+x Cancel a running operation, such as a download
q Go back. On Home, quit

Press ? in-app for the complete list including view-specific and panel keybindings. See docs/KEYBINDINGS.md for the keybinding system architecture.

Configuration

Generate the default config:

./lazycloud --init-config

This creates ~/.config/lazycloud/config.toml (or $XDG_CONFIG_HOME/lazycloud/config.toml):

[aws]
# profile = "default"
# region = "us-east-1"
# endpoint = ""

[display]
theme = "auto"          # auto, catppuccin, catppuccin-latte, dracula, nord, tokyonight, tokyonight-day
nerd_fonts = true       # false for plain Unicode fallbacks

[log]
# file = "/tmp/lazycloud.log"

Precedence: config file < env vars < CLI flags.

Tech Stack

Bubble Tea v2 | Lip Gloss v2 | Bubbles v2 | Huh v2 | Chroma | aws-sdk-go-v2 | testify | Taskfile | LocalStack

Architecture

LazyCloud follows the Elm Architecture via Bubble Tea. Views are pushed onto a navigation stack, AWS calls happen in tea.Cmd goroutines, and the root model routes messages between views, overlays, and the side panel.

internal/aws/        Service interfaces + SDK implementations
internal/views/      Bubble Tea view models (one per resource type)
internal/ui/         Shared components (table, filter, picker, toast, panel)
internal/app/        Root model — message router, layout, route table
internal/nav/        Stack-based navigator

See docs/ARCHITECTURE.md for runtime patterns, scaling strategy, and the guide for adding new services.

Testing

go test ./...              # unit tests
task test:race             # unit tests like CI (race detector, random order)

Contributing

LazyCloud is in early development and not yet accepting contributions. This may change in the future — check back later.

Supporters

Supported by LocalStack

Supported by LocalStack through their Open Source program.

License

Licensed under the Apache License 2.0.

About

A TUI for managing resources in the Cloud.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages