{"id":14530006,"url":"https://github.com/dhth/cueitup","last_synced_at":"2025-08-24T18:45:01.210Z","repository":{"id":226124139,"uuid":"767414170","full_name":"dhth/cueitup","owner":"dhth","description":"Inspect messages in an AWS SQS queue in a simple and deliberate manner","archived":false,"fork":false,"pushed_at":"2025-08-24T13:16:32.000Z","size":2310,"stargazers_count":52,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-24T17:26:40.120Z","etag":null,"topics":["aws","bubbletea","sqs","tui"],"latest_commit_sha":null,"homepage":"https://tools.dhruvs.space/cueitup","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/dhth.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-05T08:56:38.000Z","updated_at":"2025-08-24T13:16:34.000Z","dependencies_parsed_at":"2024-04-18T17:50:17.530Z","dependency_job_id":"3a03d6df-f8f2-4add-b088-668435c18350","html_url":"https://github.com/dhth/cueitup","commit_stats":null,"previous_names":["dhth/cueitup"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/dhth/cueitup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fcueitup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fcueitup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fcueitup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fcueitup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dhth","download_url":"https://codeload.github.com/dhth/cueitup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhth%2Fcueitup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271924975,"owners_count":24844523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-24T02:00:11.135Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","sqs","tui"],"created_at":"2024-09-05T00:01:04.101Z","updated_at":"2025-08-24T18:45:01.125Z","avatar_url":"https://github.com/dhth.png","language":"Go","funding_links":[],"categories":["Applications"],"sub_categories":["Cloud and DevOps"],"readme":"\u003cp align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003ecueitup\u003c/h1\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/dhth/cueitup/actions/workflows/main.yml\"\u003e\u003cimg alt=\"GitHub release\" src=\"https://img.shields.io/github/actions/workflow/status/dhth/cueitup/main.yml?style=flat-square\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/dhth/cueitup/releases/latest\"\u003e\u003cimg alt=\"Latest release\" src=\"https://img.shields.io/github/release/dhth/cueitup.svg?style=flat-square\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/dhth/cueitup/releases\"\u003e\u003cimg alt=\"Commits since latest release\" src=\"https://img.shields.io/github/commits-since/dhth/cueitup/latest?style=flat-square\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n`cueitup` lets you inspect messages in an AWS SQS queue in a simple and\ndeliberate manner. You can pull one or more messages on demand, peruse through\nthem in a list, and, if needed, persist them to your local filesystem. `cueitup`\noffers both a terminal UI and a web interface.\n\n![tui](https://github.com/user-attachments/assets/c1727615-46c1-483c-9e08-ffdb9c9e1fb6)\n\n![web interface](https://github.com/user-attachments/assets/848592e1-0e24-4eb0-a3c0-db12b4d34116)\n\nInstall\n---\n\n**homebrew**:\n\n```sh\nbrew install dhth/tap/cueitup\n```\n\n**go**:\n\n```sh\ngo install github.com/dhth/cueitup@latest\n```\n\nOr get the binaries directly from a\n[release](https://github.com/dhth/cueitup/releases). Read more about verifying\nthe authenticity of released artifacts [here](#-verifying-release-artifacts).\n\n🛠️ Configuration\n---\n\nCreate a YAML configuration file that looks like the following. The location of\nthis file depends on your operating system, and can be determined by running\n`cueitup\n-h`.\n\n```yaml\nprofiles:\n    # a name for a profile; you refer to it when running cueitup\n  - name: profile-a #\n\n    # the SQS queue URL\n    queue_url: https://sqs.eu-central-1.amazonaws.com/000000000000/queue-a\n\n    # use this to leverage a profile contained in the shared AWS config and credentials files\n    # https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html\n    aws_config_source: profile:local-profile\n\n    # the format of the message body; possible values: [json, none]\n    format: json\n\n  - name: profile-b\n    queue_url: https://sqs.eu-central-1.amazonaws.com/000000000000/queue-b\n    aws_config_source: env\n    format: none\n\n  - name: profile-c\n    queue_url: https://sqs.eu-central-1.amazonaws.com/000000000000/queue-c\n    aws_config_source: env\n    format: json\n\n    # to only show the contents of a nested object\n    subset_key: Message\n\n    # cueitup will display this key value pair as \"context\" in its list\n    context_key: aggregateId\n```\n\n⚡️ Usage\n---\n\n`cueitup` can display messages via two interfaces: a TUI or a webpage \n\n```text\n$ cueitup tui --help\n\nopen cueitup's TUI\n\nUsage:\n  cueitup tui \u003cPROFILE\u003e [flags]\n\nFlags:\n  -c, --config-path string   location of cueitup's config file (default \"/Users/user/Library/Application Support/cueitup/cueitup.yml\")\n  -d, --debug                whether to only display config picked up by cueitup\n  -D, --delete-messages      whether to start the TUI with the setting \"delete messages\" ON (default true)\n  -h, --help                 help for tui\n  -P, --persist-messages     whether to start the TUI with the setting \"persist messages\" ON\n  -M, --show-message-count   whether to start the TUI with the setting \"show message count\" ON (default true)\n  -S, --skip-messages        whether to start the TUI with the setting \"skip messages\" ON\n```\n\n\u003cvideo src=\"https://github.com/user-attachments/assets/738a5797-89f8-4717-9639-3a0fe72715d8\"\u003e\u003c/video\u003e\n\n```text\n$ cueitup serve --help\n\nopen cueitup's web interface\n\nUsage:\n  cueitup serve \u003cPROFILE\u003e [flags]\n\nFlags:\n  -c, --config-path string   location of cueitup's config file (default \"/Users/user/Library/Application Support/cueitup/cueitup.yml\")\n  -d, --debug                whether to only display config picked up by cueitup\n  -D, --delete-messages      whether to start the web interface with the setting \"delete messages\" ON (default true)\n  -h, --help                 help for serve\n  -o, --open                 whether to open web interface in browser automatically\n  -S, --select-on-hover      whether to start the web interface with the setting \"select on hover\" ON\n  -M, --show-message-count   whether to start the web interface with the setting \"show message count\" ON (default true)\n```\n\n\u003cvideo src=\"https://github.com/user-attachments/assets/e11e2d02-c5a4-4379-b6f2-ee498094e122\"\u003e\u003c/video\u003e\n\nVarious ways to display JSON messages\n---\n\nSay the messages in your SQS queue look like this.\n\n```json\n{\n  \"browserInfo\": {\n    \"browserName\": \"Firefox\",\n    \"browserVersion\": 118,\n    \"deviceType\": \"Desktop\",\n    \"platform\": \"Linux\"\n  },\n  \"isBot\": true,\n  \"metadata\": \"{\\\"aggregateId\\\":\\\"00000000-0000-0000-0000-000000012363\\\",\\\"sequenceNr\\\":347}\",\n  \"sessionId\": \"987e6543-b21a-34c5-d678-123456789abc\",\n  \"transactionId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}\n```\n\nYou can configure `cueitup` to show a specific key value pair as \"context\" in\nits UI. You do do via the `context_key` configuration property.\n\n```yaml\n- name: sample-profile\n  queue_url: ...\n  aws_config_source: ...\n  format: json\n  context_key: transactionId\n```\n![](https://github.com/user-attachments/assets/8da47c9a-d883-40e0-b75c-c15810e7807c)\n\nIf you want to only see the nested object under `browserInfo`, you'd configure a\nprofile like this:\n\n```yaml\n- name: sample-profile\n  queue_url: ...\n  aws_config_source: ...\n  format: json\n  subset_key: browserInfo\n  context_key: platform\n```\n\n![](https://github.com/user-attachments/assets/04027abf-25ea-4bd3-8b4d-c192e4e5bacc)\n\n`cueitup` can also work with stringified JSON.\n\n```yaml\n- name: sample-profile\n  queue_url: ...\n  aws_config_source: ...\n  format: json\n  subset_key: metadata\n  context_key: aggregateId\n```\n\n![](https://github.com/user-attachments/assets/1f2d93f7-5d91-40ea-82e6-9eed28ac99c6)\n\nTUI Keyboard shortcuts\n---\n\n### General\n\n| Keymap    | Description                      |\n|-----------|----------------------------------|\n| `\u003ctab\u003e`   | Switch focus to next section     |\n| `\u003cs-tab\u003e` | Switch focus to previous section |\n| `?`       | Show help view                   |\n| `q`       | Go back or quit                  |\n\n### Message List Pane\n\n| Keymap     | Description                                                                  |\n|------------|------------------------------------------------------------------------------|\n| `h/\u003cUp\u003e`   | Move cursor up                                                               |\n| `k/\u003cDown\u003e` | Move cursor down                                                             |\n| `n`        | Fetch the next message from the queue                                        |\n| `N`        | Fetch up to 10 more messages from the queue                                  |\n| `}`        | Fetch up to 100 more messages from the queue                                 |\n| `d`        | Toggle deletion mode; cueitup will delete messages after reading them        |\n| `M`        | Toggle polling for message count in queue                                    |\n| `p`        | Toggle persist mode (messages will be saved to a specific location)          |\n| `s`        | Toggle skipping mode (consume messages without populating the internal list) |\n\n### Message Value Pane\n\n| Keymap   | Description                                     |\n|----------|-------------------------------------------------|\n| `[`, `h` | Show details for the previous entry in the list |\n| `]`, `l` | Show details for the next entry in the list     |\n\n🔐 Verifying release artifacts\n---\n\nIn case you get the `cueitup` binary directly from a\n[release](https://github.com/dhth/cueitup/releases), you may want to verify its\nauthenticity. Checksums are applied to all released artifacts, and the resulting\nchecksum file is signed using\n[cosign](https://docs.sigstore.dev/cosign/installation/).\n\nSteps to verify (replace `A.B.C` in the commands listed below with the version\nyou want):\n\n1. Download the following files from the release:\n\n    - cueitup_A.B.C_checksums.txt\n    - cueitup_A.B.C_checksums.txt.pem\n    - cueitup_A.B.C_checksums.txt.sig\n\n2. Verify the signature:\n\n   ```shell\n   cosign verify-blob cueitup_A.B.C_checksums.txt \\\n       --certificate cueitup_A.B.C_checksums.txt.pem \\\n       --signature cueitup_A.B.C_checksums.txt.sig \\\n       --certificate-identity-regexp 'https://github\\.com/dhth/cueitup/\\.github/workflows/.+' \\\n       --certificate-oidc-issuer \"https://token.actions.githubusercontent.com\"\n   ```\n\n3. Download the compressed archive you want, and validate its checksum:\n\n   ```shell\n   curl -sSLO https://github.com/dhth/cueitup/releases/download/vA.B.C/cueitup_A.B.C_linux_amd64.tar.gz\n   sha256sum --ignore-missing -c cueitup_A.B.C_checksums.txt\n   ```\n\n3. If checksum validation goes through, uncompress the archive:\n\n   ```shell\n   tar -xzf cueitup_A.B.C_linux_amd64.tar.gz\n   ./cueitup\n   # profit!\n   ```\n\nAcknowledgements\n---\n\n`cueitup` is built using the TUI framework [bubbletea][1].\n\n[1]: https://github.com/charmbracelet/bubbletea\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhth%2Fcueitup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdhth%2Fcueitup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhth%2Fcueitup/lists"}