The source of every template koolbase create and koolbase add can install.
Each template is a self-contained source package: authored metadata in
template.yaml, renderable files under src/. The publishing pipeline
validates that metadata, builds an immutable signed bundle, and generates
generated/catalog.json — the catalog is never edited by hand.
flutter/<template>/template.yaml authored metadata
flutter/<template>/src/ the tree rendered into a project
flutter/<template>/tests/ generation tests
schemas/template.schema.json what template.yaml must satisfy
scripts/ validate and publish
generated/catalog.json produced output, committed for history
Files ending .tmpl are rendered with Go templates using {% %} delimiters
— generated files are Dart, and Dart has braces everywhere. The suffix is
stripped on output. Files without it are copied byte-for-byte, which is how a
file that legitimately contains {% or a binary asset ships safely.
Paths render too, so a directory can be named {% .AppName %}.
A published bundle is never replaced. flutter/chat/1.2.0 is the same bytes
forever; the catalog's "current version" is only a pointer. Changing a
template means incrementing its version — publishing different contents under
an existing version is refused.
Templates are free, permanently, and the generated code is yours: edit it, restructure it, or throw the architecture away. Nothing tracks or upgrades it.