Thank you for helping improve BubuStack examples. These examples are the first thing new users see, so clarity and correctness matter.
-
Pick a pattern. Decide whether your example is
batch/(runs to completion) orrealtime/. Place it in the appropriate directory. -
Follow the existing structure. Every example directory must contain:
README.md- follows the standard format (see below)bootstrap.yaml- namespace and any shared setup resourcesengrams.yaml- Engram definitionsstory.yaml- the Story (workflow DAG)storyrun.yamlorimpulse.yaml- trigger mechanismsecrets.yaml.example- if API keys are needed (never commit real keys)
-
README format. All READMEs follow the same structure:
- Title + one-line description
- Demo asset section or preview that matches the example type
## What it demonstrates- bullet list with bold key concepts## Architecture- mermaid flowchart## Prerequisites- EngramTemplates, ImpulseTemplates, API keys## Quick start- numberedkubectl applycommands## Verify+## Cleanup## Under the Hood- numbered CRD-level explanation, ends with CRDs involved line
-
Provide demo assets.
- Batch examples normally use
demo.gif, recorded with VHS. - Shared batch tape sources live under
utils/tapes/and should be run from theexamples/repo root. - If a batch example keeps a local
demo.tape, treat it as maintainer scratch only. The shared tape underutils/tapes/is the published source of truth. - Realtime examples are video-first and should follow the shared asset convention documented in
realtime/DEMO-SCRIPT.md.
- Batch examples normally use
-
Update the catalog. Add your example to the tables in the root
README.md. -
Prefer managed runner identities for namespaced access only. If an example needs extra namespaced RBAC, use the built-in controller-managed runner identity plus
Engram.spec.overrides.rbac.rulesorImpulse.spec.execution.rbac.rules.If an Engram loads prompt, stdio, or other runtime config through
$bubuConfigMapRef, add an explicit namedconfigmaps/getrule inEngram.spec.overrides.rbac.rules. Runner pods do not get blanket ConfigMap read access by default. -
Do not extend implicit managed runner names with external bindings. If an example needs an out-of-band
ClusterRoleBinding, cluster-scoped watch, or any other external RBAC object, switch that example to an explicitServiceAccountand bind it directly. Do not rely on hidden naming conventions like<impulse-name>-impulse-runneror<storyrun-name>-engram-runnerin published examples.
- Fix bugs in manifests or READMEs directly.
- Keep changes focused - one example per PR unless the change is cross-cutting (e.g., fixing a consistent naming issue across all examples).
- Fork the repository and branch from
main. - Test your manifests against a real cluster (Kind is fine).
- If you added or changed an example, include updated demo assets that match the example type.
- Submit the pull request with a description of what changed and why.
BubuStack follows the Unix philosophy - do one thing and do it well and write programs to work together. Examples should reinforce this:
- One Engram, one job. An Engram fetches HTTP, summarizes text, or sends a notification - never all three. If your step does two things, split it into two Engrams.
- Compose via Stories. The Story wires Engrams together through the DAG. Each step reads inputs and writes output; the next step consumes it. Just like a Unix pipeline.
- Swap, don't rewrite. Want Slack instead of Discord? Change the Engram ref, not the Story. If replacing one component forces changes elsewhere, the boundary is wrong.
- Never commit real API keys or secrets.
secrets.yaml.exampleand any trackedsecrets.yamlfiles must contain placeholders only. - Don't add examples that require proprietary infrastructure. Examples should run on any Kubernetes cluster with BubuStack installed.
- Don't over-complicate. Each example should demonstrate one or two patterns clearly. If you need more, split into multiple examples.
Follow Conventional Commits:
feat(examples): add Redis caching pipeline examplefix(examples): correct storyRef in livekit-chat story.yamldocs(examples): update hello-world README architecture diagram
Participation is governed by the Contributor Covenant Code of Conduct. Report unacceptable behaviour to conduct@bubustack.com.