.lazyenv/config.json
.lazyenv/config.json connects your repo to a store, a project, environments, and (optionally) provisioners.
It contains no secret values.
Schema
Section titled “Schema”Add this for editor autocomplete:
{ "$schema": "https://raw.githubusercontent.com/methodacting/lazyenv/main/schemas/lazyenv.schema.json"}Minimal Example
Section titled “Minimal Example”{ "$schema": "https://raw.githubusercontent.com/methodacting/lazyenv/main/schemas/lazyenv.schema.json", "schemaVersion": 1,
"store": "infisical", "projectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"environments": ["dev", "prod"], "defaultEnvironment": "dev",
"workspaceFolders": [ { "path": ".", "secretPath": "/", "envFile": ".env.example", "keys": ["DATABASE_URL", "JWT_SECRET"] } ]}Field reference
Section titled “Field reference”| Field | Purpose |
|---|---|
schemaVersion | Config schema version. |
store | Store backend: infisical, doppler, bitwarden, onepassword. |
stores | Optional named store entries for multi‑store configs. |
defaultStore | Optional name from stores[] used as default. |
projectId | Store project identifier (UUID/name depending on store). |
projectName | Optional label for humans. |
organizationId | Store org/workspace identifier (required by some stores). |
storeEnv | Optional mapping of store config env var names (for targets and CI). |
workspaceFolders | Monorepo mapping (one entry per .env.example). |
environments | Allowed environment names (for --env). |
defaultEnvironment | Default env when --env is omitted. |
provisioners | Named provisioners available to the wizard. |
provisionerRules | Key matching rules that select a provisioner and behavior. |
dev | Dev-only settings for port allocation and emitting derived vars into .env.local. |
targets | Optional fan-out targets (github and store). |
imports | Optional cross-project key imports (compose/read-through only). |
How it gets created
Section titled “How it gets created”lazyenv init writes .lazyenv/config.json by scanning for .env.example files.
Project .lazyenv/ directory
Section titled “Project .lazyenv/ directory”lazyenv keeps project-local metadata in .lazyenv/:
.lazyenv/config.json: project configuration.lazyenv/provisioners/*.jsonl: browser recordings used by browser provisioners
Browser provisioner shape (current)
Section titled “Browser provisioner shape (current)”Browser provisioners now use a shared browser block and an engine-specific steps block:
{ "kind": "browser", "name": "my-browser-provisioner", "label": "My Browser Provisioner", "engine": "stagehand", "browser": { "startUrl": "https://example.com", "userDataDir": "$XDG_STATE_HOME/lazyenv/chrome-profile", "headless": false }, "steps": { "type": "stagehand", "items": [] }}Playwright replay uses:
{ "engine": "playwright", "steps": { "type": "playwright-jsonl", "file": ".lazyenv/provisioners/recording.jsonl" }}Program Provisioner Inputs
Section titled “Program Provisioner Inputs”Program provisioners may define an input object. Each key is an input field consumed by the provisioner command.
Supported field shape:
{ "prompt": "Field label", "type": "string | select | multiselect", "secret": false, "env": "ENV_VAR_NAME", "default": "optional-default", "options": ["a", "b"], "optionsFrom": { "command": "node", "args": ["scripts/list-options.mjs", "--for", "{{accountId}}"], "cwd": "." }}Notes:
optionsFromis forselectandmultiselectfields.optionsFromcommand must print a JSON array (strings or{ value, label, description?, disabled? }).argscan reference previously resolved inputs using{{inputName}}.
See: Program Provisioners.