Claude-skill-registry kessoku-di

Kessoku compile-time DI with parallel initialization for Go. Use when writing or debugging kessoku providers/injectors, enabling async dependencies, migrating from google/wire, or fixing go:generate/codegen issues in Go services.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/kessoku-di" ~/.claude/skills/majiayu000-claude-skill-registry-kessoku-di && rm -rf "$T"
manifest: skills/data/kessoku-di/SKILL.md
source content

Kessoku: Parallel DI for Go

Kessoku is a compile-time dependency injection library that speeds up Go application startup through parallel initialization. Unlike google/wire (sequential), kessoku runs independent providers concurrently.

Use this skill when you are building or debugging kessoku injectors/providers, wiring async dependencies, migrating from google/wire, or troubleshooting

go tool kessoku
generation problems.

Supporting files: PATTERNS.md for examples, MIGRATION.md for wire migration, TROUBLESHOOTING.md for common errors.

When to Use Kessoku

  • Slow startup: Multiple DB connections, API clients, or cache initialization
  • Cold start optimization: Serverless/Lambda functions timing out
  • google/wire alternative: Want compile-time DI with parallel execution

Quick Start

//go:generate go tool kessoku $GOFILE

package main

import "github.com/mazrean/kessoku"

var _ = kessoku.Inject[*App](
    "InitializeApp",
    kessoku.Async(kessoku.Provide(NewDB)),     // Parallel
    kessoku.Async(kessoku.Provide(NewCache)),  // Parallel
    kessoku.Provide(NewApp),                   // Waits for deps
)

Run:

go generate ./...
→ generates
*_band.go

API Reference

APISyntaxPurpose
Inject
var _ = kessoku.Inject[T]("Name", ...)
Define injector function
Provide
kessoku.Provide(NewFn)
Wrap provider function
Async
kessoku.Async(kessoku.Provide(...))
Enable parallel execution
Bind
kessoku.Bind[Interface](provider)
Interface→implementation
Value
kessoku.Value(v)
Inject constant value
Set
kessoku.Set(providers...)
Group providers
Struct
kessoku.Struct[T]()
Expand struct fields as deps

Common Patterns

Basic Injector

var _ = kessoku.Inject[*App](
    "InitializeApp",
    kessoku.Provide(NewConfig),
    kessoku.Provide(NewDB),
    kessoku.Provide(NewApp),
)
// Generates: func InitializeApp() *App

Parallel Initialization (Async)

var _ = kessoku.Inject[*App](
    "InitializeApp",
    kessoku.Async(kessoku.Provide(NewDB)),      // }
    kessoku.Async(kessoku.Provide(NewCache)),   // } Run in parallel
    kessoku.Async(kessoku.Provide(NewClient)),  // }
    kessoku.Provide(NewApp),
)
// Generates: func InitializeApp(ctx context.Context) (*App, error)

Interface Binding

var _ = kessoku.Inject[*App](
    "InitializeApp",
    kessoku.Bind[Repository](kessoku.Provide(NewPostgresRepo)),
    kessoku.Provide(NewApp),  // Receives Repository interface
)

Provider Sets (Reusability)

var DatabaseSet = kessoku.Set(
    kessoku.Provide(NewConfig),
    kessoku.Async(kessoku.Provide(NewDB)),
)

var _ = kessoku.Inject[*App]("InitializeApp",
    DatabaseSet,
    kessoku.Provide(NewApp),
)

Struct Field Expansion

var _ = kessoku.Inject[*DB](
    "InitializeDB",
    kessoku.Provide(NewConfig),   // Returns *Config{Host, Port}
    kessoku.Struct[*Config](),    // Expands to Host, Port fields
    kessoku.Provide(NewDB),       // Receives Host, Port separately
)

Key Points

  • No build tag needed: Unlike wire's
    //go:build wireinject
  • Async requires context: Generated function gets
    context.Context
    parameter
  • Error propagation: Providers returning
    error
    make injector return
    error
  • Cleanup functions: Providers can return
    func()
    for cleanup

Support Files

For detailed information, see:

Resources