{"id":49814910,"url":"https://github.com/superyyrrzz/adotop","last_synced_at":"2026-06-17T09:32:17.785Z","repository":{"id":356701672,"uuid":"1223687463","full_name":"superyyrrzz/adotop","owner":"superyyrrzz","description":"Terminal UI for Azure DevOps pull requests — browse, diff, comment, and approve without leaving the terminal.","archived":false,"fork":false,"pushed_at":"2026-05-29T01:28:28.000Z","size":9092,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T03:20:39.962Z","etag":null,"topics":["azure","azure-devops","bubbletea","cli","code-review","developer-tools","devops","go","pull-requests","terminal","tui"],"latest_commit_sha":null,"homepage":"https://github.com/superyyrrzz/adotop/releases/latest","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/superyyrrzz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-28T14:59:09.000Z","updated_at":"2026-05-29T01:28:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/superyyrrzz/adotop","commit_stats":null,"previous_names":["superyyrrzz/adotop"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/superyyrrzz/adotop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/superyyrrzz%2Fadotop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/superyyrrzz%2Fadotop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/superyyrrzz%2Fadotop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/superyyrrzz%2Fadotop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/superyyrrzz","download_url":"https://codeload.github.com/superyyrrzz/adotop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/superyyrrzz%2Fadotop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34443232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"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":["azure","azure-devops","bubbletea","cli","code-review","developer-tools","devops","go","pull-requests","terminal","tui"],"created_at":"2026-05-13T05:00:20.311Z","updated_at":"2026-06-17T09:32:17.766Z","avatar_url":"https://github.com/superyyrrzz.png","language":"Go","funding_links":[],"categories":["Community content","Applications"],"sub_categories":["Development Tools"],"readme":"# adotop\n\n[![CI](https://github.com/superyyrrzz/adotop/actions/workflows/ci.yml/badge.svg)](https://github.com/superyyrrzz/adotop/actions/workflows/ci.yml)\n[![Release](https://img.shields.io/github/v/release/superyyrrzz/adotop)](https://github.com/superyyrrzz/adotop/releases)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Go Reference](https://pkg.go.dev/badge/github.com/superyyrrzz/adotop.svg)](https://pkg.go.dev/github.com/superyyrrzz/adotop)\n\nReview [Azure DevOps](https://dev.azure.com) pull requests without touching the\nbrowser.\n\n`adotop` is a fast terminal UI for triaging PR queues, reading diffs, replying\nto review threads, and approving changes from the keyboard. It is built for\ndevelopers who spend their day in terminals but still need to work in Azure\nDevOps.\n\n![adotop demo](assets/adotop-demo.gif)\n\n## Install\n\n### Windows (Scoop)\n\n```sh\nscoop bucket add adotop https://github.com/superyyrrzz/adotop\nscoop install adotop\n```\n\n### macOS / Linux (Homebrew)\n\n```sh\nbrew tap superyyrrzz/adotop https://github.com/superyyrrzz/adotop\nbrew install adotop\n```\n\n### From source (any OS)\n\n```sh\ngo install github.com/superyyrrzz/adotop/cmd/adotop@latest\n```\n\nRequires Go 1.26+.\n\n### Prebuilt binary (any OS)\n\nDownload from [releases](https://github.com/superyyrrzz/adotop/releases) and\ndrop the `adotop` binary on your `PATH`.\n\n## Quick start\n\n```sh\n# 1. One-time: log in to Azure DevOps via the az CLI.\naz login\n\n# 2. Run. First launch walks you through writing ~/.adotop/config.toml.\nadotop\n```\n\nTo re-run setup later, or change org/project: `adotop init`.\n\nYou can also jump straight to a PR:\n\n```sh\nadotop 1145743\nadotop https://dev.azure.com/your-org/your-project/_git/your-repo/pullrequest/1145743\n```\n\n## Why adotop?\n\nAzure DevOps has a capable PR system, but its browser workflow can be slow when\nyou are moving through many reviews. `adotop` keeps the review loop close to\nwhere code work already happens.\n\n- **Queue triage is fast.** Browse Recents, Assigned-to-me, Created-by-me, and\n  Reviewing tabs without opening separate browser pages.\n- **Diffs stay readable.** Use local `git diff` when a clone is available, or\n  fall back to Azure DevOps REST diffs when it is not.\n- **Threads live inline.** Review comments appear under their target diff line,\n  with keyboard navigation and expand/collapse for long discussions.\n- **Review actions are one keystroke away.** Comment, reply, resolve, approve,\n  vote, abandon, or open the PR in a browser only when needed.\n- **Stale approvals are visible.** When new commits land after your approval,\n  `adotop` marks the vote as stale using Azure DevOps event history.\n- **It works across teams.** Linux, macOS, and Windows are covered by CI and\n  release builds.\n\n## Demo highlights\n\nThe demo above shows the main review loop:\n\n- Move through PR queues without opening Azure DevOps in a browser.\n- Open a PR, scan changed files, status checks, reviewers, and stale vote state.\n- Read syntax-highlighted diffs with inline review threads.\n- Switch focus between the file list and diff pane, then approve or open help from the keyboard.\n\n## Features\n\n- **Browse PRs** across Recents, Assigned-to-me, Created-by-me, and Reviewing\n  tabs. Background refresh keeps the list current without you re-entering each\n  PR.\n- **Read diffs** with syntax highlighting. Local clone? `git diff` is used\n  directly so you get the exact output you would see in your editor. No clone?\n  The REST fallback handles binary files, unicode, and large files gracefully.\n- **Walk threads inline.** Comments render under their target diff line, not in\n  a footer, with a cursor that highlights the active thread and expand/collapse\n  for long discussions.\n- **Leave comments without leaving the TUI.** A textarea overlay lets you type\n  multi-line comments while the diff stays visible behind it. `ctrl+e` drops to\n  `$EDITOR` if you would rather use vim.\n- **Detect stale approvals.** When the author pushes new commits after your\n  approval, the My Vote line shows `stale, re-approve needed`, derived from\n  Azure DevOps VoteUpdate events instead of a local cache.\n- **Inspect per-commit diffs.** Press `M` to view a single commit's changes\n  instead of the accumulated PR diff.\n- **Approve, vote, or abandon quickly.** Press `a` to approve, `v` for the full\n  vote menu, or `X` to abandon with confirmation.\n- **Respect your terminal theme.** Use your terminal ANSI palette by default, or\n  opt into Catppuccin with automatic light/dark detection.\n\n## Keys\n\nPress `?` from any screen for the full reference. The most common ones:\n\n| Key | What |\n|---|---|\n| `j` `k` | move cursor, wrapping at edges |\n| `enter` | open / drill in |\n| `space` | expand thread under cursor |\n| `tab` | switch Files ↔ Diff focus |\n| `[` `]` | prev / next thread |\n| `c` `C` | new comment / reply |\n| `a` `v` | approve / open vote menu |\n| `M` | view a single commit's diff |\n| `o` | open in browser |\n| `?` | toggle help |\n| `esc` | back / close modal |\n\nThe statusline only shows hints relevant to your current state, so the list\ngrows as you discover features instead of dumping every key at once.\n\n## Config\n\n`~/.adotop/config.toml` uses the same path on Windows, macOS, and Linux:\n\n```toml\norg              = \"your-org\"           # default ADO organization\nproject          = \"your-project\"       # default project\nrefresh_interval = \"60s\"                # background list refresh cadence\nrepo_roots       = [\"~/code\", \"~/work\"] # where adotop looks for local clones\n```\n\nLogs land in `~/.adotop/logs/adotop.log`.\n\n## Theming\n\n`adotop` uses your terminal's own ANSI palette by default, so Solarized,\nGruvbox, Windows Terminal, and other schemes work without extra config. To opt\ninto Catppuccin, set `ADOTOP_THEME`:\n\n| Value | Effect |\n|---|---|\n| unset / `system` | Use terminal ANSI 4-bit palette, the default |\n| `auto` | Catppuccin, picked from terminal background |\n| `dark` | Force Catppuccin Mocha |\n| `light` | Force Catppuccin Latte |\n\n`auto` queries the terminal's background color via OSC 11. Some multiplexers,\nolder tmux versions, and SSH setups do not proxy it; if auto-detect picks the\nwrong one, set `ADOTOP_THEME` to `dark` or `light` explicitly.\n\n## Compatibility\n\n- **OS:** Linux, macOS, Windows 10+. CI runs all three.\n- **Terminal:** any 256-color terminal. Emoji glyphs used in status pills and\n  the Discussion entry need a font with emoji coverage. Most defaults do; if\n  you see boxes instead of emoji, install a fallback emoji font such as\n  Cascadia Code PL or Segoe UI Emoji.\n- **Auth:** the `az` CLI is required. Run `az login` once, and `adotop` reuses\n  the cached token.\n\n## Build from source\n\n```sh\ngit clone https://github.com/superyyrrzz/adotop\ncd adotop\nmake build      # produces ./adotop.exe on Windows, ./adotop elsewhere\nmake test       # unit tests, all OSes\nmake test-live  # hits a real ADO PR; requires az login\n```\n\n## Project status\n\n`adotop` is usable today and still moving quickly. Bug reports, rough edges in\nAzure DevOps compatibility, terminal rendering issues, and workflow suggestions\nare especially useful.\n\nFor repository metadata, the most useful GitHub topics are `azure-devops`,\n`pull-requests`, `tui`, `terminal`, `go`, `bubbletea`, `cli`, `code-review`,\nand `developer-tools`.\n\n## Contributing\n\nIssues and PRs are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for the\nshort version: open an issue first for big changes, tests are required, and\n`make test` must pass.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperyyrrzz%2Fadotop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuperyyrrzz%2Fadotop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperyyrrzz%2Fadotop/lists"}