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.
2.0.2 - 2026-04-26
- use visible aliases
- don't do release builds in ci
2.0.1 - 2026-04-22
- small fix
- set envoke-env version to 2
2.0.0 - 2026-04-22
v2 has four breaking changes. Each section lists the v1 invocation on the left and its v2 equivalent on the right.
The flat envoke [FLAGS] [ENV] [-- CMD...] grammar is gone. Each mode is now
its own subcommand.
| v1 | v2 |
|---|---|
envoke prod |
envoke render prod (alias envoke r prod) |
envoke prod -- ./serve |
envoke exec prod -- ./serve (alias envoke x prod -- ./serve) |
envoke --schema |
envoke schema |
envoke --completions bash |
envoke completions bash |
envoke --list-environments |
envoke meta environments |
envoke --list-tags |
envoke meta tags |
envoke --list-overrides |
envoke meta overrides |
-o/--output, -f/--format, and --template are now render-only and error
under other subcommands. -c/--config, -q/--quiet, --no-parallel,
-t/--tag, --all-tags, and -O/--override remain global and may appear
before or after the subcommand. When repeatable flags (-t/--tag,
-O/--override) are split across the subcommand boundary, they follow
last-write-wins — pick one side.
Superseded by --format shell-export in v1.12.0 and now retired.
| v1 | v2 |
|---|---|
envoke prod --prepend-export |
envoke render prod --format shell-export |
| v1 | v2 |
|---|---|
envoke prod (default shell) |
envoke render prod (default dotenv) |
envoke prod --format shell |
envoke render prod --format shell-export |
The dotenv encoding was reworked for portability: literal strings round-trip
unchanged across dotenvy (mise, Rust), godotenv (Docker Compose),
python-dotenv, and node dotenv, and $ never expands at the consumer.
A new dotenv_escape minijinja filter is exposed in both output templates and
variable-source templates.
# v1
envs:
prod:
skip: true
# v2
envs:
prod: skipskip: false was never meaningful (it was rejected at runtime); the object
form is simply gone.
- (render) [breaking] drop shell format, portable dotenv encoding
- (resolve) bound external source fan-out with a worker pool
- sync internal doc comments and test fixtures with v2 CLI
- (cli) [breaking] drop --prepend-export
- (cli) [breaking] split into subcommands (render, exec, meta, schema, completions)
- (config) [breaking] Source::Skip becomes a unit variant
1.12.0 - 2026-04-21
- (cli) add
--formatwith curated output presets
1.11.0 - 2026-04-21
- (cli) add exec form
envoke <env> -- <cmd>
- polish README and sync CLAUDE.md for the exec form
1.10.1 - 2026-04-20
- promote envoke-env mise plugin in README
1.10.0 - 2026-04-20
- read target environment from
ENVOKE_ENVenv var
1.9.0 - 2026-04-16
- parallelize cmd/sh source resolution
- disable
format_stringsin rustfmt to prevent mangling help text
1.8.1 - 2026-04-15
- Merge pull request #41 from glennib/renovate/clap-4.x-lockfile
- Merge pull request #39 from glennib/claude/add-miette-diagnostics-KXtbn
1.8.0 - 2026-04-15
- enable
tojsonfilter in minijinja templates
- (deps) update rust crate clap_complete to v4.6.2
- (deps) update rust crate minijinja to v2.19.0
- ignore autogenerated release workflow in Renovate
- (deps) update actions/checkout action to v6
- upgrade dist
1.7.2 - 2026-03-07
- update Cargo.lock dependencies
1.7.1 - 2026-03-02
- Merge pull request #27 from glennib/renovate/clap-4.x-lockfile
- Merge pull request #28 from glennib/renovate/anyhow-1.x-lockfile
- Merge pull request #29 from glennib/renovate/minijinja-2.x-lockfile
- (deps) update rust crate chrono to v0.4.44
- (deps) update actions/cache action to v5
- Add renovate.json
1.7.0 - 2026-02-17
- expand template meta contexts with tags, overrides, and timestamp
1.6.0 - 2026-02-17
- add
metaobject to value source template context
1.5.0 - 2026-02-13
- add --completions flag for shell completion generation
1.4.1 - 2026-02-12
- add mise with github backend as the primary install method
1.4.0 - 2026-02-12
- unify template filters across variable and output templates
1.3.0 - 2026-02-12
- add --list-everything flag and make list flags mutually exclusive
1.2.0 - 2026-02-12
- add --all-tags CLI flag to include all tagged variables
1.1.1 - 2026-02-11
- improve documentation across codebase
1.1.0 - 2026-02-11
- add --list-environments, --list-overrides, --list-tags flags
- replace Source struct with enum and switch to serde_yml
1.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.
- Five source types:
literal(fixed values),cmd(run a command),sh(run a shell script),template(Jinja2 with variable interpolation), andskip(omit a variable from output). - Per-environment sources: define different sources per environment name
with a
defaultfallback. - Tag-based conditional inclusion: variables can carry
tags; untagged variables are always included, tagged variables require an explicit--tagmatch (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@generatedheader with invocation and timestamp. Variables are sorted alphabetically. - Custom template context: templates receive
variables(with value and description),v(flat name-to-value map), andmeta(timestamp, invocation, environment, config file path). - Filters:
urlencodein variable templates;shell_escapein output templates. - JSON Schema generation (
--schema): produces a JSON Schema forenvoke.yamlfor 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.
- add --quiet flag to suppress status messages
- add --version flag
- 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
- fmt
- update installation instructions in README
0.1.6 - 2026-02-11
- improve readme and cargo description
- remove deprecation from --prepend-export
- improve readme
- improve env examples
0.1.5 - 2026-02-11
- add template-based output rendering with --template flag
0.1.4 - 2026-02-11
- include @generated header in stdout output
- add --override flag for per-variable source overrides
- update CLAUDE.md and README.md
- add example file
0.1.3 - 2026-02-10
- tagged variables require explicit opt-in via --tag
0.1.2 - 2026-02-10
- add tag-based conditional inclusion of variables
- (ci) sort schema prior to writing/checking
0.1.1 - 2026-02-10
- add schema to repository
- add yaml-language-server schema location at github to readme
0.1.0 - 2026-02-10
- add envoke tool
- add CLAUDE.md
- add README.md
- repo scaffolding