All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.2.1 - 2026-05-04
- Bash template kind for Bash-oriented scripts, bootstrap flows, maintenance tasks, and automation snippets (#1772)
- Python template kind for Python-oriented project scaffolds, automation helpers, packages, and service/tooling skeletons (#1773)
- Static template kind for technology-agnostic file and directory boilerplates (#1786)
- Named generation output paths via
generate --name/-n(#1783) - Exhaustive dependency matrix validation for rendering reachable template states, with optional kind-specific validators (#1780)
template.jsonruntime support with requiredfiles/directories, custom<< >>/<% %>/<# #>delimiters, and legacy-format rejection for0.2.0(#1768)- Remote generation destinations via
generate --remoteand--remote-path, including SSH host discovery and SCP upload flow (#1765) - Initial dedicated
swarmmodule and validation flow as groundwork for thecompose/swarmsplit in0.2.0(#1766)
- Default library migration now rewrites the built-in repository from
christianlempa/boilerplatestochristianlempa/boilerplates-library, with startup notices and legacy/librarypath fallback (#1762) - Variable definitions now use the
secrettype and nestedconfigmetadata for options, placeholders, sliders, and secret autogeneration across the runtime, schemas, and migrated template specs (#1767)
- Ansible templates can now contain literal downstream Jinja expressions like
{{ variable }}without boilerplate validation treating them as undeclared variables (#1775) - Pipx installs now include the required
clickdependency and CLI startup no longer fails with missing or inactive click contexts (#1795, #1797, #1796)
0.2.0-2 - 2026-04-23
- Release workflow now publishes a tag-matching hotfix source archive such as
boilerplates-0.2.0-2.tar.gzeven when Python packaging normalizes the internal post-release version.
- Clarified
AGENTS.mdguidance around the canonical template library location and required pre-release verification steps.
0.2.0-1 - 2026-04-23
- Interactive prompts now show and preserve effective defaults loaded from config, var-files, and CLI overrides.
generate --dry-runno longer prompts for local versus remote destinations when none are provided and now ends with a dry-run-specific success message.
0.1.2 - 2025-12-11
- Nix flake missing
email-validatordependency causing build failures (#1573)
0.1.0 - 2025-12-10
- Variable file support with
--var-fileflag (#1331) - Load variables from YAML file for non-interactive deployments - Variable override support for
showcommand with--varand--var-fileflags (#1421) - Preview variable overrides before generating - Terraform template support (#1422) - Manage Terraform configurations with schema 1.0
- Kubernetes template support (#1423) - Manage Kubernetes configurations with schema 1.0
- Helm template support (#1424) - Manage Helm charts with schema 1.0
- Ansible template support (#1426) - Manage Ansible playbooks with schema 1.0
- Packer template support (#1427) - Manage Packer templates with schema 1.0
- Alphabetically sorted commands in help output with grouped panels for better organization
- Separate help panels for "Template Commands" and "Configuration Commands"
- Compose Schema 1.2: Port variables (http, https, ssh, dns, dhcp, smtp) - Templates only prompt for ports they use
- Compose Schema 1.2: Dedicated
volumesection for storage configuration (replaces swarm_volume_* variables) - Compose Schema 1.2:
resourcessection for CPU and memory limits - Compose Schema 1.2:
traefik_domainvariable for base domain configuration (#1362) - Set once, use across all services - Compose Schema 1.2:
database_hostnow requiresdatabase_external=true - Compose Schema 1.2:
email_encryptionreplacesemail_tlsandemail_sslwith options: none, ssl, tls - Markdown formatting support for template descriptions and next steps (#1471)
- Output directory flag
--output/-oforgeneratecommand (#1534) - Replaces positional directory argument - Variable property
autogenerated_lengthto specify custom length for auto-generated values (default: 32 characters) - Nerd Font icon support with shortcode replacement in template descriptions - Rich visual feedback using standardized icon system
- Schema is now managed in JSON for better standardization and clarity (#1555)
- Compose Schema 1.2: Removed
traefik_entrypointandtraefik_tls_entrypointvariables - Removed Jinja2
| default()filter extraction and merging (#1410) - All defaults must now be defined in template/module specs - Refactored code quality (#1364) for all core modules from single files to package structure with specific submodules
- Improved debug logging to capture module discovery and registration during initialization
- Enhanced debug logging for better troubleshooting
- Simplified dry-run output to show only essential information (files, sizes, status)
- Traefik template now uses module spec variable
authentik_traefik_middlewareinstead of template-specifictraefik_authentik_middleware_name validatecommand now accepts template ID as positional argument (e.g.,compose validate netbox) - Consistent with archetypes command pattern- Sections can't be required anymore, only variables can be required - Simplifies logic and improves usability
- Variables are now optional by default - only explicitly marked
required: truevariables are required, display shows(*)indicator instead of(required)
- Positional directory argument for
generatecommand (#1534) - Use--output/-oflag instead (will be removed in v0.2.0)
- CLI --var flag now properly converts boolean and numeric strings to appropriate Python types (#1522)
- Empty template files are no longer created during generation (#1518)
- Enhanced user confirmation flow for template generation (#1428)
0.0.7 - 2025-10-28
- Multiple Library Support (#1314) for git and local libraries
- Multi-Schema Module Support and Backward Compatibility (Schema-1.0)
- Schema-1.1
network_modewith options: bridge, host, macvlan - Schema-1.1
swarmmodule support - Variable-level and Section-level depenendencies
needswith multiple values support - Optional Variables
optional: trueto allow empty/None values - PEP 8 formatting alignment
- CLI variable dependency validation - raises error when CLI-provided variables have unsatisfied dependencies
- Support for required variables independent of section state (#1355)
- Variables can now be marked with
required: truein template specs - Required variables are always prompted, validated, and included in rendering
- Display shows yellow
(required)indicator for required variables - Required variables from disabled sections are still collected and available
- Variables can now be marked with
- Schema-1.1 Unified Docker Swarm Placement (#1359) - Simplified swarm placement constraints into a single variable
- Refactored compose module from single file to package structure
- Dependency validation moved to
validate_all()for better error reporting - Schema-1.1 removed
network_enabled,ports_enabledanddatabase_enabledtoggles (no longer optional) - Improved error handling and display output consistency
- Updated dependency PyYAML to v6.0.3 (Python 3.14 compatibility)
- Updated dependency rich to v14.2.0 (Python 3.14 compatibility)
- Pinned all dependencies to specific tested versions for consistent installations
- Required sections now ignore toggle and are always enabled
- Module spec loading based on correct template schema version
- Interactive prompts now skip all variables (including required) when parent section is disabled
- Absolute paths without leading slash treated as relative paths in generate command (#1357)
- Paths like
Users/xcad/Projects/testare now correctly normalized to/Users/xcad/Projects/test - Supports common Unix/Linux root directories: Users/, home/, usr/, opt/, var/, tmp/
- Paths like
- Repository fetch fails when library directory already exists (#1279)
- Critical: Python 3.9 compatibility - removed Context type annotations causing RuntimeError
- Context access now uses click.get_current_context() for better compatibility
0.0.6 - 2025-10-14
- Pinned all dependencies to specific tested versions for consistent installations
- typer==0.19.2
- rich==14.1.0
- PyYAML==6.0.2
- python-frontmatter==1.1.0
- Jinja2==3.1.6
- Critical: Python 3.9 compatibility - removed Context type annotations causing RuntimeError
- Context access now uses click.get_current_context() for better compatibility
- Added tests directory to .gitignore
0.0.4 - 2025-01-XX
Initial public release with core CLI functionality.