https://github.com/Sachamama/sacha
sacha is a keyboard-first AWS TUI inspired by classic two-pane file managers. Browse, search, and manage CloudWatch Logs, S3, DynamoDB, and Lambda from your terminal.
https://github.com/Sachamama/sacha
aws bubbletea cli cloudwatch dynamodb golang lambda s3 terminal tui
Last synced: 3 months ago
JSON representation
sacha is a keyboard-first AWS TUI inspired by classic two-pane file managers. Browse, search, and manage CloudWatch Logs, S3, DynamoDB, and Lambda from your terminal.
- Host: GitHub
- URL: https://github.com/Sachamama/sacha
- Owner: Sachamama
- License: mit
- Created: 2025-12-09T10:52:59.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-02-19T10:58:36.000Z (4 months ago)
- Last Synced: 2026-02-19T11:43:29.634Z (4 months ago)
- Topics: aws, bubbletea, cli, cloudwatch, dynamodb, golang, lambda, s3, terminal, tui
- Language: Go
- Size: 9.43 MB
- Stars: 3
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Security: SECURITY.md
- Roadmap: ROADMAP.md
Awesome Lists containing this project
- awesome-tuis - sacha - pane AWS TUI for browsing, searching, and managing resources across seven services including CloudWatch Logs, S3, DynamoDB, Lambda, SSM, SQS, and EC2. (Table of Contents)
README
# sacha
**Keyboard-first AWS TUI for your terminal**
[](https://github.com/Sachamama/sacha/actions/workflows/ci.yml)
[](https://github.com/Sachamama/sacha/actions/workflows/release.yml)
[](https://goreportcard.com/report/github.com/sachamama/sacha)
[](https://github.com/Sachamama/sacha/blob/main/LICENSE)
[](https://go.dev/)
[](https://github.com/Sachamama/sacha/releases/latest)
Browse, search, and manage AWS resources directly from your terminal.
No more switching between browser tabs and consoles.
[Install](#install) • [Quick Start](#quick-start) • [Features](#features) • [Keybindings](#keybindings) • [Docs](https://sachamama.github.io/sacha/) • [Contributing](CONTRIBUTING.md)
---
## Why sacha?
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.
### Supported Services
| 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. |
---
## Install
**Prerequisites:** AWS credentials configured (via `~/.aws/credentials`, environment variables, or IAM role).
### Homebrew (macOS / Linux)
```bash
brew install sachamama/tap/sacha
```
### Go Install
```bash
go install github.com/sachamama/sacha/cmd/sacha@latest
```
Requires Go 1.22+.
### Pre-built Binaries
Download from [GitHub Releases](https://github.com/Sachamama/sacha/releases):
```bash
# 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`).
### From Source
```bash
git clone https://github.com/Sachamama/sacha.git
cd sacha
make build # binary at bin/sacha
```
### Update
```bash
# 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 build
```
Check your current version: `sacha --version`
---
## Quick Start
```bash
sacha
# or with explicit options
sacha --profile production --region us-east-1 --service cloudwatch-logs
```
### Global Flags
| 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 |
### Configuration
Config file: `~/.config/sacha/config.json`
Resolution precedence:
1. CLI flags (`--profile`, `--region`, `--service`)
2. Environment variables (`AWS_PROFILE`, `AWS_REGION`, `AWS_DEFAULT_REGION`)
3. Config file
4. AWS SDK defaults
Sacha remembers your last-used region and service automatically.
---
## Features
### CloudWatch Logs
- **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`/`a` and tail them simultaneously with `t`. 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 `H` while tailing to enter field paths (e.g., `.level .message .statusCode`). Matching JSON values are highlighted in the log output.
- **Filter by highlight** — press `F` to toggle filtering: only events containing the highlighted fields are shown. Press `F` again to show all events.
- **Panel focus** — `tab`/`h`/`l` to switch between groups and tail panels. Focused panel highlighted with colored border.
- **Fullscreen mode** — press `f` while tailing for a distraction-free view with horizontal scrolling.
- **Expand events** — `enter`/`space` to open a scrollable popup with pretty-printed JSON.
### S3
- **Bucket and object browser** — navigate into buckets and folders with `enter`, go back with `esc`/`backspace`.
- **Batch operations** — multi-select files and folders with `space`, select all with `a`.
- **Recursive downloads** — press `d` to download selected files and folders to `./sacha-downloads/`, preserving folder structure.
- **Text preview** — press `p` to preview file contents inline.
- **Clipboard** — `y` to copy S3 URI.
- **Lazy pagination** — loads more objects as you scroll near the bottom.
### DynamoDB
- **Two-pane table browser** — table list on the left, metadata on the right (status, item count, size, billing, key schema, GSIs).
- **Item scanning** — press `enter` to scan items with lazy-loaded pagination.
- **Search & filter** — `/` to filter tables or items by value.
- **Expand items** — `enter`/`space` to view full attribute details in a scrollable popup.
- **All attribute types** — strings, numbers, booleans, binary, sets, lists, and maps.
- **Clipboard** — `y` to copy table ARN.
### Lambda
- **Function browser** — two-pane view with runtime, handler, memory, timeout, code size, state, and architecture in the details panel.
- **Deep inspection** — `enter`/`space` to expand and view environment variables, layers, and full configuration.
- **Filter by name or runtime** — `/` to search.
- **Clipboard** — `y` to copy function ARN.
- **Lazy pagination** — loads more functions as you scroll.
### SSM Parameter Store
- **Hierarchical browsing** — navigate path prefixes like folders with `enter`, go back with `esc`/`backspace`/`h`.
- **Parameter details** — value (with automatic decryption), type, version, last modified, ARN.
- **All types supported** — String, StringList, SecureString.
- **Expand popup** — `enter`/`space` on a parameter for full details.
- **Clipboard** — `y` to copy parameter value or path.
- **Scroll memory** — cursor position restored when navigating back.
### SQS
- **Queue browser** — message counts (visible, in-flight, delayed), queue type, visibility timeout, redrive policy.
- **Non-destructive peek** — press `enter` to 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 `space` to view full queue attributes.
- **Clipboard** — `y` to copy queue URL or message body.
- **Search/filter** — `/` to filter queues by name.
### EC2
- **Instance browser** — two-pane view with name, instance ID, type, state, public/private IPs, and launch time.
- **Deep inspection** — `enter`/`space` to 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** — `y` to copy instance ID.
- **Lazy pagination** — loads more instances as you scroll.
---
## Keybindings
### Global
| Key | Action |
|-----|--------|
| `r` | Change region |
| `s` | Change service |
| `Ctrl+C` | Quit |
### CloudWatch Logs
| 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 |
### S3
| 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 |
### DynamoDB
| 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 |
### Lambda
| 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 |
### SSM Parameter Store
| 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 |
### SQS
| 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 |
### EC2
| 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 |
---
## Architecture
Sacha uses a layered architecture built on [Bubble Tea](https://github.com/charmbracelet/bubbletea):
```
cmd/sacha/main.go CLI entry point (Cobra)
internal/config/ Configuration (CLI > env > file > defaults)
internal/aws/ AWS SDK v2 abstraction + Service interface
internal// Domain clients and types per service
internal/ui// 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](CONTRIBUTING.md) for how to add a new service.
---
## Versioning
Sacha follows [semantic versioning](https://semver.org/). Releases are tagged `vMAJOR.MINOR.PATCH` and automatically built via [GoReleaser](https://goreleaser.com/):
- 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](https://github.com/Sachamama/sacha/releases)
---
## Contributing
Contributions are welcome! Please read the [Contributing Guide](CONTRIBUTING.md) for details on the development workflow, coding standards, commit conventions, and how to add new AWS services.
---
## License
[MIT](LICENSE) © [Sachamama](https://github.com/Sachamama)