GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - rsgalloway/envstack: layered, structural environment management

BranchesTags
Open more actions menu

Latest commit

 

History

487 Commits
487 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
bin
bin
 
 
docs
docs
 
 
examples
examples
 
 
lib/envstack
lib/envstack
 
 
tests
tests
 
 
.flake8
.flake8
 
 
.gitignore
.gitignore
 
 
CHANGELOG.md
CHANGELOG.md
 
 
CITATION.cff
CITATION.cff
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
TRADEMARKS.md
TRADEMARKS.md
 
 
dist.json
dist.json
 
 
pyproject.toml
pyproject.toml
 
 

Repository files navigation

envstack logo

envstack

PyPI CI License

Environment variable composition and activation layer for tools and processes.

envstack is what .env files wish they were when they grew up.

Why envstack?

  • Hierarchical environment composition
  • Explicit precedence and overrides
  • Late-bound environment activation
  • Shared, policy-driven environments
  • Inspectable and deterministic behavior

envstack environments are layered explicitly. Stack files identify what is being configured, directories identify scope, and ordering determines precedence.

flowchart LR
  default[default.env] --> prod[prod.env]
  prod --> dev[dev.env]
  prod --> test[test.env]
Loading

Later layers override earlier ones within the resolved stack. Across directories, ENVPATH ordering defines precedence: earlier paths win when the same stack exists in multiple locations. Use envstack -t VAR to trace where a value comes from. envstack focuses on configuration and activation, not dependency resolution.

For the core concepts, see docs/index.md.

Installation

The easiest way to install:

pip install -U envstack

Quickstart

Start by getting the latest default.env example file:

curl -o \
default.env \
https://raw.githubusercontent.com/rsgalloway/envstack/master/examples/default/default.env

Running envstack will launch a new shell session with the resolved environment:

$ envstack
šŸš€ Launching envstack shell... (CTRL+D or "exit" to quit)
(prod) ~$ echo $ENV
prod

To inspect selected raw values, use envstack default -u PATH PYTHONPATH. Put stack names before -u, as with -r; omit variable names to show all values.

To inspect the unresolved environment (before variable expansion):

$ envstack -u
DEPLOY_ROOT=${ROOT}/${ENV}
ENV=prod
ENVPATH=${DEPLOY_ROOT}/env:${ENVPATH}
LOG_LEVEL=${LOG_LEVEL:=INFO}
PATH=${DEPLOY_ROOT}/bin:${PATH}
PS1=\[\e[32m\](${ENV})\[\e[0m\] \w\$ 
PYTHONPATH=${DEPLOY_ROOT}/lib/python:${PYTHONPATH}
ROOT=/mnt/pipe
STACK=default
$ envstack -r DEPLOY_ROOT
DEPLOY_ROOT=/mnt/pipe/prod

How envstack finds environments

envstack discovers environment definitions via the ENVPATH environment variable. ENVPATH is to envstack what PATH is to executables:

ENVPATH=/path/to/dev/env:/path/to/prod/env

ENVPATH ordering defines precedence. Earlier paths win when the same stack exists in multiple locations, so a stack found in /path/to/dev/env overrides the same stack found in /path/to/prod/env.

As a rule of thumb:

Files identify stacks; directories identify scope; ENVPATH defines precedence.

Converting .env files

Convert existing .env files to envstack by piping them into envstack:

cat .env | envstack --set -o out.env

Running Commands

To run any command line executable inside of an environment stack, where [COMMAND] is the command to run:

$ envstack [STACK] -- [COMMAND]

For example:

$ envstack -- echo {ENV}
prod

Example of injecting environment into a subprocess:

$ echo "console.log('Hello ' + process.env.ENV)" > index.js
$ node index.js 
Hello undefined
$ envstack -- node index.js 
Hello prod

Secrets and encryption

envstack supports optional encryption of environment values when writing environment files, allowing sensitive configuration to be safely stored, committed, or distributed.

Encryption protects values at rest and integrates with environment stacks and includes. envstack does not attempt to be a full secret management system.

See docs/secrets.md for details.

Documentation

  • Design & philosophy
  • Examples
  • Wrappers
  • Tool comparisons
  • Secrets and encryption
  • FAQ & gotchas
  • API docs

About

layered, structural environment management

envstack.dev

Topics

dotenvenvenvironment-variablesenvironmentspython-dotenvrezstackvfxvfx-pipelinevirtualization

Resources

Readme
License
Activity

Stars

12 stars

Watchers

1 watching

Forks

0 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800Ɨ600. No cookies required.