# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.0.0](https://github.com/glennib/envoke/compare/v0.1.6...v1.0.0) - 2026-02-11
First stable release. Envoke resolves variables from a declarative YAML
configuration file. The default output is shell-safe environment variable
assignments, but custom output templates are also supported.
### Features
- **Five source types**: `literal` (fixed values), `cmd` (run a command),
`sh` (run a shell script), `template` (Jinja2 with variable interpolation),
and `skip` (omit a variable from output).
- **Per-environment sources**: define different sources per environment name
with a `default` fallback.
- **Tag-based conditional inclusion**: variables can carry `tags`; untagged
variables are always included, tagged variables require an explicit `--tag`
match (OR semantics).
- **Named overrides** (`--override`): per-variable alternative source sets
with a 4-level fallback chain (override env, override default, base env,
base default). Multiple overrides allowed on disjoint variables; conflicting
overrides on the same variable are rejected.
- **Dependency resolution**: templates reference other variables via
`{{ VAR }}`; dependencies are topologically sorted (Kahn's algorithm) and
cycles are detected with full chain reporting before any execution.
- **Output formats**: built-in default (`VAR='value'`), built-in export
(`export VAR='value'` via `--prepend-export`), or a custom Jinja2 template
file (`--template`). Output includes an `@generated` header with invocation
and timestamp. Variables are sorted alphabetically.
- **Custom template context**: templates receive `variables` (with value and
description), `v` (flat name-to-value map), and `meta` (timestamp,
invocation, environment, config file path).
- **Filters**: `urlencode` in variable templates; `shell_escape` in output
templates.
- **JSON Schema generation** (`--schema`): produces a JSON Schema for
`envoke.yaml` for editor autocompletion and validation.
- **Shell safety**: values are single-quoted with embedded quotes escaped.
- **Comprehensive error reporting**: all errors collected and reported
together (not fail-fast), with 8 structured error kinds including cycle
chains, conflicting overrides, unknown references, and command failures.
- **CLI flags**: `-c` (config path), `-o` (output file), `-t/--tag`,
`-O/--override`, `--prepend-export`, `--template`, `--schema`,
`-q/--quiet`, `--version`.
### Changes since 0.1.6
#### Added
- add --quiet flag to suppress status messages
- add --version flag
#### Fixed
- update schema file
- make --schema respect -o flag
- include environment in cycle and reference errors
- reject empty cmd source
- use actual config path in parse error message
- correct template doc comment and regenerate schema
#### Other
- fmt
- update installation instructions in README
## [0.1.6](https://github.com/glennib/envoke/compare/v0.1.5...v0.1.6) - 2026-02-11
### Other
- improve readme and cargo description
- remove deprecation from --prepend-export
- improve readme
- improve env examples
## [0.1.5](https://github.com/glennib/envoke/compare/v0.1.4...v0.1.5) - 2026-02-11
### Added
- add template-based output rendering with --template flag
## [0.1.4](https://github.com/glennib/envoke/compare/v0.1.3...v0.1.4) - 2026-02-11
### Added
- include @generated header in stdout output
- add --override flag for per-variable source overrides
### Other
- update CLAUDE.md and README.md
- add example file
## [0.1.3](https://github.com/glennib/envoke/compare/v0.1.2...v0.1.3) - 2026-02-10
### Fixed
- tagged variables require explicit opt-in via --tag
## [0.1.2](https://github.com/glennib/envoke/compare/v0.1.1...v0.1.2) - 2026-02-10
### Added
- add tag-based conditional inclusion of variables
### Fixed
- *(ci)* sort schema prior to writing/checking
## [0.1.1](https://github.com/glennib/envoke/compare/v0.1.0...v0.1.1) - 2026-02-10
### Added
- add schema to repository
### Other
- add yaml-language-server schema location at github to readme
## [0.1.0](https://github.com/glennib/envoke/releases/tag/v0.1.0) - 2026-02-10
### Added
- add envoke tool
### Other
- add CLAUDE.md
- add README.md
- repo scaffolding