multimod

command module
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Apr 14, 2026 License: Apache-2.0 Imports: 12 Imported by: 0

README

multimod

CI License

When go.work doesn't go work.

Governance CLI for Go multi-module projects. go.work tamer, dev-state guardian. Workspace sync, replace management, detached-commit releases, sub-module tagging. No YAML. No shell scripts. Just go.mod.

Work in progress. The RFC is solid — stress-tested through adversarial architecture review. The implementation is catching up.

Do you need this?

Do you have a Go project with multiple go.mod files in one repo — a core library plus optional extensions (OTEL, gRPC, Redis) in separate modules?

If yes — you have a multi-module project, not a monorepo. Different problem, different tool. multimod solves this one.

Quick Start

go run github.com/thumbrise/multimod@latest

One command. After this: go.work is correct, replace directives are in place, Go version is aligned, IDE works, go test ./... covers all modules. Run it again — nothing changes. Idempotent.

Documentation

thumbrise.github.io/multimod — getting started, RFC, devlog.

  • Getting Started — install, first sync, the multi-module project distinction
  • Reference — RFCs: architecture, design decisions, disputed points
  • Devlog — design decisions, dead ends, lessons learned

Origin

Born inside thumbrise/resilience — a fault tolerance library for Go that needed multi-module support. The shell scripts grew, broke, and got replaced with a tool. The tool outgrew its parent. Read the full story.

License

Apache 2.0

Documentation

Overview

multimod is a zero-config multi-module management tool for Go monorepos.

Usage:

multimod                        — show project status
multimod go <args>              — transparent proxy with multi-module awareness
multimod release <version>      — publish preparation (detached commit + tags)
multimod modules                — JSON module map for piping into external tools

Directories

Path Synopsis
cmd
internal
applier
Package applier makes the filesystem match the desired State.
Package applier makes the filesystem match the desired State.
applier/internal/goworkapplier
Package goworkapplier syncs go.work to match the desired State.
Package goworkapplier syncs go.work to match the desired State.
goinvoker
Package goinvoker provides the infrastructure for invoking go commands with multi-module awareness.
Package goinvoker provides the infrastructure for invoking go commands with multi-module awareness.
goinvoker/internal/classifier
Package classifier decides whether go args require multi-module iteration.
Package classifier decides whether go args require multi-module iteration.
graph
Package graph provides pure graph algorithms.
Package graph provides pure graph algorithms.
model
Package multimod is a zero-config multi-module management tool for Go monorepos.
Package multimod is a zero-config multi-module management tool for Go monorepos.
model/states/discovery/steps
Package steps contains individual discovery pipeline steps.
Package steps contains individual discovery pipeline steps.
model/states/publish
Package publish transforms dev-state into publish-state via a pipeline of Steps.
Package publish transforms dev-state into publish-state via a pipeline of Steps.
model/states/publish/steps
Package steps contains individual publish pipeline steps.
Package steps contains individual publish pipeline steps.
release
Package release orchestrates the release flow: git detach → apply publish-state → commit → tag → return.
Package release orchestrates the release flow: git detach → apply publish-state → commit → tag → return.
release/internal/gitcli
Package gitcli provides the real git command execution via os/exec.
Package gitcli provides the real git command execution via os/exec.
testutil
Package testutil provides shared test helpers for multimod packages.
Package testutil provides shared test helpers for multimod packages.

Jump to

Keyboard shortcuts

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