Repository navigation
Releases: livetribe/yama
Release list
v0.5.0
An alpha release. The API can still change before v1.0.
Breaking
- Yama now requires Go 1.26 or later. The
goline ingo.modis1.26.0. An application on Go 1.25 must upgrade Go before it upgrades Yama.
Fixed
- Vulnerable dependencies.
golang.org/x/modmoves to v0.41.0 andgolang.org/x/textmoves to v0.42.0. These versions fix GO-2026-6179, GO-2026-6180, and GO-2026-5970.govulncheckfound no call from Yama to the affected code.
New
- A security policy. SECURITY.md states how to report a vulnerability through GitHub private vulnerability reporting.
Changed
golang.org/x/toolsmoves to v0.50.0.
Full changes: v0.4.0...v0.5.0
v0.4.0
An alpha release. The API can still change before v1.0.
Breaking
yama.Optionis now a function type. It was an interface with one method. Code that builds options withWithInterceptors,WithBeginComponents, andWithEndComponentsneeds no change. Code that named theApplymethod does.
New
-
The closer directive. A
//yama:closercomment in the doc comment of a provider's declaration closes the component in the teardown pass. Yama wraps the component in aStopperthat callsClose. The call runs under the pass context and through theStopinterceptors. This is for a type from a package you do not own, such as*sql.DB.// NewDB provides the database handle. // //yama:closer func NewDB(cfg Config) (*sql.DB, error) { return sql.Open(cfg.Driver, cfg.DSN) }
A
wire.Structentry has no declaration, so its directive goes on the entry in thewire.NewSetcall. -
A warning for a closer that nothing closes. A run prints one line on standard error for a component that implements
io.Closerand has no directive, no cleanup, and noStop. The warning does not stop generation. -
The noclose directive. A
//yama:noclosecomment states that the lifecycle does not close the component, and it stops the warning.
Changed
- A run names its backup files with a
.baksuffix, not a leading dot. A directory listing now shows what an interrupted run left behind. - Regenerate after you upgrade. Generated code calls
rt.AsStopperfor a closer component, so theyamatool and thel7e.io/yamamodule must be the same version.
Full changes: v0.3.0...v0.4.0
v0.3.0
The first alpha of the lifecycle-orchestration rewrite. The API can still change before v1.0.
This is a green-field rewrite. It shares only a name and a repository with the signal watcher released as v0.1.0 and v0.2.0. The module path is l7e.io/yama.
What it is
Yama is a compile-time lifecycle framework. It reads the dependency graph that Google Wire builds, and it generates the code that starts, quiesces, and stops the application's components in dependency order. No runtime engine interprets a plan.
What this release holds
- The
yamacommand. It runs Google Wire, reads the injector that Wire writes, and writeslifecycle_gen.go. Its flags and its package-pattern argument are the same aswire gen's. - Lifecycle stubs. A file behind the
yamainjectbuild tag names each constructor that the application calls, and the providers that build its graph. - Three capabilities. A component takes part in a pass when its type implements
Starter,Quiescer, orStopper. A Google Wire cleanup function keeps its place in the teardown. - Ordering. Components start in dependency order. They quiesce and stop in reverse. Components with no dependency relation run at the same time.
- Startup failure. Startup is fail-fast. Yama rolls back what started, runs every cleanup, and returns
ErrStartFailed. - Interceptors and boundary components, through
WithInterceptors,WithBeginComponents, andWithEndComponents. RunUntilSignal, which runs a lifecycle until a signal or a context cancellation.
See the README, the guide, and the ADRs.
This release was recreated on 2026-09-18 from the v0.3.0 tag of 2026-08-27. The tag did not change.