meine
meine 🌒 - A CLI file manager and system utility built with Textual. It combines intuitive command parsing with rich t…
sacha is a keyboard-first AWS TUI inspired by classic two-pane file managers. Browse, search, and manage CloudWatch Log…
git clone https://github.com/Sachamama/sacha.gitSachamama/sachaKeyboard-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/sacha
go install github.com/sachamama/sacha/cmd/sacha@latest
Requires 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 build
Check 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:
--profile, --region, --service)AWS_PROFILE, AWS_REGION, AWS_DEFAULT_REGION)Sacha remembers your last-used region and service automatically.
c), delete (d) with confirmation, set retention policy (R) with standard presets (1d to 1y or never).space/a and tail them simultaneously with t. Dynamic refresh when selection changes./aws/lambda/my-func → my-func). Timestamps show the base time for the first event and relative offsets (+1.5s, +2m30s) for subsequent events.H while tailing to enter field paths (e.g., .level .message .statusCode). Matching JSON values are highlighted in the log output.F to toggle filtering: only events containing the highlighted fields are shown. Press F again to show all events.tab/h/l to switch between groups and tail panels. Focused panel highlighted with colored border.f while tailing for a distraction-free view with horizontal scrolling.enter/space to open a scrollable popup with pretty-printed JSON.enter, go back with esc/backspace.space, select all with a.d to download selected files and folders to ./sacha-downloads/, preserving folder structure.p to preview file contents inline.y to copy S3 URI.enter to scan items with lazy-loaded pagination./ to filter tables or items by value.enter/space to view full attribute details in a scrollable popup.y to copy table ARN.enter/space to expand and view environment variables, layers, and full configuration./ to search.y to copy function ARN.enter, go back with esc/backspace/h.enter/space on a parameter for full details.y to copy parameter value or path.enter to receive messages with visibility timeout 0 — messages stay in the queue.space to view full queue attributes.y to copy queue URL or message body./ to filter queues by name.enter/space to expand and view full metadata including tags, security groups, VPC, and subnet./ to search by name, instance ID, type, state, or IP address.y to copy instance ID.| 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:
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.
more like this
meine 🌒 - A CLI file manager and system utility built with Textual. It combines intuitive command parsing with rich t…
search projects, people, and tags