Crate grove

Crate grove 

Source
Expand description

§Grove

A lightweight CLI for managing multiple git/jj repositories with per-project environment variables and centralized worktree management.

§Core Concepts

  • Project Registry — Track multiple repositories under short names. Register with grove add, list with grove list.
  • Environment Variables — Layered env vars stored outside the repo. Project-level defaults, worktree-level overrides, and repo-level defaults in .grove/config.toml. Integrates with mise for automatic shell injection.
  • Worktree Management — Create and manage git worktrees (or jj workspaces) across all projects from a single command. Worktrees get their own database instances and env var overrides.

§Quick Start

# Register a project
grove add myapp /path/to/repo

# Set environment variables
grove env set myapp DATABASE_URL=postgres:///myapp_dev

# Create a worktree and start working
grove start myapp my-feature

# List all worktrees across projects
grove worktree list

§Modules

  • config — Configuration loading, project registry, env var management
  • vcs — VCS backend abstraction (git, jj)
  • error — Error types

Modules§

config 🔒
Configuration management for grove.
error 🔒
Error types for grove operations.
vcs 🔒
VCS backend abstraction for worktree and workspace management.

Structs§

Cli 🔒

Enums§

Commands 🔒
EnvCommands 🔒
WorktreeCommands 🔒

Constants§

MISE_ENV_LUA 🔒
MISE_METADATA_LUA 🔒

Functions§

cleanup_and_remove_worktree 🔒
cmd_add 🔒
cmd_env_export 🔒
cmd_env_list 🔒
cmd_env_set 🔒
cmd_env_unset 🔒
cmd_init_mise 🔒
cmd_list 🔒
cmd_remove 🔒
cmd_start 🔒
cmd_worktree_list 🔒
cmd_worktree_new 🔒
cmd_worktree_rm 🔒
create_database 🔒
create_worktree_with_hooks 🔒
drop_database 🔒
main 🔒
mise_data_dir 🔒
open_editor 🔒
Opens $EDITOR pointed at the given path, if $EDITOR is set.
parse_vcs_override 🔒
run 🔒
run_mise_trust 🔒
run_post_create_hooks 🔒
run_setup_command 🔒
validate_worktree_exists 🔒
Validate that a worktree actually exists for a project.
validate_worktree_name 🔒
Validate worktree name contains only alphanumeric, hyphens, and underscores.