Configuration
ev.yaml
ev.yaml is created by ev init at the root of your git repository and should be checked into version control. It defines the project boundary and provides default context so you don't have to pass flags on every command.
Minimal Config
That is all you need for a single-app project. ev treats the repo root as the one app.
All Fields
| Field | Type | Required | Description |
|---|---|---|---|
project | string | Yes | Project ID assigned by the ev server during ev init. |
name | string | Yes | Display name for the project. |
default_env | string | No | Environment used when no environment is specified. Defaults to dev. |
env_files | list | No | Local env files that push, pull, diff, and scan read from. Defaults to [".env", ".env.local"]. |
apps | map | No | Named apps for monorepos. Each entry has a path field. |
backend | object | No | Storage backend configuration (type, region, prefix). |
environments | map | No | Per-environment backend overrides. |
worktrees | object | No | Worktree configuration. See Worktrees. |
Monorepo Config
The key name (e.g., frontend, backend) is the app's display name used in all ev commands and the dashboard. Renaming a key in ev.yaml does not rename the app on the server — the next ev push creates a new app with the new name. Delete the old app by name with ev delete <old-name>.
When you run ev commands from packages/backend/, ev automatically resolves the app to backend. You can override with colon syntax:
env_files
env_files controls which local files ev reads when you run push, pull, diff, or scan. Files are merged in order — later files take precedence over earlier ones when the same key appears in multiple files.
ev init generates the default:
Framework Examples
Next.js — include all Next.js env file layers:
Vite — include mode-specific files:
Docker / production — target a single file:
Monorepo per-app — each app entry in ev.yaml can have its own env_files list:
Backend Config
See Storage Backends for all backend types and options.
Per-Environment Backend Override
Keep dev on ev's encrypted storage while prod uses AWS Secrets Manager:
Context Resolution
When you run an ev command, it resolves context in this order:
- Explicit argument —
ev push backend:stagingsets app tobackend, env tostaging - Partial argument —
ev push stagingsets env tostaging, app from cwd orev.yaml - Working directory — if cwd matches an app
pathinev.yaml, that app is used default_env— fromev.yaml- Global default —
dev
Worktrees
Controls where ev worktree add creates worktrees.
| Field | Default | Description |
|---|---|---|
dir | .worktrees | Directory (relative to repo root) where worktrees are created. |
This block is entirely optional — omitting it is the same as setting dir: .worktrees. The directory is added to .gitignore automatically on first use.
See ev worktree for full usage.
Local Files
ev stores per-user state in ~/.config/ev/:
| File | Contents |
|---|---|
~/.config/ev/auth.json | Auth token from ev login |
~/.config/ev/keys.json | Your local keypair (Curve25519 public + private key) |
~/.config/ev/config.json | API URL and other client settings |
These files are created automatically and should never be checked into version control. ev adds them to .gitignore during ev init.