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

wm2

v0.2.8

Published

Git worktree management with hooks - ideal for coding agents like Claude Code

Readme

wm2

A Node.js port of the Ruby worktree_manager gem. wm2 provides a simple and intuitive interface for creating, managing, and removing Git worktrees with built-in hook support.

Features

  • Easy worktree management: Create, list, and remove Git worktrees
  • Branch operations: Create new branches or checkout existing ones
  • Hook system: Execute custom scripts before/after worktree operations
  • Conflict detection: Automatic validation to prevent path and branch conflicts
  • CLI interface: Simple command-line tool for quick operations
  • Configuration initialization: Easy setup with wm2 init command
  • Branch reset: Reset worktree branches to origin/main with wm2 reset
  • Interactive mode: Jump between worktrees and remove with interactive selection
  • Cross-platform: Works on macOS, Linux, and Windows

Installation

Install wm2 globally using npm:

npm install -g wm2

Or using yarn:

yarn global add wm2

Usage

Command Line Interface

wm2 provides a CLI tool for managing worktrees:

# Show version
wm2 version

# Initialize configuration file
wm2 init

# List all worktrees
wm2 list

# Create a new worktree using just a name (uses worktrees_dir)
wm2 add feature-branch

# Create a worktree with a relative path
wm2 add ../feature-branch

# Create a worktree with an absolute path
wm2 add /path/to/feature-branch

# Create a worktree with an existing branch
wm2 add feature-branch existing-branch

# Create a worktree with a new branch
wm2 add feature-branch -b new-feature-branch

# Remove a worktree using just a name
wm2 remove feature-branch

# Remove a worktree with a path
wm2 remove ../feature-branch

# Remove all worktrees (interactive confirmation)
wm2 remove --all

# Force operations (bypass safety checks)
wm2 add existing-dir -f
wm2 remove worktree-with-changes -f

# Track remote branches
wm2 add pr-154 -t origin/pr-154        # Create local pr-154 tracking origin/pr-154
wm2 add pr-154 origin/pr-154           # Auto-detect remote branch
wm2 add hotfix -t upstream/hotfix-123  # Track from different remote

# Reset worktree branch to origin/main (must be run from worktree)
wm2 reset                              # Reset current branch to origin/main
wm2 reset -f                           # Force reset (discard uncommitted changes)

# Jump between worktrees (interactive)
wm2 jump

# Remove worktrees interactively
wm2 remove

# Get help for any command
wm2 --help                             # Show all commands
wm2 add --help                         # Show help for add command
wm2 remove -h                          # Short help flag also works

Working with Remote Branches

wm2 makes it easy to work with remote branches:

# Method 1: Using --track (-t) option
wm2 add pr-154 -t origin/pr-154
# This will:
# 1. Fetch origin/pr-154
# 2. Create a new local branch 'pr-154' tracking 'origin/pr-154'
# 3. Create worktree at '../worktrees/pr-154' (or configured location)

# Method 2: Auto-detection
wm2 add pr-154 origin/pr-154
# If the second argument contains '/', it's treated as a remote branch
# Creates local 'pr-154' tracking 'origin/pr-154'

# Different remote names
wm2 add hotfix -t upstream/hotfix-123  # Track from 'upstream' remote
wm2 add feature -t fork/feature        # Track from 'fork' remote

Interactive Mode

wm2 provides interactive commands for better user experience:

# Jump between worktrees interactively
wm2 jump
# Shows a list of all worktrees with their branches
# Select one to jump to it

# Remove worktrees interactively
wm2 remove
# Shows a list of worktrees
# Select one or more to remove
# Confirms before removing

# Remove all worktrees with confirmation
wm2 remove --all
# Lists all worktrees that will be removed
# Asks for confirmation
# Option to force remove if some have uncommitted changes

Configuration

After running wm2 init, a .worktree.yml file is created in your repository root:

worktrees_dir: ../worktrees

This specifies the default directory where worktrees will be created when using just a name.

Hook System

wm2 supports hooks for custom automation. Hooks are defined in .worktree.yml:

worktrees_dir: ../worktrees

# Simple string command
pre_add: echo "Creating worktree..."
post_add: echo "Worktree created!"

# Array of commands
pre_remove:
  - echo "Removing worktree..."
  - ./scripts/cleanup.sh

# Advanced configuration with options
hooks:
  post_add:
    commands:
      - npm install
      - npm run build
    pwd: $WORKTREE_ABSOLUTE_PATH
    stop_on_error: true

Available hooks:

  • pre_add: Run before creating a worktree
  • post_add: Run after creating a worktree
  • pre_remove: Run before removing a worktree
  • post_remove: Run after removing a worktree

Environment variables available in hooks:

  • WORKTREE_BRANCH: Branch name
  • WORKTREE_PATH: Relative path to worktree
  • WORKTREE_ABSOLUTE_PATH: Absolute path to worktree
  • WORKTREE_MAIN: Path to main repository
  • WORKTREE_MANAGER_ROOT: Repository root directory

Programmatic Usage

You can also use wm2 programmatically in your Node.js applications:

import { Manager, ConfigManager } from 'wm2';

// Initialize manager
const manager = new Manager('/path/to/repo');

// List worktrees
const worktrees = await manager.list();
console.log(worktrees);

// Add a worktree
await manager.add('/path/to/new-worktree', { branch: 'feature-branch' });

// Remove a worktree
await manager.remove('/path/to/worktree');

// Work with configuration
const config = new ConfigManager('/path/to/repo');
const worktreesDir = config.getWorktreesDir();

Requirements

  • Node.js 22.17.1 or higher
  • Git 2.5.0 or higher (for worktree support)

Development

# Clone the repository
git clone https://github.com/nacyot/wm2.git
cd wm2

# Install dependencies
npm install

# Run tests
npm test

# Run linter
npm run lint

# Build the project
npm run build

License

This project is licensed under the MIT License - see the LICENSE file for details.

Credits

wm2 is a Node.js port of the Ruby worktree_manager gem.