TLDR: brew install infisical/get-cli/infisical, then infisical login, then infisical init in your project. Organize secrets as project > environment > folders. Use infisical run --env=dev -- npm run dev to inject secrets without writing to disk. Works with Terraform/OpenTofu. Free cloud tier is enough for small teams.
Infisical is an open-source secrets manager built for developers. MIT license, project/environment hierarchy, CLI injection, web dashboard, self-hosting option, end-to-end AES-256-GCM encryption.
If you are coming from 1Password’s op CLI, I wrote about why it is not enough.
How secrets are organized
Organization
└── Project (e.g., "my-project")
├── development
│ ├── /database (DATABASE_URL, DATABASE_PASSWORD)
│ └── /api-keys (STRIPE_KEY, SENDGRID_KEY)
├── staging
└── production
Setup
brew install infisical/get-cli/infisical
infisical login # opens browser
cd ~/projects/my-project
infisical init # links directory to project
Docs: infisical.com/docs/cli/overview
Usage
# Read a single secret
DB_PASS=$(infisical secrets get DB_PASSWORD --env=dev --plain --silent)
# Inject all secrets into a process (nothing on disk)
infisical run --env=dev -- npm run dev
# Inject from a specific folder
infisical run --env=dev --path=/database -- npm run dev
Docs: infisical.com/docs/cli/commands/secrets
Terraform/OpenTofu
Official provider with 1.1M+ downloads. Works with OpenTofu.
provider "infisical" {
host = "https://app.infisical.com"
client_id = var.infisical_client_id
client_secret = var.infisical_client_secret
}
data "infisical_secrets" "api" {
env_slug = "production"
workspace_id = "PROJECT_ID"
folder_path = "/database"
}
Supports ephemeral resources (Terraform v1.10+) so secrets never end up in .tfstate files. Supports OIDC auth for CI/CD pipelines.
Cloud vs self-hosted
Cloud (recommended to start): Free tier with up to 3 projects, 3 environments, and 5 identities. Check current pricing for exact limits.
Self-hosted: Docker Compose (PostgreSQL + Redis + Infisical). Same CLI. Docs
What Infisical does not solve
No per-request approval popup. It authenticates once and trusts the session. No biometric integration. These limitations are not unique to Infisical. The real defense is isolating secrets from untrusted processes.
Spot something wrong?
Found a typo, a broken link, or something that could be better? I would love to hear from you. Drop me a message and I will fix it.
Comments
Nothing yet. Say the first thing.
Sign in to join the conversation.