Grazhda is a multi-repository workspace lifecycle toolkit. You describe workspaces in YAML, then use:
zgardto clone, pull, inspect, and manage repos at scaledukhto monitor workspace health in the backgroundgrazhdato install/upgrade/manage the toolchain itself
Grazhda automates day-to-day operations for teams working across many repositories:
- Declarative workspace config (
config.yaml) with workspaces, projects, repositories, and branch rules. - Bulk operations (
zgard ws init,pull,exec,stash,checkout,search,diff,stats). - Background health monitoring (
dukh) for branch drift and missing repositories. - Declarative package management (
zgard pkg) with layered registries:- Global registry:
$GRAZHDA_DIR/.grazhda.pkgs.yaml(managed by install/upgrade) - Local registry:
$GRAZHDA_DIR/registry.pkgs.local.yaml(user-managed)
- Global registry:
- Fast environment setup: clone an entire workspace with one command.
- Consistent developer experience: workspace state lives in versioned YAML, not tribal knowledge.
- Safer large-scale changes: dry-run, targeting filters, and clear per-repo status output.
- Health visibility:
dukhgives near-real-time workspace health snapshots. - Flexible package control: local package registry can override global definitions and supports version-aware dependencies (
depends_on: nameorname@version).
bashcurlgitjustprotoc- Go
1.26+
curl -s https://raw.githubusercontent.com/vhula/grazhda/refs/heads/main/grazhda-install.sh | bashThis installs into $GRAZHDA_DIR (default: $HOME/.grazhda) and builds binaries from source.
To install into a custom directory, set GRAZHDA_DIR before running the installer:
export GRAZHDA_DIR="$HOME/devtools/grazhda" && curl -s https://raw.githubusercontent.com/vhula/grazhda/refs/heads/main/grazhda-install.sh | bashcp config.template.yaml "$GRAZHDA_DIR/config.yaml"
grazhda config --edit
zgard config validatezgard ws init # clone repositories from the default workspace
zgard ws pull # pull updates across repositories
dukh start # start background health monitor
zgard ws status # show health snapshotInstall/purge resolves packages from both registries:
$GRAZHDA_DIR/.grazhda.pkgs.yaml(global)$GRAZHDA_DIR/registry.pkgs.local.yaml(local, optional)
Local entries override global entries when name+version match exactly.
# Install from merged registries
zgard pkg install --all
zgard pkg install --name jdk@17.0.8-tem
# Add/update package interactively in local registry
zgard pkg register
# Remove from local registry
zgard pkg unregister --name jdk --version 17.0.8-tem
zgard pkg unregister --name jdk
zgard pkg unregister --allFor a full guided setup, see QUICK-START.md.
- QUICK-START.md — fast installation and first-run flow
- docs/CLI.md — complete command reference
- docs/CONFIG.md — configuration schema and examples
- docs/DEVELOPMENT.md — local development, build, and test workflow
- docs/architecture.md — system design and module boundaries
Issue tracker: github.com/vhula/grazhda/issues
Maintained by the Grazhda project maintainers (repository owner: @vhula).
- Fork and clone the repository.
- Create a feature branch.
- Run local checks:
just build
just test- Open a pull request with a clear description and test evidence.
Development conventions and module layout are documented in docs/DEVELOPMENT.md.
GNU GPL v3 — see LICENSE.