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 🙏

© 2025 – Pkg Stats / Ryan Hefner

stak-git

v1.0.4

Published

Minimal stacked changes for git - build big features as small branches

Readme

stak

npm PyPI License: MIT

Minimal stacked changes for git. A lightweight alternative to Graphite, ghstack, and git-branchless.

What is it?

Build big features as a chain of small, reviewable branches:

main → auth-types → auth-service → auth-ui

Each branch builds on the previous. Submit all for review at once. When you edit a lower branch, one command updates everything above.

Install

# Homebrew (macOS/Linux)
brew install memorypasta/tap/stak

# npm
npm install -g stak-git

# pip / uv
pip install stak-git

# Direct install
curl -fsSL https://raw.githubusercontent.com/memorypasta/stak/main/packaging/install.sh | bash

Commands

| Command | Description | |---------|-------------| | stak new <name> | Create branch on top of current | | stak insert | Insert branch at any position (fzf) | | stak split | Split current branch's commits (fzf) | | stak up / down | Move up or down the stack | | stak goto | Jump to branch (fzf interactive) | | stak status | Show the stack | | stak sync | Rebase entire stack | | stak continue | Continue after resolving conflicts | | stak abort | Abort current rebase | | stak push | Push branches (fzf multi-select) | | stak push -a | Push all branches | | stak drop | Remove top branch | | stak fold | Fold branch (fzf interactive) | | stak fold --down | Fold into child (non-interactive) | | stak land | Clean up after PR merge | | stak log | View commits (fzf interactive) | | stak log -a | Show all branches | | stak ls | List all stacks | | stak use | Switch to stack (fzf interactive) | | stak use <name> | Switch/create stack by name | | stak rm-stack | Delete a stack (fzf interactive) | | stak setup-interactive | Install fzf |

Disable Interactive Mode

export STAK_NO_INTERACTIVE=1
stak push    # pushes all without fzf prompt

Basic Workflow

git checkout main

# Build feature in parts
stak new auth-types
# ... commit ...

stak new auth-service
# ... commit ...

stak new auth-ui
# ... commit ...

# See the stack
stak status
#     main
#     auth-types (2 commits)
#     auth-service (3 commits)
#   → auth-ui (4 commits)

# Push all for review
stak push

Editing a Lower Branch

# Go back to fix something
stak down
stak down
# ... fix and commit ...

# Update everything above
stak sync

# Push updates
stak push

Handling Conflicts

stak sync
# Conflict in auth-service!

# Fix the conflict in your editor
git add .
stak continue    # continues sync

# Or abort and try differently
stak abort

Combining Branches

Fold up (into parent - keep parent's name):

# Combine auth-service into auth-types
stak down              # go to auth-service
stak fold              # fold up into auth-types

#     main
#   → auth-types (combined)
#     auth-ui

Fold down (into child - keep child's name):

# Combine auth-service into auth-ui
stak down              # go to auth-service
stak fold --down       # fold down into auth-ui

#     main
#     auth-types
#   → auth-ui (combined)

After PR Merges

# auth-types PR merged to main
stak land        # removes auth-types, rebases rest onto main

# Stack is now:
#     main
#   → auth-service
#     auth-ui

Multiple Stacks

Work on different features simultaneously:

# Create stacks for different features
stak use auth-feature     # creates & switches
stak new auth-types
stak new auth-service

stak use billing-feature  # creates & switches
stak new billing-api
stak new billing-ui

# Switch between them
stak use auth-feature

# List all stacks
stak ls
#   ● auth-feature (2 branches) ◀ current
#   ○ billing-feature (2 branches)

# Delete when done
stak rm-stack billing-feature

Each stak tracks its own chain of branches independently.

Why stak?

| Tool | Complexity | Dependencies | Works with any Git host | |------|------------|--------------|-------------------------| | stak | Minimal | Just bash + git | ✅ Yes | | Graphite | Full platform | Requires account | ❌ GitHub only | | ghstack | Medium | Python | ❌ GitHub only | | git-branchless | High | Rust binary | ✅ Yes |

Philosophy

  • Minimal: Only commands you need for stacked changes
  • Transparent: Just git branches. Use git directly anytime.
  • No magic: Stacks stored in .git/stacks/, one branch per line
  • Conflict-friendly: Resolve normally, then stak continue

Tips

  • Keep stacks shallow (2-3 branches). Deep stacks = more conflicts.
  • Commit before running sync, fold, or drop.
  • Use stak status often to see where you are.
  • You can always use raw git commands - stak just helps manage the chain.
  • Run stak setup-interactive to install fzf for interactive navigation.

License

MIT