Scaffolder templates and skeletons for the Intropy integration platform.
Status: experimental. Runs side by side with the docs repo's templates/ directory, which still holds all production templates. This folder currently contains a single hello-world template implemented for both engines, used to validate the dual-engine setup before any real templates migrate over.
- Nunjucks — used by Backstage scaffolder via the
intropy:workspace:templateaction. Lives underskeletons/nunjucks/. The Backstage template (hello-world/template.yaml) fetches its skeleton from../skeletons/nunjucks/hello-worldat render time. - Go
text/template+ Sprig — skeleton sources only, consumed by the Intropy CLI (separate codebase). Lives underskeletons/go/. The CLI manifest (hello-world/intropy.yaml) declares the template metadata, parameters, and (optionally) derived values; the skeleton dir holds pure content. No renderer ships here.
hello-world/
template.yaml Backstage scaffolder template
intropy.yaml Intropy CLI template manifest
skeletons/
nunjucks/hello-world/ Nunjucks skeleton (rendered by Backstage)
go/hello-world/ Go + Sprig skeleton (rendered by the CLI)
scripts/
render-nunjucks.py Local Nunjucks renderer for skeleton testing
sample-values/ Sample input JSON files
python scripts/render-nunjucks.py \
--skeleton skeletons/nunjucks/hello-world \
--values scripts/sample-values/hello-world.json \
--output /tmp/hello-outProduces /tmp/hello-out/robin.txt containing Hello, Robin!.
- Nunjucks skeletons use
${{values.x}}in filenames (substituted by Backstage'sintropy:workspace:templateaction). - Go skeletons use
__Token__placeholders. The CLI looks up.Values.token(camelCase) and applies casing based on the token's own casing:__Name__→ title (Robin),__name__→ verbatim/lower (robin),__NAME__→ upper (ROBIN). For anything beyond casing (e.g.nospace,replace), derive the string once underspec.valuesinintropy.yamland reference the derived value as a plain token.
The two engines therefore render to slightly different output filenames (robin.txt vs Robin.txt for the same input). That's by design — each engine follows its own conventions.
- Port the next real template (probably one block) once the dual-engine setup is proven.
CLAUDE.mddocuments the conventions used by the existingtemplates/tree; those will apply when real templates land here.