{"id":47863877,"url":"https://github.com/gh-tui-tools/gh-review.nvim","last_synced_at":"2026-04-05T08:01:09.307Z","repository":{"id":338750437,"uuid":"1158403516","full_name":"gh-tui-tools/gh-review.nvim","owner":"gh-tui-tools","description":"🤔 Review GitHub PRs in Neovim","archived":false,"fork":false,"pushed_at":"2026-03-01T10:12:08.000Z","size":74,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-01T13:11:23.784Z","etag":null,"topics":["code-review","github-cli","github-integration","neovim","neovim-lua","neovim-plugin","pull-request-review","review-tools","tui"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gh-tui-tools.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-15T10:08:22.000Z","updated_at":"2026-03-01T10:12:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gh-tui-tools/gh-review.nvim","commit_stats":null,"previous_names":["gh-tui-tools/gh-review.nvim"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gh-tui-tools/gh-review.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gh-tui-tools%2Fgh-review.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gh-tui-tools%2Fgh-review.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gh-tui-tools%2Fgh-review.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gh-tui-tools%2Fgh-review.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gh-tui-tools","download_url":"https://codeload.github.com/gh-tui-tools/gh-review.nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gh-tui-tools%2Fgh-review.nvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31428645,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T02:22:46.605Z","status":"ssl_error","status_checked_at":"2026-04-05T02:22:33.263Z","response_time":75,"last_error":"SSL_read: 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":["code-review","github-cli","github-integration","neovim","neovim-lua","neovim-plugin","pull-request-review","review-tools","tui"],"created_at":"2026-04-04T00:00:28.182Z","updated_at":"2026-04-05T08:01:09.272Z","avatar_url":"https://github.com/gh-tui-tools.png","language":"Lua","funding_links":[],"categories":["Git"],"sub_categories":["GitHub"],"readme":"# gh-review.nvim\n\nA Neovim 0.10+ plugin for reviewing GitHub pull requests entirely within Neovim.\n\nSide-by-side diffs, review threads, code suggestions, and review submission — all driven by the `gh` CLI.\n\nAlso available for Vim 9.0+: [gh-review.vim](https://github.com/gh-tui-tools/gh-review.vim).\n\n## Goal\n\nThis plugin — which is designed for the use case where you’ve already identified a specific PR or PR branch you’re ready to review — has just one single goal:\n\n✅ provide the simplest means possible for performing a GitHub PR review within Neovim\n\nAnything beyond that is a non-goal — for example:\n\n❌ GitHub Issues, Notifications, Discussions, or Actions/Workflows\\\n❌ Managing labels, assignees, or requested reviewers\\\n❌ Browsing or searching lists of PRs\\\n❌ Merging or closing PRs\n\nYou are expected to perform those tasks using other tooling (for example, [gh-dash](https://github.com/dlvhdr/gh-dash)).\n\n## Requirements\n\n- Neovim 0.10 or later\n- [`gh` CLI](https://cli.github.com), authenticated\n\n## Installation\n\nWith [lazy.nvim](https://github.com/folke/lazy.nvim):\n\n```lua\n{ \"gh-tui-tools/gh-review.nvim\" }\n```\n\nWith Neovim’s built-in package manager:\n\n```sh\nmkdir -p ~/.local/share/nvim/site/pack/plugins/start\ncd ~/.local/share/nvim/site/pack/plugins/start\ngit clone https://github.com/gh-tui-tools/gh-review.nvim.git\n```\n\nNo `setup()` call is required — commands register automatically.\n\n## Workflows\n\nThe plugin has two main workflows: A “checkout” workflow, and a “no-checkout” workflow.\n\n### Checkout workflow\n\nTypically used by a project maintainer reviewing a contributor’s PR. The branch is checked out locally so the reviewer can make edits, commit fixes, and push directly.\n\n```vim\n:GHReview 123          \" PR number (checks out the branch)\n:GHReview              \" auto-detect from current branch\n```\n\n- The right/head diff buffer is editable — `:w` writes to the working tree.\n- External file changes are detected and the plugin prompts to reload.\n- `git push` pushes changes back to the PR branch (works for fork PRs too).\n\n### No-checkout workflow\n\nTypically used by a non-maintainer reviewer who only needs to read the diff and leave comments.\n\n```vim\n:GHReview https://github.com/owner/repo/pull/123\n```\n\nWhen the URL refers to a different repo than the current working directory, no checkout is attempted. The right/head diff buffer is read-only, but comments, suggestions, and review submission all work normally.\n\n## Quick start\n\n```\n:GHReview 123           Open PR #123\n\u003cCR\u003e                    Open a file’s side-by-side diff\n]t / [t                 Jump between review threads\ngt                      View a thread\nK                       Preview a thread (floating window)\ngc                      Add a comment\ngF                      Jump to the file with LSP (checkout only)\n:GHReviewSubmit         Submit a review\n:GHReviewClose          Close all review buffers\n```\n\n## Commands\n\n| Command            | Description                                                   |\n|--------------------|---------------------------------------------------------------|\n| `:GHReview`        | Open a PR (auto-detect, by number, or by URL)                 |\n| `:GHReviewFiles`   | Toggle the changed files list                                 |\n| `:GHReviewStart`   | Start a pending review (optional — `:GHReviewSubmit` works without it) |\n| `:GHReviewSubmit`  | Submit a review (Comment / Approve / Request changes)         |\n| `:GHReviewDiscard` | Discard the pending review and all its pending comments       |\n| `:GHReviewClose`   | Close all review buffers and reset state                      |\n\n## Diff mappings\n\n| Key   | Action                                               |\n|-------|------------------------------------------------------|\n| `gt`  | Open the review thread at the cursor line             |\n| `gc`  | Create a new comment (visual mode: multi-line)        |\n| `gs`  | Create a suggestion (right buffer only, visual: range)|\n| `]t`  | Jump to the next review thread                        |\n| `[t`  | Jump to the previous review thread                    |\n| `K`   | Preview the thread at cursor (floating window)        |\n| `gf`  | Toggle the files list                                 |\n| `gF`  | Go to file at cursor line (checkout only)              |\n| `q`   | Close the diff view                                   |\n\n## Thread mappings\n\n| Key      | Action                                        |\n|----------|-----------------------------------------------|\n| `Ctrl-S` | Submit the reply                              |\n| `Ctrl-R` | Toggle resolved/unresolved                    |\n| `q`      | Close the thread buffer                       |\n| `Ctrl-Q` | Close the thread buffer (works in insert mode)|\n| `Ctrl-X Ctrl-O` | Complete `@`-mention from thread participants |\n\n## Signs and virtual text\n\n| Sign | Meaning                          |\n|------|----------------------------------|\n| `CT` | Comment thread (blue)            |\n| `CR` | Resolved thread (green)          |\n| `CP` | Pending review comment (yellow)  |\n\nEach sign is accompanied by virtual text at end-of-line showing the first comment’s author and a truncated body — giving at-a-glance context without opening the thread.\n\nComment reactions are displayed as emoji with counts after each comment body in the thread buffer and floating preview.\n\n## `vim.ui` integration\n\nAll prompts (submit review, discard review, checkout, file reload) use `vim.ui.select` and `vim.ui.input`. Plugins like [dressing.nvim](https://github.com/stevearc/dressing.nvim) or [fzf-lua](https://github.com/ibhagwan/fzf-lua) that override these hooks will automatically provide their enhanced UIs.\n\n## Statusline\n\n```lua\nrequire(\"gh_review\").statusline()\n```\n\nReturns `\"\"` when no review is active, or a summary like `PR #42 · reviewing · 4 threads`. Use it in lualine, heirline, or any statusline plugin.\n\n## Comparison with other plugins\n\n| Feature                          | gh-review.nvim      | [gh-review.vim][]   | [ghlite.nvim][]     | [gh.nvim][]         | [octo.nvim][]       |\n|----------------------------------|---------------------|---------------------|---------------------|---------------------|---------------------|\n| **Platform**                     | Neovim 0.10+        | Vim 9.0+            | Neovim 0.10+        | Neovim              | Neovim 0.10+        |\n| **PR review: side-by-side diff** | Yes                 | Yes                 | Via diffview.nvim   | Yes                 | Yes                 |\n| **PR review: comments/threads**  | Yes                 | Yes                 | Yes                 | Yes                 | Yes                 |\n| **PR review: code suggestions**  | Yes                 | Yes                 | No                  | No                  | Yes                 |\n| **PR review: submit review**     | Yes                 | Yes                 | Yes                 | Yes                 | Yes                 |\n| **PR review: resolve threads**   | Yes                 | Yes                 | No                  | Yes                 | Yes                 |\n| **PR review: thread signs**      | Yes (+ virtual text)| Yes (+ virtual text)| As diagnostics      | No                  | No                  |\n| **Editable diff buffers**        | Yes                 | Yes                 | No                  | Yes (via checkout)  | No                  |\n| **External change detection**    | Yes                 | Yes                 | No                  | No                  | No                  |\n| **Fork PR push tracking**        | Yes                 | Yes                 | No                  | Yes                 | No                  |\n| **PR listing/browsing**          | No (non-goal)       | No (non-goal)       | Yes                 | Yes                 | Yes                 |\n| **Merge PRs**                    | No (non-goal)       | No (non-goal)       | Yes                 | No                  | Yes                 |\n| **Labels/assignees/reviewers**   | No (non-goal)       | No (non-goal)       | No                  | No                  | Yes                 |\n| **GitHub Issues**                | No (non-goal)       | No (non-goal)       | No                  | Yes                 | Yes                 |\n| **Notifications**                | No (non-goal)       | No (non-goal)       | No                  | Yes                 | Yes                 |\n| **Discussions**                  | No (non-goal)       | No (non-goal)       | No                  | No                  | Yes                 |\n| **Actions/Workflows**            | No (non-goal)       | No (non-goal)       | No                  | No                  | Yes                 |\n| **Reactions**                    | No (non-goal)       | No (non-goal)       | No                  | No                  | Yes                 |\n| **Dependencies**                 | `gh` CLI            | `gh` CLI            | `gh` CLI            | `gh` CLI, litee.nvim| `gh` CLI, plenary.nvim, picker |\n\n[gh-review.vim]: https://github.com/gh-tui-tools/gh-review.vim\n[ghlite.nvim]: https://github.com/daliusd/ghlite.nvim\n[gh.nvim]: https://github.com/ldelossa/gh.nvim\n[octo.nvim]: https://github.com/pwntester/octo.nvim\n\n## Documentation\n\nSee `:help gh-review` for full documentation.\n\nSee [DESIGN.md](DESIGN.md) for architecture and implementation details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgh-tui-tools%2Fgh-review.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgh-tui-tools%2Fgh-review.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgh-tui-tools%2Fgh-review.nvim/lists"}