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

@f0rbit/overview

v0.2.2

Published

Terminal UI dashboard for multi-repo git health

Readme

overview

A terminal UI that scans a directory tree for git repositories, displays them in a hierarchical list with per-repo health indicators, and provides a split-pane detail view with an embedded git graph and widget-based stats panel.

Why use this

If you work across many git repositories, it is hard to know which ones have uncommitted changes, unpushed commits, or are behind their remote. overview gives you a single dashboard that answers "what is the state of all my repos?" at a glance, with the ability to drill into any repo for its full commit graph and metadata -- or launch directly into your editor, ggi, or a tmux session.

Interface

Three-panel split layout: a hierarchical repo list on the left, a git graph (top-right), and a scrollable widget panel (bottom-right). The repo list shows inline health badges -- selecting a repo loads its graph and widgets on demand.

┌─ overview ──────────────────── ~/dev ──── 28 repos ── scanning... ──┐
│                                                                     │
├─────────────────────────┬───────────────────────────────────────────┤
│  ~/dev                  │ ┌─ git graph ───────────────────────────┐ │
│  ├── algorithms/     ✓  │ │ * 4a2f1c3 (HEAD -> main) fix: t...     │ │
│  ├── bases.nvim/     ✓  │ │ * 8b3e2d1 feat: add treesitter...      │ │
│  ├── burning-blends/ ✓  │ │ * c7f9a0e refactor: extract pa...      │ │
│  ├── byron-kastelic/ ✓  │ │ | * 2d4e6f8 (origin/dev) wip:...       │ │
│  ├── chamber/       ↑3  │ │ | |/                                  │ │
│  ├── corpus/        ↑1  │ │ * | a1b2c3d merge: dev into m...       │ │
│  ├── cs-club-websit… ✓  │ │ |\ \                                  │ │
│  ├── database/       ✓  │ │ | * 5f6g7h8 fix: query perfor...       │ │
│  ├── dev-blog-go/    ✓  │ │ * | 9i0j1k2 chore: bump deps          │ │
│  ├── dev-blog/       ✓  │ │ |/                                    │ │
│  ├── devpad/      * ↑2  │ │ * l3m4n5o v2.1.0 release              │ │
│ >├── dotfiles/      ~3  │ │                                       │ │
│  ├── forbit-astro/   ✓  │ └───────────────────────────────────────┘ │
│  ├── gallery/        ✓  │ ┌─ widgets: dotfiles ──────────────────┐  │
│  ├── gm-server/      ✓  │ │                                      │  │
│  ├── hackertui/     ↑1  │ │  branch   main                       │  │
│  ├── key-grip/       ✓  │ │  remote   origin (github.com/...)     │  │
│  ├── media-timeline/ ✓  │ │                                      │  │
│  ├── mycelia/        ✓  │ │  ~ 3 modified  + 0 staged            │  │
│  ├── ocn/            ✓  │ │  ? 1 untracked  ! 0 conflicts        │  │
│  ├── rollette/       ✓  │ │                                      │  │
│  ├── runbook/     > ↑5  │ │  last commit  2h ago                 │  │
│  ├── studdy-buddy/   ✓  │ │  contributors 3                      │  │
│  ├── todo-tracker/   ✓  │ │  branches     4 local / 6 remote     │  │
│  └── ui/            ↑1  │ │  tags         v1.0, v1.1, v2.0       │  │
│                         │ │                                      │  │
│                         │ └──────────────────────────────────────┘  │
├─────────────────────────┴───────────────────────────────────────────┤
│ [NORMAL] j/k:nav  Enter:detail  g:ggi  r:refresh  q:quit  ?:help   │
└─────────────────────────────────────────────────────────────────────┘

Status badges

| Badge | Meaning | |-------|---------| | * | OpenCode session active (busy) | | > | OpenCode session needs input | | ! | OpenCode session errored / merge conflicts | | | Clean -- nothing to commit, up to date | | ↑3 | 3 commits ahead (unpushed) | | ↓2 | 2 commits behind remote | | ~3 | 3 uncommitted changes | | ? | Untracked files only |

Install and run

Requires Bun >= 1.0 and git. Optional: fzf + delta for ggi integration, gh CLI for GitHub widgets.

# run without installing
bunx @f0rbit/overview

# or install globally
bun add -g @f0rbit/overview
overview

CLI flags override config values:

overview --dir ~/workplace --depth 2 --sort status --filter dirty

Development

git clone https://github.com/f0rbit/overview.git
cd overview
bun install

bun run dev       # run in dev mode
bun run build     # compile standalone binary
./overview

Configuration

Config lives at ~/.config/overview/config.toml. A default is created on first run. Key options:

scan_dirs = ["~/dev"]
depth = 3
refresh_interval = 30
sort = "name"           # name | status | last-commit
filter = "all"          # all | dirty | clean | ahead | behind

[layout]
left_width_pct = 35
graph_height_pct = 45

[actions]
ggi = "ggi"
editor = "$EDITOR"
sessionizer = ""        # path to tmux-sessionizer script

Keybindings

Normal mode

| Key | Action | |-----|--------| | j / k | Navigate repo list | | Enter / l | Enter detail mode (focus right panels) | | Tab | Cycle focus: list / graph / stats | | f | Cycle filter: all / dirty / clean / ahead / behind | | s | Cycle sort: name / status / last-commit | | r | Refresh selected repo | | R | Full rescan (re-walk directory tree) | | g | Launch ggi in selected repo | | o | Open selected repo in $EDITOR | | t | Open tmux session for selected repo | | ? | Toggle help overlay | | q / Esc | Quit |

Detail mode

| Key | Action | |-----|--------| | j / k | Scroll focused panel / navigate widgets in stats | | h | Move left (graph, or exit to list if on graph) | | l | Move right (stats) | | g | Launch ggi | | o | Open in $EDITOR | | t | Open tmux session | | r | Refresh details | | q / Esc | Back to normal mode |

Widget system

The stats panel is composed of configurable widgets laid out in a responsive grid. Widgets can span the full panel width, half, or a third. Enable/disable and reorder widgets via ~/.config/overview/widgets.json.

| Widget | Span | Description | |--------|------|-------------| | Git Status | third | Working tree status, staged/modified/untracked counts | | Repo Meta | third | Commits, contributors, repo size, latest tag | | GitHub CI | third | Recent workflow runs and their status | | Commit Activity | third | 14-day commit sparkline | | Latest Release | third | Latest GitHub release and commits since | | Devpad Milestones | half | Project milestones from devpad | | GitHub PRs | half | Open pull requests | | GitHub Issues | half | Open issues | | File Changes | half | Modified/staged/untracked file list | | Branches | half | Local and remote branches | | Devpad Tasks | full | Task list from devpad |

OpenCode integration

Overview reads OpenCode session state files from ~/.local/state/ocn/ and shows per-repo status indicators in the repo list (* busy, > needs input, ! errored). This requires the ocn OpenCode plugin to be installed. Overview works fine without it -- the badges simply won't appear.

Architecture

Bun workspace monorepo with two packages:

overview/
├── packages/
│   ├── core/           # git operations, scanning, file watching
│   │   └── src/
│   │       ├── scanner.ts       # directory tree walker, repo discovery
│   │       ├── worktree.ts      # worktree detection and grouping
│   │       ├── git-status.ts    # parallel status collection via Bun.spawn
│   │       ├── git-graph.ts     # git log --graph capture (ANSI passthrough)
│   │       ├── git-stats.ts     # heavyweight stats (on-demand)
│   │       ├── concurrency.ts   # subprocess pool (capped at 8)
│   │       ├── ocn.ts           # OpenCode session status reader
│   │       ├── watcher.ts       # fs.watch on .git dirs for live updates
│   │       └── types.ts         # core data model
│   └── render/         # TUI components, screens, theming
│       └── src/
│           ├── overview.tsx      # entry point
│           ├── screens/
│           ├── components/       # repo list, git graph, widgets
│           ├── lib/
│           │   ├── widget-grid.ts     # grid layout computation
│           │   ├── widget-state.ts    # widget config persistence
│           │   ├── fetch-context.ts   # request deduplication
│           │   └── filter.ts          # repo filtering/sorting
│           ├── config/
│           └── theme/            # Tokyo Night color scheme
├── package.json
└── tsconfig.json

Data flows one direction: core scans and collects git data, render subscribes to it via SolidJS signals. The git graph panel renders git log --graph --color=always output directly -- no DAG parsing. Press g to launch ggi for interactive graph exploration (suspends the TUI, resumes on exit).

Performance

  • Debounced repo selection (250ms) with request cancellation
  • Capped subprocess concurrency (pool of 8)
  • Deduplicated GitHub and Devpad API calls via in-flight tracking
  • Memoized computations to avoid redundant re-renders

Dependencies

Runtime

| Dependency | Purpose | |------------|---------| | Bun | Runtime, bundler, test runner | | @opentui/solid | TUI rendering framework (docs) | | SolidJS | Reactive UI primitives | | @f0rbit/corpus | Result<T, E> error handling -- no thrown exceptions | | @devpad/api | Devpad project/task management client |

System (optional)

| Tool | Purpose | |------|---------| | git | Core data source (required) | | gh | GitHub CLI for PR, issue, CI, and release widgets | | fzf | Interactive filtering for ggi integration | | delta | Diff rendering for ggi integration |

Dev

| Dependency | Purpose | |------------|---------| | TypeScript | Type checking | | Biome | Linting and formatting |

License

MIT