CUE Kind Definition
Common Workflows
Adding a new kind
If generate fails with CUE errors:
- Read the error — CUE prints the offending file + line + which constraint failed
- Common causes: missing required field, type mismatch (e.g.
stringfield assigned anint), unresolved reference between version files - Fix the
.cuesource, re-rungrafana-app-sdk generate. Never edit files underpkg/generated/— they're overwritten on every run.
Adding a new version to an existing kind
Breaking changes (removing fields, changing types, adding required fields) must go into a new version — never modify a stable version (v1, v2) in place.
Kind file structure
The CLI produces a flat layout under kinds/:
For multi-version kinds, additional version files sit alongside (mykind_v1.cue, etc.). For very large kind sets (10+ kinds), consider the per-kind subdirectory layout — full kind anatomy reference in references/kind-layout.md [blocked].
CUE Kind Anatomy
Three layers per kind:
1. Common kind metadata
2. Per-version schema
3. App manifest
Codegen configuration
Control what gets generated per kind per version:
Disabling go for frontend-only apps avoids unused Go code. Disabling ts for backend-only resources reduces bundle size. Both default to true when omitted.
References
references/kind-layout.md[blocked] — full common-metadata field reference + app manifest fields + per-kind subdirectory layoutreferences/schema-types.md[blocked] — CUE schema field types (basic types, constraints, regex, enums, maps, lists) +#-prefixed named type definitionsreferences/custom-routes.md[blocked] — kind-level + version-level custom routes + handler registration inapp.go


