{"id":45902556,"url":"https://github.com/Sachamama/sacha","last_synced_at":"2026-03-01T16:00:41.442Z","repository":{"id":328847114,"uuid":"1112971759","full_name":"Sachamama/sacha","owner":"Sachamama","description":"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.","archived":false,"fork":false,"pushed_at":"2026-02-19T10:58:36.000Z","size":9893,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-19T11:43:29.634Z","etag":null,"topics":["aws","bubbletea","cli","cloudwatch","dynamodb","golang","lambda","s3","terminal","tui"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Sachamama.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"https://buymeacoffee.com/sachamama","thanks_dev":null,"custom":null}},"created_at":"2025-12-09T10:52:59.000Z","updated_at":"2026-02-19T10:55:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Sachamama/sacha","commit_stats":null,"previous_names":["sachamama/sacha"],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/Sachamama/sacha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sachamama%2Fsacha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sachamama%2Fsacha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sachamama%2Fsacha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sachamama%2Fsacha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sachamama","download_url":"https://codeload.github.com/Sachamama/sacha/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sachamama%2Fsacha/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29974315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T15:41:30.362Z","status":"ssl_error","status_checked_at":"2026-03-01T15:37:07.343Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","bubbletea","cli","cloudwatch","dynamodb","golang","lambda","s3","terminal","tui"],"created_at":"2026-02-28T00:01:23.924Z","updated_at":"2026-03-01T16:00:41.436Z","avatar_url":"https://github.com/Sachamama.png","language":"Go","funding_links":["https://buymeacoffee.com/https://buymeacoffee.com/sachamama","https://buymeacoffee.com/sachamama"],"categories":["Table of Contents"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# sacha\n\n**Keyboard-first AWS TUI for your terminal**\n\n[![CI](https://github.com/Sachamama/sacha/actions/workflows/ci.yml/badge.svg)](https://github.com/Sachamama/sacha/actions/workflows/ci.yml)\n[![Release](https://github.com/Sachamama/sacha/actions/workflows/release.yml/badge.svg)](https://github.com/Sachamama/sacha/actions/workflows/release.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/sachamama/sacha)](https://goreportcard.com/report/github.com/sachamama/sacha)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/Sachamama/sacha/blob/main/LICENSE)\n[![Go Version](https://img.shields.io/github/go-mod/go-version/Sachamama/sacha)](https://go.dev/)\n[![Latest Release](https://img.shields.io/github/v/release/Sachamama/sacha?sort=semver)](https://github.com/Sachamama/sacha/releases/latest)\n\nBrowse, search, and manage AWS resources directly from your terminal.\nNo more switching between browser tabs and consoles.\n\n[Install](#install) \u0026bull; [Quick Start](#quick-start) \u0026bull; [Features](#features) \u0026bull; [Keybindings](#keybindings) \u0026bull; [Docs](https://sachamama.github.io/sacha/) \u0026bull; [Contributing](CONTRIBUTING.md)\n\n\u003ca href=\"https://buymeacoffee.com/sachamama\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" height=\"36\"\u003e\u003c/a\u003e\n\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"demos/demo.gif\" alt=\"sacha demo\" width=\"800\"\u003e\n\u003c/p\u003e\n\n---\n\n## Why sacha?\n\nSacha 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.\n\n\u003e **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.\n\n### Supported Services\n\n| Service | What you can do |\n|---------|----------------|\n| **CloudWatch Logs** | Search, multi-select, and tail multiple log groups. Highlight and filter JSON fields with jq syntax. Create, delete, and set retention policies. |\n| **S3** | Browse buckets and objects. Download files and folders recursively. Preview text content. Copy S3 URIs. |\n| **DynamoDB** | Browse tables and scan items. View table metadata, key schema, and GSIs. Inspect full item attributes. |\n| **Lambda** | Browse functions. View configuration, environment variables, layers, and runtime details. |\n| **SSM Parameter Store** | Navigate parameters by path hierarchy. View values with decryption. Supports String, StringList, SecureString. |\n| **SQS** | Browse queues with message stats. Peek messages non-destructively. View FIFO/Standard attributes and redrive policies. |\n| **EC2** | Browse instances with state, type, IPs, and tags. Expand for full metadata. Filter by name, ID, type, state, or IP. |\n\n---\n\n## Install\n\n**Prerequisites:** AWS credentials configured (via `~/.aws/credentials`, environment variables, or IAM role).\n\n### Homebrew (macOS / Linux)\n\n```bash\nbrew install sachamama/tap/sacha\n```\n\n### Go Install\n\n```bash\ngo install github.com/sachamama/sacha/cmd/sacha@latest\n```\n\nRequires Go 1.22+.\n\n### Pre-built Binaries\n\nDownload from [GitHub Releases](https://github.com/Sachamama/sacha/releases):\n\n```bash\n# macOS (Apple Silicon)\ncurl -Lo sacha.tar.gz https://github.com/Sachamama/sacha/releases/latest/download/sacha_VERSION_darwin_arm64.tar.gz\ntar xzf sacha.tar.gz \u0026\u0026 sudo mv sacha /usr/local/bin/\n\n# macOS (Intel)\ncurl -Lo sacha.tar.gz https://github.com/Sachamama/sacha/releases/latest/download/sacha_VERSION_darwin_amd64.tar.gz\ntar xzf sacha.tar.gz \u0026\u0026 sudo mv sacha /usr/local/bin/\n\n# Linux (x86_64)\ncurl -Lo sacha.tar.gz https://github.com/Sachamama/sacha/releases/latest/download/sacha_VERSION_linux_amd64.tar.gz\ntar xzf sacha.tar.gz \u0026\u0026 sudo mv sacha /usr/local/bin/\n\n# Linux (ARM64)\ncurl -Lo sacha.tar.gz https://github.com/Sachamama/sacha/releases/latest/download/sacha_VERSION_linux_arm64.tar.gz\ntar xzf sacha.tar.gz \u0026\u0026 sudo mv sacha /usr/local/bin/\n```\n\nReplace `VERSION` with the actual version (e.g., `1.0.0`).\n\n### From Source\n\n```bash\ngit clone https://github.com/Sachamama/sacha.git\ncd sacha\nmake build  # binary at bin/sacha\n```\n\n### Update\n\n```bash\n# Homebrew\nbrew upgrade sacha\n\n# Go install\ngo install github.com/sachamama/sacha/cmd/sacha@latest\n\n# Pre-built binary — download from https://github.com/Sachamama/sacha/releases\n# From source\ngit pull \u0026\u0026 make build\n```\n\nCheck your current version: `sacha --version`\n\n---\n\n## Quick Start\n\n```bash\nsacha\n# or with explicit options\nsacha --profile production --region us-east-1 --service cloudwatch-logs\n```\n\n### Global Flags\n\n| Flag | Description |\n|------|-------------|\n| `--profile` | AWS profile to use |\n| `--region` | AWS region |\n| `--service` | Jump directly to a service (`cloudwatch-logs`, `s3`, `dynamodb`, `lambda`, `ssm`, `sqs`, `ec2`) |\n| `--verbose` | Enable debug logging |\n| `--version` | Show version information |\n\n### Configuration\n\nConfig file: `~/.config/sacha/config.json`\n\nResolution precedence:\n1. CLI flags (`--profile`, `--region`, `--service`)\n2. Environment variables (`AWS_PROFILE`, `AWS_REGION`, `AWS_DEFAULT_REGION`)\n3. Config file\n4. AWS SDK defaults\n\nSacha remembers your last-used region and service automatically.\n\n---\n\n## Features\n\n### CloudWatch Logs\n\n- **Split-pane TUI** \u0026mdash; left pane lists log groups; right pane shows details or live tail output.\n- **Log group management** \u0026mdash; create (`c`), delete (`d`) with confirmation, set retention policy (`R`) with standard presets (1d to 1y or never).\n- **Multi-group tailing** \u0026mdash; select multiple groups with `space`/`a` and tail them simultaneously with `t`. Dynamic refresh when selection changes.\n- **Compact display** \u0026mdash; log group names show only the last path segment (e.g., `/aws/lambda/my-func` \u0026rarr; `my-func`). Timestamps show the base time for the first event and relative offsets (`+1.5s`, `+2m30s`) for subsequent events.\n- **jq-style highlight** \u0026mdash; press `H` while tailing to enter field paths (e.g., `.level .message .statusCode`). Matching JSON values are highlighted in the log output.\n- **Filter by highlight** \u0026mdash; press `F` to toggle filtering: only events containing the highlighted fields are shown. Press `F` again to show all events.\n- **Panel focus** \u0026mdash; `tab`/`h`/`l` to switch between groups and tail panels. Focused panel highlighted with colored border.\n- **Fullscreen mode** \u0026mdash; press `f` while tailing for a distraction-free view with horizontal scrolling.\n- **Expand events** \u0026mdash; `enter`/`space` to open a scrollable popup with pretty-printed JSON.\n\n### S3\n\n- **Bucket and object browser** \u0026mdash; navigate into buckets and folders with `enter`, go back with `esc`/`backspace`.\n- **Batch operations** \u0026mdash; multi-select files and folders with `space`, select all with `a`.\n- **Recursive downloads** \u0026mdash; press `d` to download selected files and folders to `./sacha-downloads/`, preserving folder structure.\n- **Text preview** \u0026mdash; press `p` to preview file contents inline.\n- **Clipboard** \u0026mdash; `y` to copy S3 URI.\n- **Lazy pagination** \u0026mdash; loads more objects as you scroll near the bottom.\n\n### DynamoDB\n\n- **Two-pane table browser** \u0026mdash; table list on the left, metadata on the right (status, item count, size, billing, key schema, GSIs).\n- **Item scanning** \u0026mdash; press `enter` to scan items with lazy-loaded pagination.\n- **Search \u0026 filter** \u0026mdash; `/` to filter tables or items by value.\n- **Expand items** \u0026mdash; `enter`/`space` to view full attribute details in a scrollable popup.\n- **All attribute types** \u0026mdash; strings, numbers, booleans, binary, sets, lists, and maps.\n- **Clipboard** \u0026mdash; `y` to copy table ARN.\n\n### Lambda\n\n- **Function browser** \u0026mdash; two-pane view with runtime, handler, memory, timeout, code size, state, and architecture in the details panel.\n- **Deep inspection** \u0026mdash; `enter`/`space` to expand and view environment variables, layers, and full configuration.\n- **Filter by name or runtime** \u0026mdash; `/` to search.\n- **Clipboard** \u0026mdash; `y` to copy function ARN.\n- **Lazy pagination** \u0026mdash; loads more functions as you scroll.\n\n### SSM Parameter Store\n\n- **Hierarchical browsing** \u0026mdash; navigate path prefixes like folders with `enter`, go back with `esc`/`backspace`/`h`.\n- **Parameter details** \u0026mdash; value (with automatic decryption), type, version, last modified, ARN.\n- **All types supported** \u0026mdash; String, StringList, SecureString.\n- **Expand popup** \u0026mdash; `enter`/`space` on a parameter for full details.\n- **Clipboard** \u0026mdash; `y` to copy parameter value or path.\n- **Scroll memory** \u0026mdash; cursor position restored when navigating back.\n\n### SQS\n\n- **Queue browser** \u0026mdash; message counts (visible, in-flight, delayed), queue type, visibility timeout, redrive policy.\n- **Non-destructive peek** \u0026mdash; press `enter` to receive messages with visibility timeout 0 \u0026mdash; messages stay in the queue.\n- **Message inspection** \u0026mdash; navigate messages, view auto-formatted JSON bodies, expand in a scrollable popup.\n- **Queue details popup** \u0026mdash; press `space` to view full queue attributes.\n- **Clipboard** \u0026mdash; `y` to copy queue URL or message body.\n- **Search/filter** \u0026mdash; `/` to filter queues by name.\n\n### EC2\n\n- **Instance browser** \u0026mdash; two-pane view with name, instance ID, type, state, public/private IPs, and launch time.\n- **Deep inspection** \u0026mdash; `enter`/`space` to expand and view full metadata including tags, security groups, VPC, and subnet.\n- **Filter** \u0026mdash; `/` to search by name, instance ID, type, state, or IP address.\n- **Clipboard** \u0026mdash; `y` to copy instance ID.\n- **Lazy pagination** \u0026mdash; loads more instances as you scroll.\n\n---\n\n## Keybindings\n\n### Global\n\n| Key | Action |\n|-----|--------|\n| `r` | Change region |\n| `s` | Change service |\n| `Ctrl+C` | Quit |\n\n### CloudWatch Logs\n\n| Key | Context | Action |\n|-----|---------|--------|\n| `j/k` or `↑/↓` | List | Navigate log groups |\n| `/` | List | Search / filter |\n| `space` | List | Toggle selection |\n| `a` | List | Select all |\n| `c` | List | Create log group |\n| `d` | List | Delete selected log groups |\n| `R` | List | Set retention policy |\n| `t` | List | Start tailing selected groups |\n| `tab`, `h/l` | Tailing | Switch panel focus |\n| `enter` / `space` | Tailing | Expand log event |\n| `H` | Tailing | Set highlight fields (jq syntax: `.level .message`) |\n| `F` | Tailing | Toggle filter by highlighted fields |\n| `f` | Tailing | Toggle fullscreen |\n| `h/l` or `←/→` | Fullscreen | Scroll horizontally |\n| `x` or `q/esc` | Tailing | Stop tailing |\n| `j/k` or `↑/↓` | Popup | Scroll content |\n| `pgup/pgdn` | Popup | Page scroll |\n| `esc` | Popup | Close |\n\n### S3\n\n| Key | Context | Action |\n|-----|---------|--------|\n| `j/k` or `↑/↓` | Browse | Navigate |\n| `/` | Browse | Search / filter |\n| `enter` | Browse | Open bucket / folder |\n| `space` | Browse | Toggle selection |\n| `a` | Browse | Toggle all (current page) |\n| `d` | Browse | Download selected (recursive) |\n| `p` | Browse | Preview text file |\n| `y` | Browse | Copy S3 URI |\n| `esc/backspace` | Browse | Go back |\n\n### DynamoDB\n\n| Key | Context | Action |\n|-----|---------|--------|\n| `j/k` or `↑/↓` | Tables | Navigate |\n| `/` | Tables | Search / filter |\n| `enter` | Tables | Open table (scan items) |\n| `y` | Tables | Copy table ARN |\n| `enter/space` | Items | Expand item details |\n| `esc/backspace/h` | Items | Go back to tables |\n| `j/k` or `↑/↓` | Popup | Scroll content |\n| `pgup/pgdn` | Popup | Page scroll |\n| `esc` | Popup | Close |\n\n### Lambda\n\n| Key | Context | Action |\n|-----|---------|--------|\n| `j/k` or `↑/↓` | List | Navigate |\n| `/` | List | Search / filter by name or runtime |\n| `enter/space` | List | Expand function details |\n| `y` | List | Copy function ARN |\n| `j/k` or `↑/↓` | Popup | Scroll content |\n| `pgup/pgdn` | Popup | Page scroll |\n| `esc` | Popup | Close |\n\n### SSM Parameter Store\n\n| Key | Context | Action |\n|-----|---------|--------|\n| `j/k` or `↑/↓` | Browse | Navigate |\n| `/` | Browse | Search / filter |\n| `enter/space` | Browse | Enter path prefix or expand parameter |\n| `y` | Browse | Copy parameter value or path |\n| `esc/backspace/h` | Browse | Go back one level |\n| `j/k` or `↑/↓` | Popup | Scroll content |\n| `pgup/pgdn` | Popup | Page scroll |\n| `esc` | Popup | Close |\n\n### SQS\n\n| Key | Context | Action |\n|-----|---------|--------|\n| `j/k` or `↑/↓` | Queues | Navigate |\n| `/` | Queues | Search / filter |\n| `enter` | Queues | Peek messages |\n| `space` | Queues | Expand queue details |\n| `y` | Queues | Copy queue URL |\n| `enter/space` | Messages | Expand message |\n| `y` | Messages | Copy message body |\n| `esc/backspace/h` | Messages | Go back to queues |\n| `j/k` or `↑/↓` | Popup | Scroll content |\n| `pgup/pgdn` | Popup | Page scroll |\n| `esc` | Popup | Close |\n\n### EC2\n\n| Key | Context | Action |\n|-----|---------|--------|\n| `j/k` or `↑/↓` | List | Navigate |\n| `/` | List | Search / filter by name, ID, type, state, or IP |\n| `enter/space` | List | Expand instance details |\n| `y` | List | Copy instance ID |\n| `j/k` or `↑/↓` | Popup | Scroll content |\n| `pgup/pgdn` | Popup | Page scroll |\n| `esc` | Popup | Close |\n\n---\n\n## Architecture\n\nSacha uses a layered architecture built on [Bubble Tea](https://github.com/charmbracelet/bubbletea):\n\n```\ncmd/sacha/main.go          CLI entry point (Cobra)\ninternal/config/            Configuration (CLI \u003e env \u003e file \u003e defaults)\ninternal/aws/               AWS SDK v2 abstraction + Service interface\ninternal/\u003cservice\u003e/          Domain clients and types per service\ninternal/ui/\u003cservice\u003e/       Bubble Tea models and views per service\ninternal/ui/app/             Main app shell (region/service switching)\n```\n\nEach 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.\n\n---\n\n## Versioning\n\nSacha follows [semantic versioning](https://semver.org/). Releases are tagged `vMAJOR.MINOR.PATCH` and automatically built via [GoReleaser](https://goreleaser.com/):\n\n- Pre-built binaries for Linux, macOS, Windows (amd64 + arm64)\n- Homebrew tap updates\n- SHA256 checksums\n- Auto-generated changelogs\n\nBrowse all releases: [github.com/Sachamama/sacha/releases](https://github.com/Sachamama/sacha/releases)\n\n---\n\n## Contributing\n\nContributions 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.\n\n---\n\n## License\n\n[MIT](LICENSE) \u0026copy; [Sachamama](https://github.com/Sachamama)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSachamama%2Fsacha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSachamama%2Fsacha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSachamama%2Fsacha/lists"}