A fast, cross-platform CLI tool to check the git status of multiple projects organized by categories.
Run check-projects to see which of your projects have uncommitted changes, are ahead of remote, or have other git status indicators.
x mozilla
* M firefox
✱ ✚ thunderbird
✔ godot
x gamedev
⬆ flying-ones
* M avindi✔- Clean (synced with remote)⬆- Ahead of remote⬆⬆- Diverged from remote* M- Modified files* D- Deleted files✱ ✚- Untracked files❌- Error
- Multi-category organization: Group your projects by team, client, or any category
- Nested project discovery: Automatically scan nested folder structures
- Concurrent scanning: Fast parallel git status checks
- Flexible configuration: YAML-based config with local and global support
- Smart filtering: Hide clean projects by default, show only what needs attention
- Cross-platform: Single binary for macOS, Linux, and Windows
curl -fsSL https://raw.githubusercontent.com/uralys/check-projects/main/install.sh | shThis will download the latest release and install it to ~/.local/bin/check-projects.
show manual Installation
-
Download the latest release for your platform from GitHub Releases
-
Extract and install:
# macOS/Linux
tar -xzf check-projects-*.tar.gz
chmod +x check-projects
sudo mv check-projects /usr/local/bin/
# Or install to user directory (no sudo required)
mkdir -p ~/.local/bin
mv check-projects ~/.local/bin/
# Add ~/.local/bin to your PATH if not already done# Windows (PowerShell as Administrator)
Move-Item check-projects.exe C:\Windows\System32\git clone https://github.com/uralys/check-projects.git
cd check-projects
make install- Create a configuration file:
cp check-projects.example.yml ~/check-projects.yml-
Edit
~/check-projects.ymlto match your project structure -
Run the tool:
Configuration files are searched in this order:
- Path specified with
--configflag ./check-projects.yml(current directory)~/check-projects.yml(home directory)
categories:
# Mode 1: Explicit project list (using 'projects' field)
# Use full paths to specific git repositories
- name: core
projects:
- ~/fox
- ~/cherry
# Mode 2: Auto-scan directory (using 'root' field)
# Recursively scans for all git repositories in the directory
- name: godot
root: ~/Projects/godot
# Mode 2 with ignore patterns
# Projects listed in 'ignore' will be skipped in this category
- name: uralys
root: ~/Projects/uralys
ignore:
- deprecated-project # Exact match
- _archives/* # Wildcard: ignore all projects in _archives/
- "*-old" # Pattern: ignore all projects ending with -old
# Display options
display:
hide_clean: true # Hide projects with ✔ status by default
hide_ignored: true # Hide ignored projects from outputYou can ignore specific projects in a category using the ignore field. Supported patterns:
- Exact match:
project-name- ignores the exact project name - Wildcard prefix:
_archives/*- ignores all projects in the_archives/directory - Glob patterns:
*-deprecated- ignores all projects ending with-deprecated
Common ignore patterns are automatically applied:
node_modules- always skipped during scanning.DS_Store- always skipped during scanning
# Check all projects
check-projects
# Show all projects including clean ones
check-projects --verbose
check-projects -v
# Check only specific category
check-projects --category gamedev
# Use custom config file
check-projects --config /path/to/config.yml
# Show version
check-projects --versioncheck-projects automatically checks for new versions on startup. When a new version is available, you'll see:
⚠ New version available: 1.0.0 → 1.1.0
Install update? [Y/n]:
- Press Enter or type Y to automatically download and install the update
- Type n to skip and continue with your current version
The update check is non-blocking and will silently fail if GitHub is unreachable.
# Install dependencies
make deps
# Run without building
make dev
# Build binary
make build
# Run tests
make test
# Build for all platforms
make release