Git-native environment management

Stop babysitting .env files.

Keep encrypted, reviewable environment configuration with your code. Ghostable gives developers, agents, and CI the right values—without accounts, usage limits, or a hosted secrets server.

brew tap ghostable-dev/ghostable && brew install --cask ghostable

No account required Unlimited environments Free forever

How Ghostable works

Configuration travels with the code. Plaintext doesn't.

Ghostable stores encrypted values and signed access records in .ghostable/. Git moves them; approved devices decrypt only the environments they can use.

Safe in Git

Encrypted records live with the project.

The directory is designed to be committed, reviewed, branched, and merged with the application.

.ghostable/
├── environments/
│   ├── development/
│   ├── staging/
│   │   └── values/
│   │       ├── APP_KEY.json
│   │       ├── DATABASE_URL.json
│   │       └── STRIPE_SECRET_KEY.json
│   └── production/
├── devices/
└── policy.json
Encrypted values Signed records
Inspectable records

The secret is hidden. The record is not.

Each key has its own encrypted value record. The environment, key name, version, and encryption method stay visible while the value remains ciphertext.

APP_KEY.json Encrypted value
{
  "environment": "staging",
  "key": "APP_KEY",
  "version": 4,
  "secret": {
    "ciphertext": "b64:U6JxZHOGVT/…",
    "alg": "xchacha20-poly1305"
  }
}
Device access

Every device gets exactly the access it needs.

A device can read one environment, write another, or approve access without gaining permission to change values.

Trusted devices 3 active

Your MacBook Pro

This device
development read + write staging read + approve production read

Maya’s MacBook Air

development read + write staging read

GitHub CI/CD runner

production read only
Reviewed in Git

Review configuration like code.

A rotation changes one value record. Reviewers see exactly which environment and key moved, without seeing the secret itself.

rotate-staging-key 2 files changed
M .ghostable/environments/staging/values/APP_KEY.json
A .ghostable/events/variable.updated-staging.json
@@ APP_KEY.json
-  "version": 3,
+  "version": 4,
-  "ciphertext": "b64:Xm91p…"
+  "ciphertext": "b64:U6JxZ…"
One key, one diff No plaintext exposed

Local-first. Provider-agnostic.

Secrets management. Minus the service.

Ghostable runs where your code runs and keeps encrypted project state with the repository. There is no account to create, hosted secrets service to trust, subscription to renew, or provider-specific setup to migrate.

$0 forever

No subscription.

  • Unlimited environments.
  • Unlimited encrypted variables.
  • Unlimited team members.

No account

Install and go.

Install with Homebrew or npm, initialize the repository, and start in minutes. No workspace or tenant to provision.

No hosted vendor

One less service to trust.

Your plaintext secrets never reach a Ghostable service. There is no additional vendor to audit, approve, or place in your runtime path.

Belongs to the repository

Take it anywhere your code goes.

Ghostable travels with the repository, not the hosting provider. Change clouds, tools, or runtimes without migrating your secrets workflow.

  1. Local machines

    The same workflow on macOS, Windows, and Linux.

  2. Agents and worktrees

    Encrypted project state follows every development context.

  3. CI/CD runners

    Validate and decrypt inside the authorized job.

  4. Any hosting provider

    AWS, Azure, Vercel, self-hosted, or whatever comes next.

Works with your stack

If it’s configurable, it’s Ghostable.

Framework-agnostic and native on macOS, Windows, and Linux. If your project reads environment variables, Ghostable fits.

  • Laravel logo Laravel
  • Node.js logo Node.js
  • Next.js logo Next.js
  • Vercel logo Vercel
  • Docker logo Docker
  • GitHub Actions logo GitHub Actions
  • React logo React
  • Vue.js logo Vue.js
  • Python logo Python
  • Ruby logo Ruby
  • Go logo Go
See how local-first storage works

The Ghostable CLI

One install. A remarkably deep toolkit.

Ghostable brings the entire environment workflow into one free, repository-native command line. No collection of paid add-ons required.

Git-native storage

Keep encrypted values and signed project state beside the code they configure.

One key, one file

Review, merge, and trace individual variable changes without rewriting a shared blob.

Unlimited environments

Create as many isolated development, staging, preview, and production environments as you need.

Local encryption

Encrypt and decrypt on authorized machines without sending plaintext through a hosted secrets service.

Device identities

Give every workstation its own signing and encryption identity scoped to the project.

Granular access roles

Grant reader, writer, or grantor access independently for each environment.

Access requests

Request, approve, deny, and review new device access through signed repository records.

Revocation and rotation

Revoke a device and rotate affected environment keys without rebuilding the project.

Process-only injection

Run commands with decrypted values injected directly into the authorized child process.

Output masking

Best-effort masking keeps exact injected values out of child stdout and stderr.

Validation schemas

Commit required, URL, numeric, regex, range, and other rules as plaintext contracts.

Environment overrides

Layer environment-specific rules over the project-wide schema when requirements differ.

Cross-environment rules

Require sensitive values to differ between environments and catch unsafe reuse.

Variable promotion

Move selected configuration between environments with explicit reviewable changes.

Local file workflows

Pull, push, sync, and safely materialize local environment files when tools need them.

Environment comparison

See missing, changed, and matching keys before copying or deploying configuration.

Pull request review

Summarize configuration changes between Git refs without revealing encrypted values.

Secret scanning

Scan repository changes for likely plaintext credentials before they reach the main branch.

Automation output

Emit JSON, GitHub annotations, and SARIF where supported for CI and security tooling.

Signed activity

Record configuration and access operations in a tamper-evident project timeline.

Encrypted backups

Create and restore portable encrypted snapshots without depending on a Ghostable server.

Deployment adapters

Deploy to local files, Forge, Vapor, and Laravel Cloud without replacing unrelated keys.

Scoped CI credentials

Issue purpose-built automation access instead of reusing a person’s device identity.

Agent-ready guidance

Generate repository instructions and adoption prompts for coding assistants and agents.

And even more.

Annotations, examples, hygiene checks, backups, drift workflows, and a growing command surface are included.

Explore every command

Ready to take control of your configuration?

brew tap ghostable-dev/ghostable && brew install --cask ghostable
Prefer a visual workflow? Check out Ghostable Desktop

Frequently asked questions

Yes. Ghostable commits encrypted values, signed access records, and reviewable metadata. Keep plaintext .env files and private device identities out of Git.
No. Cloning the repository is not enough. Decryption requires an authorized device identity with access to that environment, or a scoped automation credential.
Each person joins with their own project-scoped device identity. An authorized owner or grantor can approve reader, writer, or grantor access for the environments they need.
Yes. Give CI its own scoped automation credential instead of a human device identity, then grant only the environment and reader or writer role that job needs.
Yes. Revoking a device removes its grants and rotates the affected environment keys. It cannot erase secrets that device had already seen, so rotate those underlying provider credentials when necessary.
Yes. Start from an existing environment file, then move each value into an encrypted record that is safe to review and commit.
Yes. Commit shared validation rules with the project, then run the same checks locally and in CI before a configuration change ships.
The CLI is the primary repository-native workflow for developers and CI. It handles encryption, access, validation, review, and running authorized processes from the terminal.
No. Ghostable Desktop is the optional paid app for people who want a focused visual workflow alongside the CLI. Personal licenses start at $49 one-time.
Yes. Ghostable fits environment-driven workflows across Laravel, Node, Python, Ruby, Go, and similar stacks.

Ghostable Desktop

Take Ghostable to your desktop.

Review environments, validation, and access in a focused visual app. Choose the build for macOS, Windows, or Linux.

Personal licenses start at $49 one-time and include one year of Desktop updates.

Ghostable Desktop app icon
macOS
Windows
Linux