Substitute Variables (subvars) is a small utility which provides a way to render any Go templates from command line recognizing the object being passed in and drawing attributes from the object to create wanted text. It is very useful for template driven configuration files.

It uses sprig v3 for template functions which provides additional functions apart from standard library.

subvars reads input from stdin and renders output to stdout. You can pipe the input or < direct it to subvars.

Options to render all files in a given folder and output to another folder is available via dir subcommand.


MacOS & Linux Homebrew

brew install kha7iq/tap/subvars

Linux Binary

export SUBVARS_VERSION="0.1.2"
wget -q https://github.com/kha7iq/subvars/releases/download/v${SUBVARS_VERSION}/subvars_Darwin_x86_64.tar.gz && \
tar -xf subvars_Darwin_x86_64.tar.gz && \
chmod +x subvars && \
sudo mv subvars /usr/local/bin/subvars


scoop bucket add subvars https://github.com/kha7iq/scoop-bucket.git
scoop install subvars

Alternatively you can head over to release pages and download the binary for windows & all other supported platforms.


Docker container is available you can pull the latest version or provide specific tag Checkout release page for available versions.

Running Container

docker pull khaliq/subvars:latest

docker run -it --rm khaliq/subvars:latest --help


❯ subvars --help

   subvars - Substitute environment variables defined as go templates.

   subvars [global options] command [command options] [arguments...]


   dir, d   Directory lets you render all files in a folder & subfolder.
   help, h  Shows a list of commands or help for one command

   --prefix value, --pr value    Match only variables with given prefix pattern [$SUBVARS_PREFIX]
   --missingkey value, -m value  Behavior for missing key when parsing variables. Available options 'invalid', 'error' or 'zero' (default: "invalid") [$SUBVARS_MISSINGKEY]
   --help, -h                    show help (default: false)
   --version, -v                 print the version (default: false)
echo "Hey! {{ .USER | upper }} your home folder is {{ .HOME }}" | subvars

subvars dir --input examples --out conf

Check Usage Documentation for detailed examples.


All the flags have corresponding environment variables associated with it. You can either provide the value with flags or export to a variable.

View the Configuration Page for more details.


Contributions, issues and feature requests are most welcome!
Feel free to check issues page. You can also take a look at the contributing guide.

Show your support

Give a
if you like this project!

Fork it

Make it better


This tool was inspired by the original python envtpl project and subfuzion/envtpl