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

@profullstack/g1tz

v0.2.2

Published

A git TUI that shows you the repository, not a menu of git commands.

Readme

g1tz

A git TUI that shows you the repository, not a menu of git commands.

bunx @profullstack/g1tz          # the repository you are standing in
bunx @profullstack/g1tz ~/proj   # somewhere else
npm i -g @profullstack/g1tz      # then just g1tz

The package is scoped because npm refuses the bare name ("too similar to got, gts"); the command it installs is still g1tz.

 g1tz  main                    origin/main ↓1                        ~/hqtui  Tab panes  Space stage  q quit
╭─ Files (3) ───────────────────────────╮ ╭─ Diff ─────────────────────────────────────────────────────────╮
│ M    src/a.ts                         │ │ @@ -0,0 +1,8 @@                                                │
│  M   src/b.ts                         │ │ +export interface Span {                                       │
│ ??   new.ts                           │ │ +  text: string;                                               │
╰───────────────────────────────────────╯ │ +}                                                             │
╭─ Branches (39) ───────────────────────╮ │  const style: Style = { fg: options.fg };                      │
│ * main ↓1                             │ │                                                                │
│   spans-richtext                      │ │                                                                │
╰───────────────────────────────────────╯ │                                                                │
╭─ Log (78) ────────────────────────────╮ │                                                                │
│ e28fec7   Finish widget parity  2h   │ │                                                                 │
╰───────────────────────────────────────╯ ╰────────────────────────────────────────────────────────────────╯
 Tab files  Space Stage  ↑↓ Move  r Reload  q Quit

Files, branches and log down the left. The diff on the right follows whatever you have selected — a file's changes, or a commit's patch.

Keys

| Key | Does | |---|---| | Tab | Cycle files → branches → log | | PgUp PgDn | Move the selection | | Space | Stage the selected file, or unstage it if it is fully staged | | | Scroll the diff | | r | Re-read the repository | | p | Pulse: what moved over a period (below) | | q | Quit |

Pulse

p flips to Pulse: what moved in this repository over a period, the way GitHub's Insights > Pulse tab shows it, but for the repository you are standing in and without leaving the terminal.

bunx @profullstack/g1tz pulse                 # start on the Pulse screen, last week
bunx @profullstack/g1tz pulse --range month   # day, week, month, quarter, year, all

Three sources, each optional beyond the first:

  • git, always, offline: commits and authors on the branch and across every branch (merges counted separately, as GitHub does), the net change to the tree since the period began (git diff from the first parent of the oldest commit in range, with -M so a rename is a rename), commits per hour, day, week or month, the branches that saw commits and the tags that were created.
  • GitHub, when origin is on github.com and gh is logged in: pull requests opened, merged and closed, issues opened and closed, releases, and new stars for the period. Pages are walked newest first under a small budget; when the budget runs out the counts are floors and the status bar says so. Nothing here sees a token; gh holds the login.
  • Traffic, when a gh-pulse report exists on the machine (~/.local/share/gh-pulse, or GH_PULSE_DATA): views and clones for the last fourteen days, referrers and popular paths. GitHub only serves those through its traffic API and only for fourteen days; gh-pulse keeps them.

| Key | Does | |---|---| | d w m q y a | Pick the range: day, week, month, quarter, year, all time. The range buttons are clickable too. | | PgUp PgDn | Scroll the files | | r | Read it again | | p Esc | Back to the repository, where q quits | | Ctrl+C | Quit |

How it reads git

By shelling out, using porcelain formats only, with -z wherever a path could contain a newline. Parsing output meant for humans is how a TUI ends up corrupting someone's working tree.

git runs with GIT_PAGER=cat, GIT_EDITOR=true and GIT_OPTIONAL_LOCKS=0, so nothing it invokes can take the terminal away from the interface or fight the editor you already have open.

Untracked files are listed with --untracked-files=all. The default collapses a new directory to a single ? sub/ entry, and you cannot stage or diff a directory.

Status

Early, and deliberately read-mostly. It reads the repository and stages files. It does not yet commit, push, pull, branch, rebase, stash, or discard — the destructive half is the half worth getting right slowly.

Known rough edges:

  • The diff is coloured a line at a time, one text() call per line, because per-line styling is all the library offers today. Styled spans land in @profullstack/hqtui 0.3.0 (hqtui#60) and will make word-level diff highlighting possible.
  • No hunk staging. That wants an interactive diff pane.

Built with

hqtui — the terminal UI library. g1tz exists partly to keep hqtui honest: a real application finds the gaps a widget gallery does not.

Licence

MIT