Core design principles
kombify TechStack follows a spec-driven architecture: you declare your desired state in akombination.yaml file, and TechStack converges your infrastructure toward that state.
The Unifier Engine
The Unifier is TechStack’s core processing pipeline. It takes your high-level intent and transforms it into concrete infrastructure configuration.Processing stages
Parse
Your
kombination.yaml is parsed and normalized. References to StackKits are resolved, and the full configuration tree is assembled.Validate
CUE schemas from the selected StackKit validate every field. Type errors, missing required values, and constraint violations are caught here — before anything touches your servers.
Resolve Dependencies
Services declare their dependencies (e.g., Immich needs a database). The Unifier resolves the dependency graph and determines the correct deployment order.
Generate
OpenTofu HCL and Docker Compose configurations are generated. These are the actual files that will be applied to your infrastructure.
Agent architecture
TechStack uses lightweight gRPC agents installed on each managed node. These agents handle the “last mile” of deployment. Key properties:- mTLS authentication — Every connection is mutually authenticated with TLS certificates
- Heartbeat monitoring — Agents report status at regular intervals
- Idempotent operations — Applying the same configuration twice produces the same result
- Pull-based updates — Agents pull their configuration from the control plane
Drift detection
TechStack continuously compares the desired state (your spec) with the actual state (what is running on your nodes). When differences are detected, TechStack can:- Alert — Notify you about the drift
- Propose — Show you what changes would fix the drift
- Auto-fix — Automatically converge back to the desired state (if enabled)
State management
TechStack uses PocketBase (SQLite) as its embedded database for:- Stack state and configuration history
- Job execution logs
- Agent registry and health status
- User sessions and preferences
Technology choices
| Component | Choice | Why |
|---|---|---|
| Go | Backend language | Single binary, low memory, fast startup |
| PocketBase | State storage | Embedded SQLite, zero config, built-in auth |
| OpenTofu | IaC engine | Open-source, battle-tested, declarative |
| CUE | Validation | Type-safe, composable, catches errors early |
| gRPC + mTLS | Agent communication | Efficient, secure, strongly typed |
| SvelteKit | Dashboard | Modern, reactive, small bundle size |
Further reading
Spec-driven design
Understand the philosophy behind spec-driven infrastructure
StackKits & CUE
How CUE schemas power the StackKits validation system
