Precedence
Settings are applied in this order (highest to lowest priority):
- Command-line flags — Always win
- Environment variables — Override config file
- Config file (
epack.yaml) — Project-level settings
- Defaults — Built-in defaults
Environment Variables
Signing
| Variable |
Description |
Default |
EPACK_OIDC_TOKEN |
OIDC token for keyless signing in CI. Required for non-interactive environments. |
— |
EPACK_SIGNING_KEY |
Path to a PEM private key a run signs in to the credential broker with when the runner has no identity of its own. A GitHub Actions OIDC token or a GitLab ID token is used first. epack run --key sets it to the key the run signs with. Used with EPACK_PIPELINE_ID. |
— |
Runs (Full Edition)
| Variable |
Description |
Default |
EPACK_CHECK |
Set to 1 to make epack run a check: it signs in, verifies the lock, secrets, credentials, and publishers, reports the result, and collects nothing. Same as --check. |
— |
EPACK_PIPELINE_ID |
The configuration a run belongs to. A run that signs in with EPACK_SIGNING_KEY names its configuration with it, and stored secrets are scoped by it. A job with no folder that runs a configuration by name signs in for it with the job's GitLab ID token or the key. |
— |
EPACK_TRUSTED_PUBLISHERS |
Comma-separated GitHub owners trusted for this process. A configuration fetched from a remote may only run collectors, tools, and remote adapters from trusted publishers. Same as --trust-publisher. |
— |
Output & Logging
| Variable |
Description |
Default |
NO_COLOR |
Disable colored output. Set to any non-empty value. |
— |
EPACK_NO_UPDATE_NOTIFIER |
Turn off the daily check for a newer epack release. Set to any non-empty value. The check runs only at a terminal and never in CI mode. |
— |
For more detail, pass -v or --verbose; for machine-readable output, pass --json. See Global CLI Flags.
Paths & Caching
| Path |
Contents |
~/.epack/update-check.json |
When epack last checked for a newer release and what it found, readable only by you |
~/.epack/config.yaml |
Your user settings: the default remote and the publishers you trust |
~/.epack/keys/ |
Signing keys from epack key create, readable only by you |
~/.epack/remotes.lock, ~/.epack/utilities.lock |
Pins for the remote adapters and utilities installed for you |
.epack/ in a project |
The project's installed collectors, tools, and remotes, and its hooks |
$XDG_CACHE_HOME/epack |
The component catalog cache. Defaults to ~/.cache/epack, or %LOCALAPPDATA%\epack\cache on Windows |
Collectors (Full Edition)
| Variable |
Description |
Default |
GITHUB_TOKEN |
GitHub API token for the GitHub collector (classic PAT or short-lived installation token). |
— |
EPACK_PARALLEL |
Maximum concurrent collector runs for collect and collector run: 0 picks automatically, 1 runs them one at a time. Same as --parallel. |
0 |
EPACK_COLLECTOR_OUTPUT_DIR |
Runner-provided staging directory for collector file artifacts. |
Set per collector run |
Configuration File
epack looks for epack.yaml in the current directory or any parent directory.
Minimal example
Full example (Full Edition)
stream: myorg/prod
output: evidence.epack
platforms:
- linux/amd64
- darwin/arm64
credential_sets:
github_repo: credset_abc123
locktivity_push: credset_def456
collectors:
github:
source: locktivity/epack-collector-github@^0.2.0
config:
organization: myorg
include_patterns:
- api-*
- web-*
credentials:
- github_repo
aws:
source: locktivity/epack-collector-aws@^0.2.0
config:
level: audit
regions:
- us-east-1
- us-west-2
secrets:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- name: AWS_REGION
optional: true
tools:
ask:
source: locktivity/epack-tool-ask@v1
secrets:
- OPENAI_API_KEY
validate:
source: locktivity/epack-tool-validate@v1
config:
profile: profiles/soc2-basic.yaml
overlays:
- profiles/overlays/production.yaml
profiles:
- source: locktivity/soc2-basic@v1
- path: profiles/custom-policy.yaml
overlays:
- path: profiles/overlays/production.yaml
mappings:
- path: mappings/control-mappings.yaml
remotes:
locktivity:
source: locktivity/epack-remote-locktivity@^0.2.0
insecure_endpoint: https://registry.example.com
auth:
insecure_endpoint: https://auth.example.com
target:
workspace: myorg
environment: prod
credentials:
- locktivity_push
release:
labels: [monthly, soc2]
source:
git:
sha_env: GITHUB_SHA
repo_env: GITHUB_REPOSITORY
ci:
run_url_env: GITHUB_RUN_URL
runs:
sync: true
environments:
staging:
remotes:
locktivity:
target:
environment: staging
Custom remote endpoints are declared with insecure_endpoint (and optionally
auth.insecure_endpoint). The insecure_ prefix serves as explicit
acknowledgment. epack validates these values, blocks them in strict production mode,
and passes them to the adapter as trusted explicit env. An adapter installed for the user, outside a
project, takes the same overrides from EPACK_INSECURE_REMOTE_ENDPOINT and
EPACK_INSECURE_REMOTE_AUTH_ENDPOINT.
Profiles Configuration
Profiles define compliance requirements for validation. They can be sourced from the registry
or from local files. Overlays customize profiles for specific environments.
profiles:
- source: locktivity/soc2-basic@v1
profiles:
- path: profiles/custom-policy.yaml
overlays:
- path: profiles/overlays/production.yaml
- path: profiles/overlays/us-region.yaml
Profile fields
| Field |
Type |
Description |
source |
string |
Registry reference (owner/repo@version). Mutually exclusive with path. |
path |
string |
Local file path relative to project root. Mutually exclusive with source. |
Overlay fields
| Field |
Type |
Description |
source |
string |
Registry reference (owner/repo@version). Mutually exclusive with path. |
path |
string |
Local file path relative to project root. Mutually exclusive with source. |
Note: Profile and overlay digests are tracked in the manifest for reproducibility.
Registry-sourced profiles are version-locked in epack.lock.
Control Mappings Configuration
Control mappings record which evidence in a pack supports which profile requirement
(evidencepack/control-mapping@v1). They are publisher assertions: content problems
surface as build warnings, never failures, and mappings never affect verification or validation results.
mappings:
- path: mappings/control-mappings.yaml
Mapping fields
| Field |
Type |
Description |
path |
string |
Local file path relative to project root. Mappings describe this publisher's evidence and are never fetched from a registry. |
Note: Each mapping file is locked by digest in epack.lock.yaml,
verified under --frozen, and sealed into built packs as
artifacts/<name>.json with YAML input emitted as deterministic JSON.
Remotes Configuration
Remotes define destinations where packs can be pushed. Each remote uses an adapter that
implements the Remote Adapter Protocol. See Remotes concept
for details.
remotes:
locktivity:
source: locktivity/epack-remote-locktivity@^0.2.0
target:
workspace: myorg
environment: prod
insecure_endpoint: https://registry.example.com
auth:
mode: browser
profile: default
verify:
pack: true
strict: true
release:
labels: [monthly, soc2]
notes: "Monthly compliance release"
source:
git:
sha_env: GITHUB_SHA
repo_env: GITHUB_REPOSITORY
ci:
run_url_env: GITHUB_RUN_URL
runs:
sync: true
paths:
- tools/**/result.json
- runs/**/result.json
require_success: false
s3:
binary: /usr/local/bin/epack-remote-s3
adapter: s3
target:
bucket: my-evidence-bucket
prefix: packs/
runs:
sync: false
Remote fields
| Field |
Type |
Description |
source |
string |
Source reference for managed adapter (owner/repo@version) |
binary |
string |
Path to external adapter binary |
adapter |
string |
Adapter name (inferred from source if not set) |
target |
object |
Target workspace/environment within remote |
endpoint |
string |
Optional endpoint URL override |
auth |
object |
Optional adapter-specific authentication preferences for manual flows |
secrets |
[]string | object |
Environment variables to pass through to the adapter. A bare name is required: epack run --check reports it when unset. {name: X, optional: true} is passed through only when set |
credentials |
[]string |
Managed credential refs that resolve through top-level credential_sets |
verify |
object |
Pre-push verification (pack, strict) |
release |
object |
Release metadata (labels, notes, source) |
runs |
object |
Run sync settings (sync, paths, require_success) |
Common adapter auth modes
Authentication modes are adapter-defined. These are common examples reported by current adapters:
| Mode |
Description |
Use Case |
access_token |
Pre-resolved bearer token injected by the runtime |
Managed runners and the Locktivity broker |
browser |
Browser sign-in with epack remote login; the browser returns to epack on this machine |
Local development |
client_credentials |
Client ID and secret supplied directly to the adapter |
Manual CI or service-to-service access |
Environments
Use the environments: section to override settings for different deployment environments.
Overrides are applied with --env <name> flag.
remotes:
locktivity:
source: locktivity/epack-remote-locktivity@^0.2.0
target:
workspace: myorg
environment: prod
environments:
staging:
remotes:
locktivity:
target:
environment: staging
release:
labels: [staging]
prod:
remotes:
locktivity:
release:
labels: [prod, soc2]
epack push locktivity evidence.epack --env staging
epack push locktivity evidence.epack --env prod
Configuration Schema
Top-level fields
| Field |
Type |
Description |
stream |
string required |
Evidence stream identifier (e.g., myorg/prod) |
output |
string |
Output pack path (e.g., evidence.epack) |
platforms |
[]string |
Target platforms for lockfile (e.g., linux/amd64) |
credential_sets |
map[string]string |
Logical credential refs mapped to opaque broker-issued IDs |
collectors |
map[string]Collector |
Collector definitions (Full Edition) |
tools |
map[string]Tool |
Tool definitions (Full Edition) |
remotes |
map[string]Remote |
Remote registry definitions (Full Edition) |
environments |
map[string]Environment |
Per-environment config overrides (Full Edition) |
Collector/Tool fields
| Field |
Type |
Description |
source |
string required |
Source reference (e.g., owner/repo@version) |
config |
map[string]any |
Collector/tool-specific configuration |
secrets |
[]string | object |
Environment variables to pass as secrets. A bare name is required: epack run --check reports it when not ready. {name: X, optional: true} is passed through only when set. Values come from the environment first, then from the keychain a laptop filled with epack secret set |
credentials |
[]string |
Managed credential refs that resolve through top-level credential_sets |
Secrets vs. credentials: Use secrets for direct environment pass-through.
Use credentials when a trusted runtime or broker resolves short-lived env bundles for the component.
Global CLI Flags
These flags apply to all commands:
| Flag |
Description |
-q, --quiet |
Suppress non-essential output |
--json |
Output in JSON format |
--no-color |
Disable colored output |
-v, --verbose |
Enable verbose output |
--no-redact |
Disable redaction of secrets in errors/logs |
--ci |
CI mode: disable spinners, add timestamps (auto-detected from CI, GITHUB_ACTIONS, GITLAB_CI, CODEBUILD_BUILD_ID, JENKINS_URL, BUILDKITE, or TF_BUILD env) |
-h, --help |
Show help |
epack version |
Show version information |
See Also