Vial is an encrypted local vault for your API keys. One command auto-populates any project's .env from a single source of truth.
You're vibe coding. AI assistants are spinning up repos faster than you can populate .env files. Every project needs the same keys — copy-pasted from a password manager, an old Notion doc, three stale .env files, and a Slack DM to yourself.
Then you rotate a key. Good luck updating all 30 projects.
.env files.One encrypted file. One command. Zero ceremony.
Reads your .env.example, matches keys against your vault, writes a .env. One command, zero config.
Exact match → normalization → alias variants → comment parsing → LLM reasoning. It understands your keys.
Argon2id KDF → AES-256-GCM per-value encryption. Keys in memguard locked memory. Secrets never in CLI args.
vial setup scans your code, generates .env.example, pours secrets, and installs git hooks — one command.
Update a key in your vault, run pour --all. Every registered project gets the new value instantly.
Run any command with secrets injected as env vars. No .env written to disk. vial brew -- node app.js
Import from .env files, 1Password, Doppler, or Vercel. vial distill --from=1password
MCP server for AI coding tools. Claude Code skill for autonomous project setup. vial mcp
Rotation tracking, staleness alerts, git pre-commit hooks to catch leaked secrets before they ship.
Encrypted bundles for teammates. Export to Docker, Kubernetes, GitHub Actions, or shell formats.
Local web UI embedded in the binary. Browse secrets, manage aliases, track key health.
Vault sync via iCloud, Dropbox, or git. Headless mode with VIAL_MASTER_KEY for pipelines.
Your .env.example says OPENAI_KEY. Your vault has OPENAI_API_KEY. Framework prefixes, naming variants, even comments — Vial resolves them all.
| Tier | Method | Example |
|---|---|---|
| 1 | Exact match | OPENAI_API_KEY = OPENAI_API_KEY |
| 2 | Prefix stripping | NEXT_PUBLIC_SUPABASE_URL → SUPABASE_URL |
| 3 | Alias & variants | OPENAI_KEY → OPENAI_API_KEY |
| 4 | Comment-informed | # Your Stripe secret key → STRIPE_SECRET_KEY |
| 5 | LLM-assisted | Calls an inference API for truly ambiguous cases |
Single static binary. ~9 MB. macOS and Linux, arm64 and amd64.
brew install cheesejaguar/tap/vial
Or from source: git clone && make build