Manifest
Overview
Section titled “Overview”Boilerplate can produce a manifest file that records every file it generated during a run, along with SHA256 checksums for each file. This is useful for:
- Auditing: knowing exactly which files were created by a template
- Drift detection: comparing checksums to see if generated files were modified after the fact
- CI/CD pipelines: programmatically consuming the list of generated files in downstream steps
Enabling the Manifest
Section titled “Enabling the Manifest”Use the --manifest flag to write a manifest to the output directory:
boilerplate \ --template-url ./templates/service \ --output-folder ./output \ --non-interactive \ --manifestThis creates boilerplate-manifest.yaml inside the output folder.
To write the manifest to a custom path, use --manifest-file:
boilerplate \ --template-url ./templates/service \ --output-folder ./output \ --non-interactive \ --manifest-file ./reports/manifest.yaml--manifest-file implies --manifest, so you don’t need to pass both.
Format Auto-Detection
Section titled “Format Auto-Detection”The manifest format is determined by the file extension:
| Extension | Format |
|---|---|
.json | JSON |
.yaml, .yml (or anything else) | YAML |
Schema
Section titled “Schema”The manifest contains the following fields:
| Field | Description |
|---|---|
SchemaVersion | URL pointing to the Manifest Schema for the manifest format |
Timestamp | UTC timestamp of the generation run (RFC 3339) |
TemplateURL | The --template-url value used for this run |
BoilerplateVersion | Version of boilerplate that produced the output |
SourceChecksum | Checksum of the template source. For git sources: git-sha1:<commit> or git-sha256:<commit>. For local sources: sha256:<hex> |
OutputDir | The --output-folder value used for this run |
Variables | User-defined template variables used during generation (builtin variables are excluded) |
Dependencies | Array of dependencies that were processed (or skipped) during the run |
Dependencies[].Name | Name of the dependency |
Dependencies[].TemplateURL | Resolved template URL for the dependency |
Dependencies[].OutputFolder | Resolved output folder for the dependency |
Dependencies[].SourceChecksum | Checksum of the dependency’s template source |
Dependencies[].Skip | Rendered skip expression (present even for skipped dependencies) |
Dependencies[].ForEach | List of for_each values used for this entry |
Dependencies[].ForEachReference | The for_each_reference variable name, if set |
Dependencies[].VarFiles | Variable files specified on the dependency |
Dependencies[].Variables | Resolved variable values passed to the dependency |
Dependencies[].Files | Array of files generated by this dependency (with checksums) |
Dependencies[].Files[].Path | Path of the generated file, relative to the dependency’s output directory |
Dependencies[].Files[].Checksum | Checksum of the file contents, prefixed with the hash algorithm (e.g. sha256:a1b2c3…) |
Dependencies[].DontInheritVariables | Whether the dependency opted out of inheriting parent variables |
Files | Array of generated files |
Files[].Path | Path of the generated file, relative to the output directory |
Files[].Checksum | Checksum of the file contents, prefixed with the hash algorithm (e.g. sha256:a1b2c3…) |
YAML example
Section titled “YAML example”SchemaVersion: "https://boilerplate.gruntwork.io/schemas/manifest/v1/schema.json"Timestamp: "2026-02-24T12:00:00Z"TemplateURL: ./templates/serviceBoilerplateVersion: v0.6.0SourceChecksum: "sha256:a1b2c3d4e5f6..."OutputDir: ./outputVariables: ServiceName: my-service Port: 8080Dependencies: - Name: vpc TemplateURL: ./modules/vpc OutputFolder: ./output/vpc Variables: cidr: "10.0.0.0/16" Files: - Path: main.tf Checksum: "sha256:b2c3d4e5f6a1..." - Name: logging TemplateURL: ./modules/logging OutputFolder: ./output/logging Skip: "true"Files: - Path: main.go Checksum: "sha256:a1b2c3d4e5f6..." - Path: README.md Checksum: "sha256:f6e5d4c3b2a1..."JSON example
Section titled “JSON example”{ "SchemaVersion": "https://boilerplate.gruntwork.io/schemas/manifest/v1/schema.json", "Timestamp": "2026-02-24T12:00:00Z", "TemplateURL": "./templates/service", "BoilerplateVersion": "v0.6.0", "SourceChecksum": "sha256:a1b2c3d4e5f6...", "OutputDir": "./output", "Variables": { "ServiceName": "my-service", "Port": 8080 }, "Dependencies": [ { "Name": "vpc", "TemplateURL": "./modules/vpc", "OutputFolder": "./output/vpc", "Variables": { "cidr": "10.0.0.0/16" }, "Files": [ { "Path": "main.tf", "Checksum": "sha256:b2c3d4e5f6a1..." } ] }, { "Name": "logging", "TemplateURL": "./modules/logging", "OutputFolder": "./output/logging", "Skip": "true" } ], "Files": [ { "Path": "main.go", "Checksum": "sha256:a1b2c3d4e5f6..." }, { "Path": "README.md", "Checksum": "sha256:f6e5d4c3b2a1..." } ]}Manifest Schema
Section titled “Manifest Schema”Boilerplate publishes a formal JSON Schema for the manifest format. The SchemaVersion field in every generated manifest contains the schema URL, making it easy to identify which schema version was used and to fetch the schema for validation.
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://boilerplate.gruntwork.io/schemas/manifest/v1/schema.json", "properties": { "Variables": { "type": "object", "description": "User-defined template variables used during generation" }, "SchemaVersion": { "type": "string" }, "Timestamp": { "type": "string" }, "TemplateURL": { "type": "string" }, "BoilerplateVersion": { "type": "string" }, "SourceChecksum": { "type": "string", "pattern": "^(git-sha1|git-sha256|sha256):.+$", "description": "Checksum of the template source. For git sources: git-sha1:{commit} or git-sha256:{commit}. For local sources: sha256:{hex}." }, "OutputDir": { "type": "string" }, "Dependencies": { "items": { "properties": { "Variables": { "type": "object" }, "Name": { "type": "string" }, "TemplateURL": { "type": "string" }, "OutputFolder": { "type": "string" }, "SourceChecksum": { "type": "string" }, "Skip": { "type": "string" }, "ForEachReference": { "type": "string" }, "Files": { "items": { "properties": { "Path": { "type": "string" }, "Checksum": { "type": "string", "pattern": "^[a-z0-9]+:.+$", "description": "Hash of the file contents, prefixed with the algorithm (e.g. sha256:abcdef…)" } }, "additionalProperties": false, "type": "object", "required": [ "Path", "Checksum" ] }, "type": "array" }, "VarFiles": { "items": { "type": "string" }, "type": "array" }, "ForEach": { "items": { "type": "string" }, "type": "array" }, "DontInheritVariables": { "type": "boolean" } }, "additionalProperties": false, "type": "object", "required": [ "Name", "TemplateURL", "OutputFolder" ] }, "type": "array" }, "Files": { "items": { "properties": { "Path": { "type": "string" }, "Checksum": { "type": "string", "pattern": "^[a-z0-9]+:.+$", "description": "Hash of the file contents, prefixed with the algorithm (e.g. sha256:abcdef…)" } }, "additionalProperties": false, "type": "object", "required": [ "Path", "Checksum" ] }, "type": "array" } }, "additionalProperties": false, "type": "object", "required": [ "Variables", "SchemaVersion", "Timestamp", "TemplateURL", "BoilerplateVersion", "SourceChecksum", "OutputDir", "Dependencies", "Files" ], "title": "Boilerplate Manifest Schema", "description": "Schema for boilerplate generation manifest"}Each run overwrites the previous manifest, so it always reflects the most recent generation. If you need to preserve history across runs, track the manifest in version control (e.g. Git).
Versioning
Section titled “Versioning”The manifest schema is versioned via the URL path (e.g. .../v1/schema.json). Every generated manifest records the schema version it conforms to in the SchemaVersion field, so consumers can detect which version they are working with.
A new schema version is published whenever the schema changes. Breaking changes (removing fields, changing types, etc.) are avoided when possible, but when necessary they will accompany a breaking release of Boilerplate itself: minor releases before 1.0, and major releases afterwards.