npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

lazyreview

v2.0.1

Published

A keyboard-driven TUI for reviewing pull requests from GitHub, GitLab, Bitbucket, Azure DevOps, and Gitea — right from your terminal

Readme


Why LazyReview?

Code review shouldn't require a browser. LazyReview brings the full PR experience into your terminal with vim-style navigation, syntax-highlighted diffs, and a clean panel layout — so you can review without leaving your workflow.

How Is This Different?

| Tool | What it does | LazyReview's advantage | |------|-------------|----------------------| | gh pr / glab | CLI PR commands | LazyReview is a full TUI with visual diffs, not just CLI commands | | lazygit / gitui | Git TUI | These manage git operations; LazyReview manages code review -- they're complementary | | GitHub/GitLab web | Browser PR review | LazyReview keeps you in the terminal with vim-style navigation | | tig | Git log/diff viewer | No PR review, no comments, no multi-provider support |

LazyReview is the only TUI that provides a full code review workflow across GitHub, GitLab, Bitbucket, Azure DevOps, and Gitea.

Supported Providers

LazyReview works with five git hosting providers. The provider is auto-detected from your git remote, or you can set it in config.yaml.

| Feature | GitHub | GitLab | Bitbucket | Azure DevOps | Gitea/Forgejo | |---------|:------:|:------:|:---------:|:------------:|:-------------:| | List & filter PRs | Yes | Yes | Yes | Yes | Yes | | PR detail (description, files, commits) | Yes | Yes | Yes | Yes | Yes | | Syntax-highlighted diffs | Yes | Yes | Yes | Yes | Yes | | Side-by-side diff view | Yes | Yes | Yes | Yes | Yes | | Submit reviews (approve/request changes) | Yes | Yes | Yes | Yes | Yes | | Inline diff comments | Yes | Yes | Yes | Yes | Yes | | Resolve/unresolve threads | Yes | Yes | -- | Yes | -- | | Draft PRs | Yes | Yes | -- | Yes | -- | | CI/CD check runs | Yes | Yes | Yes | Yes | Yes | | Merge (merge/squash/rebase) | Yes | Yes | Yes | Yes | Yes | | GraphQL API | Yes | -- | -- | -- | -- | | Reactions | Yes | -- | -- | -- | -- |

Install

Homebrew

brew install tauantcamargo/tap/lazyreview

npm

npm install -g lazyreview

npx (no install)

npx lazyreview

Update

# npm
npm update -g lazyreview

# Homebrew
brew upgrade lazyreview

Requires Node.js 20 or later.

Quick Start

# From inside a git repo — auto-detects provider and owner/repo from origin
lazyreview

# Or specify a repo directly
lazyreview facebook/react

Authentication

On first run you'll be prompted for a token. Each provider uses a different token type:

GitHub

| Source | Setup | |--------|-------| | GitHub CLI | Install gh and run gh auth login | | Environment variable | Export LAZYREVIEW_GITHUB_TOKEN | | Manual token | Paste when prompted (stored at ~/.config/lazyreview/.token) |

Token needs repo scope. Create one at github.com/settings/tokens.

GitLab

| Source | Setup | |--------|-------| | Environment variable | Export LAZYREVIEW_GITLAB_TOKEN | | Manual token | Paste when prompted |

Token needs api scope. Create one at gitlab.com/-/user_settings/personal_access_tokens.

For self-hosted GitLab, set gitlab.host in config.yaml.

Bitbucket

| Source | Setup | |--------|-------| | Environment variable | Export LAZYREVIEW_BITBUCKET_TOKEN | | Manual token | Paste when prompted |

Use an App Password with Repository and Pull Request read/write permissions. Create one at bitbucket.org/account/settings/app-passwords.

Azure DevOps

| Source | Setup | |--------|-------| | Environment variable | Export LAZYREVIEW_AZURE_TOKEN | | Manual token | Paste when prompted |

Use a Personal Access Token (PAT) with Code (Read & Write) scope. Create one at dev.azure.com.

Gitea / Forgejo

| Source | Setup | |--------|-------| | Environment variable | Export LAZYREVIEW_GITEA_TOKEN | | Manual token | Paste when prompted |

Create a token under Settings > Applications in your Gitea/Forgejo instance.

You can switch between token sources anytime in Settings.

Features

PR List

Browse open PRs with search, sort, and pagination across multiple views:

  • Involved -- PRs you authored, were requested to review, or commented on
  • My PRs -- PRs you opened
  • For Review -- PRs awaiting your review
  • This Repo -- All open PRs in the current repo
  • Browse -- Browse any repo's PRs (e.g., facebook/react) with recent history and bookmarks
  • CI Status -- Check run results displayed inline on each PR
  • Read/Unread -- Track which PRs have new activity since last viewed

PR Detail

Deep-dive into any PR with five tabs:

  • Description -- PR body rendered as markdown with additions/deletions stats, labels, and edit support
  • Conversations -- Full timeline with reviews and comments rendered as markdown. Includes a review summary showing approval status per reviewer.
  • Commits -- Commit history with message, author, and date
  • Files -- File tree with syntax-highlighted diffs, side-by-side view, and vim-style visual line selection
  • Checks -- CI/CD check run results with pass/fail/pending summary

Review Actions

Complete your entire review workflow without leaving the terminal:

  • Submit Review -- Approve, request changes, or comment with multi-line markdown body (r / R)
  • Reply to Comments -- Reply directly to review comment threads (r on conversations tab)
  • Inline Comments -- Add comments on specific diff lines (c in diff view)
  • Multi-line Comments -- Select a range of lines with visual mode, then comment (v then select then c)
  • Resolve Threads -- Toggle resolve/unresolve on review threads (x)
  • Filter Resolved -- Show or hide resolved comment threads (f)
  • Merge PR -- Merge, squash, or rebase with confirmation and custom commit title (m)
  • Close / Reopen PR -- Close or reopen PRs directly (X)
  • Edit PR Description -- Edit the PR body as the author (D)
  • Edit Comments -- Edit your own comments inline (e)
  • Request Re-review -- Multi-select reviewers to re-request reviews from (E)
  • File Viewed Tracking -- Mark files as viewed to track review progress (v)
  • Open in Browser -- Quick escape hatch to your provider's web UI (o)

Auto-Refresh

PRs and review data refresh automatically in the background with rate limit awareness:

  • Configurable refresh interval (default: 60s for lists, 30s for detail)
  • Automatically slows down when approaching API rate limits
  • Manual refresh anytime with R

Themes

Ships with four color schemes, cycle through them in Settings:

  • tokyo-night (default)
  • dracula
  • catppuccin-mocha
  • gruvbox

Settings

Fully configurable from the TUI -- no need to edit files manually:

  • Provider selection (GitHub / GitLab / Bitbucket / Azure / Gitea)
  • Token source switching
  • Theme cycling
  • Page size (1-100)
  • Refresh interval (10-600s)
  • Default owner/repo

Browse Any Repo

Browse PRs from any repo without leaving the app:

  • Navigate to the Browse sidebar item
  • Type owner/repo (e.g., facebook/react) and press Enter
  • Recent repos are saved automatically (up to 10)
  • Bookmark frequently used repos in Settings for quick access
  • Full PR list with filtering, sorting, and detail view -- same as local repo

Sidebar

  • PR counts and unread badges update automatically
  • Collapsible sections (Reviews / App) with Enter to toggle
  • Breadcrumb trail in TopBar shows current screen and PR context
  • Provider badge with color coding ([GH] / [GL] / [BB] / [AZ] / [GT])
  • Connection status indicator (green/yellow/red) in TopBar

Other

  • Git remote auto-detection (provider + owner/repo)
  • Collapsible sidebar (Ctrl+b)
  • Side-by-side diff view (d in Files tab)
  • Markdown rendering in PR bodies and comments
  • Multi-line text input with cursor navigation and tab indentation
  • Built-in help overlay (?)
  • PR branch checkout directly from terminal (G)
  • Context-sensitive keyboard shortcut hints in status bar
  • Provider-specific error messages with actionable fix suggestions

Keyboard Shortcuts

Case matters. Uppercase and lowercase keys trigger different actions (e.g. R = submit review, r = reply; E = re-review, e = edit comment; S = batch review, s = sort).

Global

| Key | Action | |-----|--------| | j / k | Move down / up | | Enter | Select / open | | Ctrl+b | Toggle sidebar | | ? | Toggle help overlay | | q / Esc | Back / quit | | Ctrl+c | Force quit |

PR List

| Key | Action | |-----|--------| | / | Filter PRs | | s | Sort PRs | | n / p | Next / previous page | | o | Open PR in browser | | y | Copy PR URL | | u | Toggle unread only | | t | Toggle state (Open / Closed / All) | | R | Refresh |

PR Detail

| Key | Action | |-----|--------| | 1-5 | Switch tabs (Description / Conversations / Commits / Files / Checks) | | o | Open PR in browser | | y | Copy PR URL | | R | Submit review | | S | Start batch review | | D | Edit PR description | | E | Request re-review | | m | Merge PR | | X | Close / reopen PR | | G | Checkout PR branch locally | | ] / [ | Next / previous PR |

Conversations Tab

| Key | Action | |-----|--------| | c | New comment | | r | Reply to comment | | e | Edit own comment | | D | Edit PR description (author only) | | x | Resolve / unresolve thread | | f | Toggle resolved comments |

Files Tab

| Key | Action | |-----|--------| | h / l | Focus tree / diff | | Tab | Switch tree / diff panel | | / | Filter files (tree panel) | | d | Toggle side-by-side diff | | v | Visual line select (diff) | | c | Inline comment (diff) | | r | Reply to diff comment | | e | Edit own diff comment | | x | Resolve / unresolve (diff) |

Commits Tab

| Key | Action | |-----|--------| | y | Copy commit SHA |

Checks Tab

| Key | Action | |-----|--------| | j / k | Navigate check runs |

Comment / Review Input

| Key | Action | |-----|--------| | Enter | New line | | Tab | Insert indent (2 spaces) | | Ctrl+S | Submit | | Esc | Cancel |

Configuration

Configuration is optional. File location:

~/.config/lazyreview/config.yaml

Example:

theme: tokyo-night        # tokyo-night | dracula | catppuccin-mocha | gruvbox
pageSize: 30              # PRs per page (1-100)
refreshInterval: 60       # Auto-refresh interval in seconds (10-600)
provider: github          # github | gitlab | bitbucket | azure | gitea
defaultOwner: myorg       # skip auto-detection
defaultRepo: myrepo       # skip auto-detection
recentRepos: []           # auto-populated from Browse (max 10)
bookmarkedRepos: []       # manually managed in Settings

# GitLab self-hosted (optional)
gitlab:
  host: https://gitlab.example.com

Development

git clone https://github.com/tauantcamargo/lazyreview.git
cd lazyreview
pnpm install
pnpm dev        # watch mode
pnpm start      # run the TUI

| Command | Description | |---------|-------------| | pnpm build | Production build (tsup) | | pnpm dev | Watch mode build | | pnpm start | Run the TUI | | pnpm typecheck | TypeScript type check | | pnpm test | Run tests (Vitest) | | pnpm test:coverage | Tests with coverage report | | pnpm lint | Check formatting (Prettier) | | pnpm format | Auto-format source files |

Tech Stack

  • UI: Ink + React 19
  • Services: Effect (typed errors, dependency injection)
  • Providers: GitHub, GitLab, Bitbucket, Azure DevOps, Gitea/Forgejo (pluggable provider architecture)
  • Validation: Zod + Effect Schema
  • Config: YAML
  • Build: tsup (bundled ESM, Node 20 target)
  • Test: Vitest

License

MIT