Windows-only fork of
alajmo/mani. Samemaniyou know — manage many git repositories from one config, run commands across them in parallel — repackaged with native Windows tooling: PowerShell build/test/package scripts, a one-shot install script, and Windows-native integration tests. No WSL, MSYS, or Cygwin required.
mani lets you pull, organise, and run commands across multiple git repositories from a single mani.yaml. Useful for microservices, polyrepo setups, or any time you find yourself running the same git or build command in five places at once.
Compared to upstream alajmo/mani:
Default shell is PowerShell, not bash. DEFAULT_SHELL is now powershell -NoProfile -Command and FormatShell recognises powershell, pwsh, and cmd (/C) in addition to the upstream bash/zsh/sh/node/python set. Tasks in mani.yaml run via PowerShell unless you set shell: explicitly. The default editor (when $EDITOR is unset) falls back to notepad.
Real ExecTTY on Windows. Upstream's core/exec/windows.go was a stub that returned nil. This fork implements it via exec.LookPath + os.Stdin/Stdout/Stderr so mani exec --tty-style flows actually attach to the user's terminal on Windows.
PowerShell build pipeline replaces the Makefile.
Makefile,install.sh,scripts/release.sh,.goreleaser.yaml,.dockerignore— removed.scripts/build.ps1,scripts/test.ps1,scripts/package.ps1,scripts/install.ps1— added.- Man-page generation (
core/man.go,core/man_gen.go,core/mani.1,core/config.man,cmd/gen.go,cmd/gen_docs.go) — removed. Usemani --helpand thedocs/folder instead.
CI runs on windows-latest only. Both .github/workflows/test.yml and .github/workflows/release.yml drop the Ubuntu matrix. Releases are produced by scripts/package.ps1 and uploaded with softprops/action-gh-release instead of GoReleaser/Homebrew tap.
Integration tests are Windows-native. Upstream's Docker-based suite (test/integration/{init,list,run,sync,version,exec,describe}_test.go plus the Alpine Dockerfiles and shell-script harnesses under test/scripts/) is replaced by a single test/integration/windows_test.go that runs under PowerShell with no containers.
Install target is %LOCALAPPDATA%\Programs\mani. scripts/install.ps1 builds, copies, and (idempotently) adds that directory to the user PATH.
Everything else — projects, tasks, specs, themes, the TUI, sync, exec, run, the YAML config schema — tracks upstream. See docs/.
.\scripts\install.ps1Builds dist\mani.exe, copies it to %LOCALAPPDATA%\Programs\mani, and adds that directory to your user PATH. Open a new shell afterwards to pick up the PATH change.
Flags:
-InstallDir <path>— install somewhere else-SkipBuild— reuse an existingdist\mani.exeinstead of rebuilding-NoPath— skip the PATH modification-Version <ver>— value baked into the binary's--version
If PowerShell blocks the script with an execution-policy error:
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\install.ps1Download mani-<version>-windows-amd64.zip from the releases page, unzip, and put mani.exe somewhere on your PATH.
.\scripts\build.ps1
.\dist\mani.exe --helpTab completion: mani completion powershell.
Run inside a directory containing your git repositories:
mani initThis generates:
mani.yaml— projects and tasks. Any subdirectory with a.gitfolder is added automatically (turn off with--auto-discovery=false)..gitignore— when run inside a git repo, the listed projects are added (opt out with--sync-gitignore=false).
# List all projects
mani list projects
# Run git status across every project
mani exec --all git status
# Run in parallel with table output
mani exec --all --parallel --output table git status- Examples
- Config reference
- Commands
- Filtering projects
- Variables
- Output formats
- Changelog
- Roadmap
- Project background
- Contributing
Original project: alajmo/mani by Samir Alajmovic. This fork ports the build, packaging, and install flow to Windows / PowerShell while tracking upstream behaviour.
MIT — see LICENSE. Copyright (c) 2020-2021 Samir Alajmovic.
