grove

module
v1.1.14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 25, 2026 License: MIT

README

Grove logo

Grove (gw)

grove /ɡrōv/ noun — a small group of trees growing together.

CI Release License

Why?

Monorepos solve cross-project work, but not everyone has one. You've got separate repos, separate CI, separate deploys — and that's fine until you need to work across them.

One feature across three services means git worktree add three times, tracking three branches, jumping between three directories, cleaning up three worktrees when you're done. It's annoying.

Grove gives you the multi-repo worktree workflow that monorepos get for free. One command, one workspace, all repos on the same branch.

Getting Started

1. Install Grove

Pick any one of the following methods:

Homebrew

brew install nicksenap/grove/grove

Go install

go install github.com/nicksenap/grove/cmd/gw@latest

From source

git clone https://github.com/nicksenap/grove.git
cd grove && go build -o gw ./cmd/gw
mv gw /usr/local/bin/

2. Add shell integration

This enables gw go to change your working directory and auto-cds into new workspaces after gw create.

Bash / Zsh — add to .zshrc or .bashrc:

eval "$(gw shell-init)"

Nushell — generate and source the init file:

gw shell-init --shell nu | save -f ~/.config/nushell/grove.nu
# then add to config.nu:
source grove.nu

Upgrading

If you installed with Homebrew:

brew update && brew upgrade grove

Usage

# Register your repo directories (one-time)
gw init ~/dev ~/work/microservices

# Create a workspace: name the branch, pull repos from a preset or a list
gw create -b feat/login -p backend        # repos from a saved preset
gw create -b feat/login -r svc-a,svc-b    # …or an ad-hoc repo list

# Work across the whole workspace
gw go my-feature       # cd into the workspace
gw status my-feature   # git status across every repo
gw sync my-feature     # rebase all repos onto their base branch
gw reset my-feature    # switch every repo back to the workspace branch, then sync
gw run my-feature      # run dev processes (TUI)

# Clean up when done (destructive; use a pre_delete hook to enforce policy)
gw delete my-feature   # removes worktrees, branches, and workspace files

Interactive menus support type-to-search filtering, arrow-key navigation (single-select), or arrow + tab (multi-select) with an (all) shortcut.

Presets, plugins, hooks, and the full command reference are covered in Workflows and Operations.

Documentation

Full documentation lives in the OpenWiki — start with the quickstart, then dive into the area you need:

  • Quickstart — install, first commands, key concepts, and a source map
  • Architecture — layered design, data model, concurrency, and key decisions
  • Workflows — how each command maps to code (create, sync, run, delete, presets…)
  • Operations — configuration, hooks, state, troubleshooting, and release process
  • Integrations — plugins and workspace source provenance

Focused topic guides

Requirements

No dependencies — single static binary. Requires git on PATH.

Directories

Path Synopsis
cmd
gw command
internal
lifecycle
Package lifecycle runs global lifecycle hooks defined in ~/.grove/config.toml [hooks].
Package lifecycle runs global lifecycle hooks defined in ~/.grove/config.toml [hooks].
logging
Package logging provides rotating file logging for Grove.
Package logging provides rotating file logging for Grove.
operations
Package operations owns user-facing workspace operation ordering, including global lifecycle hook policy.
Package operations owns user-facing workspace operation ordering, including global lifecycle hook policy.
plugin
Package plugin implements external binary plugin discovery and execution.
Package plugin implements external binary plugin discovery and execution.
recipe
Package recipe parses and validates versioned Grove Recipe files.
Package recipe parses and validates versioned Grove Recipe files.
streamio
Package streamio provides shared io helpers for streaming subprocess output live to the terminal with a per-line prefix, so concurrent or long-running commands (hooks, dev servers) remain attributable and never look hung.
Package streamio provides shared io helpers for streaming subprocess output live to the terminal with a per-line prefix, so concurrent or long-running commands (hooks, dev servers) remain attributable and never look hung.
update
Package update provides non-blocking version checking against GitHub releases.
Package update provides non-blocking version checking against GitHub releases.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL