mazrean

kessoku-di

@mazrean/kessoku-di
mazrean
109
1 forks
Updated 1/6/2026
View on GitHub

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.

Installation

$skills install @mazrean/kessoku-di
Claude Code
Cursor
Copilot
Codex
Antigravity

Details

Repositorymazrean/kessoku
Pathinternal/llmsetup/skills/kessoku-di/SKILL.md
Branchmain
Scoped Name@mazrean/kessoku-di

Usage

After installing, this skill will be available to your AI coding assistant.

Verify installation:

skills list

Skill Instructions


name: kessoku-di description: 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.

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
Injectvar _ = kessoku.Inject[T]("Name", ...)Define injector function
Providekessoku.Provide(NewFn)Wrap provider function
Asynckessoku.Async(kessoku.Provide(...))Enable parallel execution
Bindkessoku.Bind[Interface](provider)Interface→implementation
Valuekessoku.Value(v)Inject constant value
Setkessoku.Set(providers...)Group providers
Structkessoku.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