BubuStack Overview
BubuStack applies the Unix philosophy to workflow orchestration on Kubernetes.
Design philosophy
-
Do one thing and do it well. Each Engram is a single-purpose component — transcribe audio, call an LLM, send a notification. It does its job and produces output. It knows nothing about the pipeline it runs in.
-
Write programs to work together. A Story composes Engrams into a DAG, wiring step outputs to step inputs. Swap one Engram for another and the pipeline keeps working — just as replacing
jqwithyqin a shell pipeline requires no changes to the surrounding commands. -
Text is the universal interface. Step outputs are JSON. Templates evaluate against a shared context of
inputsandsteps. There is no proprietary IPC, no binary coupling — just structured data flowing between independent components.
The operator (bobrapet) is the kernel: it schedules, reconciles, and enforces policy. It never owns business logic. The components — Engrams and Impulses — are userspace: Engrams own side effects, external calls, and data transformation; Impulses listen for external events and trigger workflows. The SDK (bubu-sdk-go) is libc: it provides the contract between the two.
Core resources
| Resource | Scope | Purpose |
|---|---|---|
| Story | Namespaced | Declarative workflow definition (DAG of steps, policies, schemas) |
| StoryRun | Namespaced | Concrete execution of a Story with resolved inputs/outputs |
| StepRun | Namespaced | Execution record for a single step within a StoryRun |
| Engram | Namespaced | Configured component instance |
| EngramTemplate | Cluster | Component definition with schemas and runtime contract |
| Impulse | Namespaced | Trigger that launches StoryRuns from external events |
| ImpulseTemplate | Cluster | Trigger definition |
| Transport | Cluster | Streaming transport provider configuration |
| TransportBinding | Namespaced | Runtime binding between a step and its transport connector |
Module map
| Module | Role |
|---|---|
tractatus | Protobuf service definitions for gRPC transport |
core | Shared contracts, templating engine, transport runtime |
bobrapet | Kubernetes operator: CRDs, controllers, webhooks |
bubu-sdk-go | Go SDK for building Engrams and Impulses |
bobravoz-grpc | gRPC streaming transport hub |
bubuilder | Web console and API server |
engrams/* | Individual Engram implementations |
impulses/* | Individual Impulse implementations |
Dependencies form a strict DAG — lower layers never import higher layers.
Delivery lifecycle
- Declare Stories, EngramTemplates, and Impulses in Git.
- Apply with your GitOps controller (Argo CD, Flux, or plain kubectl).
- Reconcile — Bobrapet creates runtimes, wires transports, schedules steps.
- Observe — StoryRuns emit OpenTelemetry traces, structured errors, and metrics.
Choose your path
I am an operator
I am building components
I want to contribute
Quick routes
- Getting started: Prerequisites, Quickstart
- Building components: Building Engrams & Impulses, Go SDK, Component Ecosystem
- Browse components: Engrams on GitHub, Impulses on GitHub
- Operating the platform: Operator Configuration, Lifecycle, Observability
- Streaming: Streaming Contract, Transport Settings, Lifecycle Hooks
- API design: CRD Design, Scoping, Errors
- Community: Get Involved, Roadmap