❯envpilot
featurespricing❯docsblogchangelogwishlistfaq
sign-inget-started
// documentation
Start Here
  • Quickstart
  • Core concepts
  • Architecture: the machine surfaces
Platform
  • Data model
  • Variables
  • Secret files
  • Shared Accounts
  • Secret Sharing Links
  • Diagrams in documentation
  • Sharing documentation
  • Roles & permissions
  • Requests & approvals
  • Rotation & expiry
  • Security
Plans & Limits
  • Plans & Limits
  • Rate limits
CLI
  • CLI overview
  • Authentication & accounts
  • Linking projects
  • Pull & push
  • Running commands with secrets
  • Single secrets
  • Requests
  • Secret files
  • Command reference
  • CLI in CI & troubleshooting
VS Code
  • VS Code overview
  • Linking & sync
  • Protection
  • Editor features
  • Commands
  • Settings
  • Troubleshooting
GitHub Action
  • GitHub Action overview
  • Inputs & outputs
  • Secret files in CI
  • Recipes
  • Action security
Docker
  • Docker overview
  • Build time
  • Runtime
  • Docker Compose
  • Docker reference
API Reference
  • API overview
  • API Quickstart
  • Authentication
  • Errors
  • Organization
  • Projects
  • Variables
  • Shared accounts
  • Secret files
MCP Server
  • MCP overview
  • MCP setup
  • Connecting a client
  • Tools
  • Agent requests
Web Dashboard
  • Dashboard overview
  • Working in a project
  • Organization administration
Integrations
  • Slack & Discord Notifications
Guides
  • How to Share Environment Variables Securely
  • Next.js Environment Variables Best Practices
  • Android keystore in CI
  • Giving an agent secrets safely

// resources

  • github
  • npm
  • vs code marketplace
Start HerePlatformPlans & LimitsCLIVS CodeGitHub ActionDockerAPI ReferenceMCP ServerWeb DashboardIntegrationsGuides
❯envpilot

Encrypted environment variables for teams that live in the terminal. No .env files, no secrets in Slack.

$npm install -g @envpilot/cli

// product

  • Features
  • Pricing
  • Changelog
  • Wishlist

// resources

  • Getting Started
  • CLI Reference
  • VS Code Extension
  • Security

// compare

  • vs Doppler
  • vs Infisical
  • vs .env files

// support

  • FAQ
  • Support
  • Contact
  • Docs
  • Status

// legal

  • Privacy Policy
  • Terms of Service

© 2026 Envpilot · Built at Syntax Lab Technology · Abdul Rafay

ENVPILOT

❯envpilot
featurespricing❯docsblogchangelogwishlistfaq
sign-inget-started
// documentation
Start Here
  • Quickstart
  • Core concepts
  • Architecture: the machine surfaces
Platform
  • Data model
  • Variables
  • Secret files
  • Shared Accounts
  • Secret Sharing Links
  • Diagrams in documentation
  • Sharing documentation
  • Roles & permissions
  • Requests & approvals
  • Rotation & expiry
  • Security
Plans & Limits
  • Plans & Limits
  • Rate limits
CLI
  • CLI overview
  • Authentication & accounts
  • Linking projects
  • Pull & push
  • Running commands with secrets
  • Single secrets
  • Requests
  • Secret files
  • Command reference
  • CLI in CI & troubleshooting
VS Code
  • VS Code overview
  • Linking & sync
  • Protection
  • Editor features
  • Commands
  • Settings
  • Troubleshooting
GitHub Action
  • GitHub Action overview
  • Inputs & outputs
  • Secret files in CI
  • Recipes
  • Action security
Docker
  • Docker overview
  • Build time
  • Runtime
  • Docker Compose
  • Docker reference
API Reference
  • API overview
  • API Quickstart
  • Authentication
  • Errors
  • Organization
  • Projects
  • Variables
  • Shared accounts
  • Secret files
MCP Server
  • MCP overview
  • MCP setup
  • Connecting a client
  • Tools
  • Agent requests
Web Dashboard
  • Dashboard overview
  • Working in a project
  • Organization administration
Integrations
  • Slack & Discord Notifications
Guides
  • How to Share Environment Variables Securely
  • Next.js Environment Variables Best Practices
  • Android keystore in CI
  • Giving an agent secrets safely

// resources

  • github
  • npm
  • vs code marketplace
Start HerePlatformPlans & LimitsCLIVS CodeGitHub ActionDockerAPI ReferenceMCP ServerWeb DashboardIntegrationsGuides
❯envpilot

Encrypted environment variables for teams that live in the terminal. No .env files, no secrets in Slack.

$npm install -g @envpilot/cli

// product

  • Features
  • Pricing
  • Changelog
  • Wishlist

// resources

  • Getting Started
  • CLI Reference
  • VS Code Extension
  • Security

// compare

  • vs Doppler
  • vs Infisical
  • vs .env files

// support

  • FAQ
  • Support
  • Contact
  • Docs
  • Status

// legal

  • Privacy Policy
  • Terms of Service

© 2026 Envpilot · Built at Syntax Lab Technology · Abdul Rafay

ENVPILOT

// documentation
Start Here
  • Quickstart
  • Core concepts
  • Architecture: the machine surfaces
Platform
  • Data model
  • Variables
  • Secret files
  • Shared Accounts
  • Secret Sharing Links
  • Diagrams in documentation
  • Sharing documentation
  • Roles & permissions
  • Requests & approvals
  • Rotation & expiry
  • Security
Plans & Limits
  • Plans & Limits
  • Rate limits
CLI
  • CLI overview
  • Authentication & accounts
  • Linking projects
  • Pull & push
  • Running commands with secrets
  • Single secrets
  • Requests
  • Secret files
  • Command reference
  • CLI in CI & troubleshooting
VS Code
  • VS Code overview
  • Linking & sync
  • Protection
  • Editor features
  • Commands
  • Settings
  • Troubleshooting
GitHub Action
  • GitHub Action overview
  • Inputs & outputs
  • Secret files in CI
  • Recipes
  • Action security
Docker
  • Docker overview
  • Build time
  • Runtime
  • Docker Compose
  • Docker reference
API Reference
  • API overview
  • API Quickstart
  • Authentication
  • Errors
  • Organization
  • Projects
  • Variables
  • Shared accounts
  • Secret files
MCP Server
  • MCP overview
  • MCP setup
  • Connecting a client
  • Tools
  • Agent requests
Web Dashboard
  • Dashboard overview
  • Working in a project
  • Organization administration
Integrations
  • Slack & Discord Notifications
Guides
  • How to Share Environment Variables Securely
  • Next.js Environment Variables Best Practices
  • Android keystore in CI
  • Giving an agent secrets safely

// resources

  • github
  • npm
  • vs code marketplace
Start HerePlatformPlans & LimitsCLIVS CodeGitHub ActionDockerAPI ReferenceMCP ServerWeb DashboardIntegrationsGuides
Docker overviewBuild timeRuntimeDocker ComposeDocker reference
docs/Docker
v1.0.0

Docker overview

One binary that drops into any image and brings your variables and secret files with it.

open in claudeopen in chatgptopen in cursor

Docker overview

ghcr.io/rafay99-epic/envpilot:1 is a single statically linked binary. Copy it into your image, or mount it during a build, and your project's variables and secret files are there.

No Node, no Python, no shell, no libc required. It runs in scratch, distroless, alpine (musl), python:3.12-slim, golang, eclipse-temurin — whatever base image you are already on.

Pick your case#

You wantRead
Secrets available while docker build runsBuild time
Secrets in the app when the container startsRuntime
A Compose stackDocker Compose
Every flag and exit codeReference

Sixty-second setup#

Create a key#

In Envpilot, go to Organization → Settings → API Keys and choose the Docker preset. Scope it to the project and environment you are deploying. It carries the variables resource; add files only if you need secret files, which is never granted by default.

Save the key somewhere your deploy process can reach. It starts with envpk_.

Wrap your entrypoint#

❯dockerfile
FROM python:3.12-slim
COPY --from=ghcr.io/rafay99-epic/envpilot:1 /envpilot /usr/local/bin/envpilot
COPY . /app
WORKDIR /app
 
ENTRYPOINT ["envpilot", "exec", "--"]
CMD ["python", "app.py"]

Pass the key at run time#

❯terminal
docker run \
  -v /etc/envpilot/token:/run/secrets/envpilot_token:ro \
  -e ENVPILOT_TOKEN_FILE=/run/secrets/envpilot_token \
  -e ENVPILOT_PROJECT=checkout-api \
  -e ENVPILOT_ENVIRONMENT=production \
  myapp:latest

Your variables are in the environment before python app.py starts, and nothing was written to disk.

How it gets in#

Two mechanisms, depending on when you need the secrets.

At build time the binary is mounted, so it never becomes a layer in your image and neither do the values:

❯dockerfile
RUN --mount=type=secret,id=envpilot_token \
    --mount=from=ghcr.io/rafay99-epic/envpilot:1,source=/envpilot,target=/envpilot \
    ENVPILOT_TOKEN_FILE=/run/secrets/envpilot_token \
    /envpilot exec --project checkout-api --env production -- npm ci

At runtime the binary is copied in, because it has to be present when the container starts:

❯dockerfile
COPY --from=ghcr.io/rafay99-epic/envpilot:1 /envpilot /usr/local/bin/envpilot
ENTRYPOINT ["envpilot", "exec", "--"]

Same binary, same flags, both cases.

The three commands#

CommandDoes
envpilot pullWrite variables as dotenv text. Stdout unless --out is set.
envpilot filesWrite secret files to their recorded paths at 0600/0400.
envpilot exec -- <cmd>Inject variables into <cmd> and run it. Nothing hits disk.

There is no login and no config file. The binary reads its inputs, makes one or two HTTPS calls, and does one thing.

Passing the key#

VariableNotes
ENVPILOT_TOKEN_FILEPath to a mounted secret. Preferred.
ENVPILOT_TOKENThe key inline.

ENVPILOT_TOKEN_FILE wins when both are set.

Prefer the file. An environment variable is readable through docker inspect and /proc/<pid>/environ by anyone with access to the daemon, while a Compose or BuildKit secret is a tmpfs mount that never touches the image.

There is deliberately no --token flag: a credential on a command line shows up in ps, in shell history, and in build logs.

Pinning#

❯terminal
ghcr.io/rafay99-epic/envpilot:1        # floating major, gets non-breaking updates
ghcr.io/rafay99-epic/envpilot:1.0.0   # exact, you control upgrades

Requirements#

Docker is its own surface, with its own plan feature (docker_image) and its own place on your API keys. It is not a mode of the REST API: your plan can include container delivery without including the public API, and turning one off never touches the other.

Create the key under Organization → Settings → API Keys and pick the Docker preset, or tick Docker under Advanced. A key minted only for the REST API or the GitHub Action will be refused here, on purpose.

Scope the key to the projects and environments it actually serves. One key per service keeps a leaked container credential from reaching everything else.

← github actionAction security
docker →Build time

// on this page

  • Pick your case
  • Sixty-second setup
  • Create a key
  • Wrap your entrypoint
  • Pass the key at run time
  • How it gets in
  • The three commands
  • Passing the key
  • Pinning
  • Requirements