3 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Core is a Web3 Framework written in Go using Wails v3 to replace Electron for desktop applications. It provides a dependency injection framework for managing services with lifecycle support.
Build & Development Commands
This project uses Task for automation. Key commands:
# Run all tests
task test
# Generate test coverage
task cov
task cov-view # Opens coverage HTML report
# GUI application (Wails)
task gui:dev # Development mode with hot-reload
task gui:build # Production build
# CLI application
task cli:build # Build CLI
task cli:run # Build and run CLI
# Code review
task review # Submit for CodeRabbit review
task check # Run mod tidy + tests + review
Run a single test: go test -run TestName ./...
Architecture
Core Framework (core.go, interfaces.go)
The Core struct is the central application container managing:
- Services: Named service registry with type-safe retrieval via
ServiceFor[T]()andMustServiceFor[T]() - Actions/IPC: Message-passing system where services communicate via
ACTION(msg Message)and register handlers viaRegisterAction() - Lifecycle: Services implementing
Startable(OnStartup) and/orStoppable(OnShutdown) interfaces are automatically called during app lifecycle
Creating a Core instance:
core, err := core.New(
core.WithService(myServiceFactory),
core.WithAssets(assets),
core.WithServiceLock(), // Prevents late service registration
)
Service Registration Pattern
Services are registered via factory functions that receive the Core instance:
func NewMyService(c *core.Core) (any, error) {
return &MyService{runtime: core.NewServiceRuntime(c, opts)}, nil
}
core.New(core.WithService(NewMyService))
WithService: Auto-discovers service name from package path, registers IPC handler if service hasHandleIPCEventsmethodWithName: Explicitly names a service
Runtime (runtime_pkg.go)
Runtime is the Wails service wrapper that bootstraps the Core and its services. Use NewWithFactories() for custom service registration or NewRuntime() for basic setup.
ServiceRuntime Generic Helper (runtime.go)
Embed ServiceRuntime[T] in services to get access to Core and typed options:
type MyService struct {
*core.ServiceRuntime[MyServiceOptions]
}
Error Handling (e.go)
Use the E() helper for contextual errors:
return core.E("service.Method", "what failed", underlyingErr)
Test Naming Convention
Tests use _Good, _Bad, _Ugly suffix pattern:
_Good: Happy path tests_Bad: Expected error conditions_Ugly: Panic/edge cases
Go Workspace
Uses Go 1.25 workspaces. The workspace includes:
- Root module (Core framework)
cmd/core-gui(Wails GUI application)cmd/examples/*(Example applications)
After adding modules: go work sync