Keyboard-first AWS TUI for your terminal
Browse, search, and manage AWS resources directly from your terminal. No more switching between browser tabs and consoles.
Install • Quick Start • Features • Keybindings • Docs • Contributing
Sacha is a two-pane TUI inspired by classic file managers. It keeps you in the terminal while you explore AWS resources across seven services, with vim-style navigation, lazy-loaded pagination, and automatic JSON formatting.
sachamama comes from Quechua and means "mother of the forest." sacha shortens the idea to "forest," reflecting how the tool helps you see the bigger AWS landscape without getting lost in individual trees.
| Service | What you can do |
|---|---|
| CloudWatch Logs | Search, multi-select, and tail multiple log groups. Highlight and filter JSON fields with jq syntax. Create, delete, and set retention policies. |
| S3 | Browse buckets and objects. Download files and folders recursively. Preview text content. Copy S3 URIs. |
| DynamoDB | Browse tables and scan items. View table metadata, key schema, and GSIs. Inspect full item attributes. |
| Lambda | Browse functions. View configuration, environment variables, layers, and runtime details. |
| SSM Parameter Store | Navigate parameters by path hierarchy. View values with decryption. Supports String, StringList, SecureString. |
| SQS | Browse queues with message stats. Peek messages non-destructively. View FIFO/Standard attributes and redrive policies. |
| EC2 | Browse instances with state, type, IPs, and tags. Expand for full metadata. Filter by name, ID, type, state, or IP. |
Prerequisites: AWS credentials configured (via ~/.aws/credentials, environment variables, or IAM role).
brew install sachamama/tap/sachago install github.com/sachamama/sacha/cmd/sacha@latestRequires Go 1.22+.
Download from GitHub Releases:
# macOS (Apple Silicon)
curl -Lo sacha.tar.gz https://github.com/Sachamama/sacha/releases/latest/download/sacha_VERSION_darwin_arm64.tar.gz
tar xzf sacha.tar.gz && sudo mv sacha /usr/local/bin/
# macOS (Intel)
curl -Lo sacha.tar.gz https://github.com/Sachamama/sacha/releases/latest/download/sacha_VERSION_darwin_amd64.tar.gz
tar xzf sacha.tar.gz && sudo mv sacha /usr/local/bin/
# Linux (x86_64)
curl -Lo sacha.tar.gz https://github.com/Sachamama/sacha/releases/latest/download/sacha_VERSION_linux_amd64.tar.gz
tar xzf sacha.tar.gz && sudo mv sacha /usr/local/bin/
# Linux (ARM64)
curl -Lo sacha.tar.gz https://github.com/Sachamama/sacha/releases/latest/download/sacha_VERSION_linux_arm64.tar.gz
tar xzf sacha.tar.gz && sudo mv sacha /usr/local/bin/Replace VERSION with the actual version (e.g., 1.0.0).
git clone https://github.com/Sachamama/sacha.git
cd sacha
make build # binary at bin/sacha# Homebrew
brew upgrade sacha
# Go install
go install github.com/sachamama/sacha/cmd/sacha@latest
# Pre-built binary — download from https://github.com/Sachamama/sacha/releases
# From source
git pull && make buildCheck your current version: sacha --version
sacha
# or with explicit options
sacha --profile production --region us-east-1 --service cloudwatch-logs| Flag | Description |
|---|---|
--profile |
AWS profile to use |
--region |
AWS region |
--service |
Jump directly to a service (cloudwatch-logs, s3, dynamodb, lambda, ssm, sqs, ec2) |
--verbose |
Enable debug logging |
--version |
Show version information |
Config file: ~/.config/sacha/config.json
Resolution precedence:
- CLI flags (
--profile,--region,--service) - Environment variables (
AWS_PROFILE,AWS_REGION,AWS_DEFAULT_REGION) - Config file
- AWS SDK defaults
Sacha remembers your last-used region and service automatically.
- Split-pane TUI — left pane lists log groups; right pane shows details or live tail output.
- Log group management — create (
c), delete (d) with confirmation, set retention policy (R) with standard presets (1d to 1y or never). - Multi-group tailing — select multiple groups with
space/aand tail them simultaneously witht. Dynamic refresh when selection changes. - Compact display — log group names show only the last path segment (e.g.,
/aws/lambda/my-func→my-func). Timestamps show the base time for the first event and relative offsets (+1.5s,+2m30s) for subsequent events. - jq-style highlight — press
Hwhile tailing to enter field paths (e.g.,.level .message .statusCode). Matching JSON values are highlighted in the log output. - Filter by highlight — press
Fto toggle filtering: only events containing the highlighted fields are shown. PressFagain to show all events. - Panel focus —
tab/h/lto switch between groups and tail panels. Focused panel highlighted with colored border. - Fullscreen mode — press
fwhile tailing for a distraction-free view with horizontal scrolling. - Expand events —
enter/spaceto open a scrollable popup with pretty-printed JSON.
- Bucket and object browser — navigate into buckets and folders with
enter, go back withesc/backspace. - Batch operations — multi-select files and folders with
space, select all witha. - Recursive downloads — press
dto download selected files and folders to./sacha-downloads/, preserving folder structure. - Text preview — press
pto preview file contents inline. - Clipboard —
yto copy S3 URI. - Lazy pagination — loads more objects as you scroll near the bottom.
- Two-pane table browser — table list on the left, metadata on the right (status, item count, size, billing, key schema, GSIs).
- Item scanning — press
enterto scan items with lazy-loaded pagination. - Search & filter —
/to filter tables or items by value. - Expand items —
enter/spaceto view full attribute details in a scrollable popup. - All attribute types — strings, numbers, booleans, binary, sets, lists, and maps.
- Clipboard —
yto copy table ARN.
- Function browser — two-pane view with runtime, handler, memory, timeout, code size, state, and architecture in the details panel.
- Deep inspection —
enter/spaceto expand and view environment variables, layers, and full configuration. - Filter by name or runtime —
/to search. - Clipboard —
yto copy function ARN. - Lazy pagination — loads more functions as you scroll.
- Hierarchical browsing — navigate path prefixes like folders with
enter, go back withesc/backspace/h. - Parameter details — value (with automatic decryption), type, version, last modified, ARN.
- All types supported — String, StringList, SecureString.
- Expand popup —
enter/spaceon a parameter for full details. - Clipboard —
yto copy parameter value or path. - Scroll memory — cursor position restored when navigating back.
- Queue browser — message counts (visible, in-flight, delayed), queue type, visibility timeout, redrive policy.
- Non-destructive peek — press
enterto receive messages with visibility timeout 0 — messages stay in the queue. - Message inspection — navigate messages, view auto-formatted JSON bodies, expand in a scrollable popup.
- Queue details popup — press
spaceto view full queue attributes. - Clipboard —
yto copy queue URL or message body. - Search/filter —
/to filter queues by name.
- Instance browser — two-pane view with name, instance ID, type, state, public/private IPs, and launch time.
- Deep inspection —
enter/spaceto expand and view full metadata including tags, security groups, VPC, and subnet. - Filter —
/to search by name, instance ID, type, state, or IP address. - Clipboard —
yto copy instance ID. - Lazy pagination — loads more instances as you scroll.
| Key | Action |
|---|---|
r |
Change region |
s |
Change service |
Ctrl+C |
Quit |
| Key | Context | Action |
|---|---|---|
j/k or ↑/↓ |
List | Navigate log groups |
/ |
List | Search / filter |
space |
List | Toggle selection |
a |
List | Select all |
c |
List | Create log group |
d |
List | Delete selected log groups |
R |
List | Set retention policy |
t |
List | Start tailing selected groups |
tab, h/l |
Tailing | Switch panel focus |
enter / space |
Tailing | Expand log event |
H |
Tailing | Set highlight fields (jq syntax: .level .message) |
F |
Tailing | Toggle filter by highlighted fields |
f |
Tailing | Toggle fullscreen |
h/l or ←/→ |
Fullscreen | Scroll horizontally |
x or q/esc |
Tailing | Stop tailing |
j/k or ↑/↓ |
Popup | Scroll content |
pgup/pgdn |
Popup | Page scroll |
esc |
Popup | Close |
| Key | Context | Action |
|---|---|---|
j/k or ↑/↓ |
Browse | Navigate |
/ |
Browse | Search / filter |
enter |
Browse | Open bucket / folder |
space |
Browse | Toggle selection |
a |
Browse | Toggle all (current page) |
d |
Browse | Download selected (recursive) |
p |
Browse | Preview text file |
y |
Browse | Copy S3 URI |
esc/backspace |
Browse | Go back |
| Key | Context | Action |
|---|---|---|
j/k or ↑/↓ |
Tables | Navigate |
/ |
Tables | Search / filter |
enter |
Tables | Open table (scan items) |
y |
Tables | Copy table ARN |
enter/space |
Items | Expand item details |
esc/backspace/h |
Items | Go back to tables |
j/k or ↑/↓ |
Popup | Scroll content |
pgup/pgdn |
Popup | Page scroll |
esc |
Popup | Close |
| Key | Context | Action |
|---|---|---|
j/k or ↑/↓ |
List | Navigate |
/ |
List | Search / filter by name or runtime |
enter/space |
List | Expand function details |
y |
List | Copy function ARN |
j/k or ↑/↓ |
Popup | Scroll content |
pgup/pgdn |
Popup | Page scroll |
esc |
Popup | Close |
| Key | Context | Action |
|---|---|---|
j/k or ↑/↓ |
Browse | Navigate |
/ |
Browse | Search / filter |
enter/space |
Browse | Enter path prefix or expand parameter |
y |
Browse | Copy parameter value or path |
esc/backspace/h |
Browse | Go back one level |
j/k or ↑/↓ |
Popup | Scroll content |
pgup/pgdn |
Popup | Page scroll |
esc |
Popup | Close |
| Key | Context | Action |
|---|---|---|
j/k or ↑/↓ |
Queues | Navigate |
/ |
Queues | Search / filter |
enter |
Queues | Peek messages |
space |
Queues | Expand queue details |
y |
Queues | Copy queue URL |
enter/space |
Messages | Expand message |
y |
Messages | Copy message body |
esc/backspace/h |
Messages | Go back to queues |
j/k or ↑/↓ |
Popup | Scroll content |
pgup/pgdn |
Popup | Page scroll |
esc |
Popup | Close |
| Key | Context | Action |
|---|---|---|
j/k or ↑/↓ |
List | Navigate |
/ |
List | Search / filter by name, ID, type, state, or IP |
enter/space |
List | Expand instance details |
y |
List | Copy instance ID |
j/k or ↑/↓ |
Popup | Scroll content |
pgup/pgdn |
Popup | Page scroll |
esc |
Popup | Close |
Sacha uses a layered architecture built on Bubble Tea:
cmd/sacha/main.go CLI entry point (Cobra)
internal/config/ Configuration (CLI > env > file > defaults)
internal/aws/ AWS SDK v2 abstraction + Service interface
internal/<service>/ Domain clients and types per service
internal/ui/<service>/ Bubble Tea models and views per service
internal/ui/app/ Main app shell (region/service switching)
Each service implements the awsx.Service interface and is registered in main.go. See the Contributing Guide for how to add a new service.
Sacha follows semantic versioning. Releases are tagged vMAJOR.MINOR.PATCH and automatically built via GoReleaser:
- Pre-built binaries for Linux, macOS, Windows (amd64 + arm64)
- Homebrew tap updates
- SHA256 checksums
- Auto-generated changelogs
Browse all releases: github.com/Sachamama/sacha/releases
Contributions are welcome! Please read the Contributing Guide for details on the development workflow, coding standards, commit conventions, and how to add new AWS services.

