Skip to content

v0.3.0

Choose a tag to compare

@maguro maguro released this 18 Sep 18:30
· 27 commits to master since this release

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 yama command. It runs Google Wire, reads the injector that Wire writes, and writes lifecycle_gen.go. Its flags and its package-pattern argument are the same as wire gen's.
  • Lifecycle stubs. A file behind the yamainject build 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, or Stopper. 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, and WithEndComponents.
  • 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.