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

@frozencrow/monogit

v1.2.1

Published

A CLI tool to manage multiple git repositories in a parent directory.

Readme

🚀 monogit

Manage multiple git repositories under a single parent folder with one command.

GitHub

monogit gives you a monorepo workflow without a monorepo. Run git operations across all your linked repositories simultaneously — branching, committing, pushing, and more — with a single command.


✨ Features

  • Interactive Setup — Scan a directory, detect existing repos, and optionally initialize new ones
  • Unified Git Commands — Run checkout, add, commit, push, pull across all repos at once
  • Visual Split-Screen — View status, log, and diff for every repo in partitioned terminal boxes
  • Parallel Execution — All commands run concurrently across repos for maximum speed
  • Error Resilience — One repo failing won't block the others
  • Shell Autocompletion — Support for Bash and Zsh tab completion

📦 Installation

npm i -g @frozencrow/monogit

Once installed, monogit is available as a global command.

Enable Tab Completion

Tab completion is automatically set up during installation for Zsh and Bash.

If it's not working, or if you need to set it up manually, you can run:

For Zsh:

echo 'source <(monogit completion zsh)' >> ~/.zshrc
source ~/.zshrc

For Bash:

echo 'source <(monogit completion bash)' >> ~/.bashrc
source ~/.bashrc

🛠 Getting Started

1. Initialize your workspace

Navigate to a parent directory that contains (or will contain) your git repositories, then run:

monogit init

This will:

  • Scan all subdirectories
  • Detect which ones are already git repositories
  • Let you select which repos to link
  • Offer to git init any non-git directories you want to include
  • Save the configuration to .monogit.json

2. Start working across repos

# Create a new branch in all repos
monogit checkout -b feature/my-feature

# Check status across all repos
monogit status

# Stage all changes
monogit add .

# Commit everywhere
monogit commit -m "implement shared feature"

# Push to all remotes
monogit push origin feature/my-feature

📖 Commands

monogit completion [shell]

Generate shell completion script for Bash or Zsh.

# Generate for Zsh (default)
monogit completion zsh

# Generate for Bash
monogit completion bash

monogit init

Interactively configure which repositories to manage.

monogit init
  • Scans the current directory for subdirectories
  • Presents existing git repos for selection
  • Offers to initialize git in non-repo directories
  • Saves configuration to .monogit.json

monogit checkout <branch>

Switch branches across all linked repositories.

# Switch to an existing branch
monogit checkout main

# Create and switch to a new branch
monogit checkout -b feature/new-work

| Option | Description | |--------|-------------| | -b | Create a new branch |


monogit add <paths...>

Stage files across all linked repositories.

# Stage everything
monogit add .

# Stage specific files
monogit add src/ README.md

monogit commit

Commit staged changes across all linked repositories.

# Commit staged changes
monogit commit -m "your commit message"

# Stage and commit all tracked changes
monogit commit -am "your commit message"

# Commit specific paths
monogit commit -m "update docs" docs/

| Option | Description | |--------|-------------| | -m <message> | Required. Commit message | | -a | Automatically stage modified/deleted files |


monogit push [remote] [branch]

Push commits to remote repositories.

# Push (default remote/branch)
monogit push

# Push to a specific remote and branch
monogit push origin main

monogit pull [remote] [branch]

Pull updates from remote repositories.

# Pull (default remote/branch)
monogit pull

# Pull from a specific remote and branch
monogit pull origin main

monogit fetch [remote] [branch]

Fetch updates from remote repositories.

# Fetch (default remote/branch)
monogit fetch

# Fetch from a specific remote and branch
monogit fetch origin main

monogit merge <branch>

Merge a branch into the current branch across all linked repositories.

# Merge a specific branch
monogit merge feature/my-feature

monogit branch [branch]

List, create, or delete branches across all linked repositories.

# List branches (relative to the first repo)
monogit branch

# Create a new branch
monogit branch feature/new-idea

# Delete a branch
monogit branch -d stale-feature

| Option | Description | |--------|-------------| | -d, --delete | Delete a branch | | -D | Force delete a branch |


monogit status

View the git status of all linked repositories in a split-screen layout.

monogit status

Each repository's status is displayed in its own bordered box for easy scanning.


monogit log

View recent commit history across all repositories.

monogit log

Shows the last 5 commits per repo in a compact graph format, each in a separate box.


monogit diff

View unstaged changes across all repositories.

monogit diff

Displays diffs for each repository in separate bordered boxes with color-coded output.


⚙️ Configuration

monogit stores its configuration in a .monogit.json file in the working directory:

{
  "repos": [
    "api",
    "client",
    "shared-lib"
  ]
}

Each entry is a relative path to a subdirectory containing a git repository.

Tip: You can commit .monogit.json to share configuration with your team, or add it to .gitignore if it's personal.


🏗 Project Structure

monogit/
├── index.js                    # CLI entry point
├── package.json
├── .monogit.json               # Generated config (per workspace)
└── src/
    ├── commands/
    │   ├── init.js             # Interactive repo linking
    │   ├── git-proxy.js        # Parallel proxy for standard git commands
    │   ├── visual.js           # Split-screen output for log/diff/status
    │   ├── completion.js       # Shell completion script generation
    │   └── complete.js         # Dynamic branch completion logic
    └── utils/
        ├── config.js           # Read/write .monogit.json
        └── git.js              # Git command execution via execa
├── scripts/
│   └── postinstall.js          # Automatic completion setup during npm install

🧰 Built With


📄 License

ISC