Preview

Security model

What the encryption protects, and what it can't. Both lists come from FerrumEnv's own documentation. The security page has the details.

How the vault is protected

  • The vault key comes from your master password through Argon2id (64 MiB, 3 passes) and a random salt.
  • The whole vault, project names included, is sealed with XChaCha20-Poly1305 under a fresh nonce on every save. Only the file header is readable on disk.
  • A wrong password, a modified file or a newer format is reported as an error, not a crash.
  • Saves are atomic, with mode 0600 in a 0700 folder. The previous file is kept as an encrypted backup.
  • Bundles are sealed with the project's share key and bound to the project name. The key itself is never inside a bundle.
  • Values and keys are wiped from memory when they're dropped and are never logged. Locking drops the whole unlocked state.

Limits

  • Wiping memory is best effort: some copies (JSON parsing, text fields, text layout) are freed but not zeroed. Swap and core dumps are not prevented.
  • A copied value is outside the app's control while it's on the clipboard, and clipboard managers may keep it. Exported .env files are plain text.
  • There is no protection against malware running as your user, such as keyloggers or memory readers.
  • Anyone with a project's share key can read and create bundles for that project. Rotating the key only affects future bundles.
  • There is no recovery: if you forget the master password, the data is gone.

What FerrumEnv does

The encryption, bundles and .env parsing are unit-tested; the window is covered by headless tests.

  • Locked by default

    The master password is asked on every start, and nothing is decrypted before. The vault locks after 30 minutes without activity (or 5, 15 or 60), and ⌘L locks it at once.

  • Projects and environments

    A project links to a folder and starts with development, staging and production. Each variable has a key, a value, an optional comment and a secret flag.

  • Secrets stay masked

    Reveal one value or all of them. A copied value is cleared from the clipboard after 30 s if it's still there, and at once when the vault locks.

  • Encrypted bundles

    Share all or chosen environments as encrypted text or a .fenv file. Before an import, you see what will be added, changed or removed, by key name only.

  • Share keys you can check

    Each project has a 256-bit key shown as fek1_…, with a checksum that rejects typos and a short fingerprint to compare out loud. Rotate it to cut someone off from future bundles.

  • .env in and out

    Import .env, .env.local, .env.production and the rest from a project folder. Write an environment back to a .env file with mode 0600, copy it as text, or compare two environments.

Status: Alpha

FerrumEnv is in alpha. Its tests are automated; the app hasn't been clicked through by hand yet.

Works today

  • Master password, auto-lock and ⌘L
  • Projects, environments and variables, with search
  • Masked secrets, reveal, and copy with clipboard clearing
  • Share keys, and encrypted bundles as text or .fenv files
  • .env import and export, and comparing two environments
  • Changing the master password in Settings

Not built yet

  • Undo and per-variable history
  • A command-line tool that runs a command with the variables set
  • Unlocking with Touch ID or the OS keychain
  • Per-person public keys instead of one shared key per project
  • Drag and drop of .env and .fenv files, and opening .fenv files from Finder

Requirements & built with

Install
Ferrum Launcher (free, see Download)
Shell command
fev, turned on in Ferrum Launcher
Vault file
~/.ferrum/env/vault.json, encrypted
Built with
Rust, GPUI, Argon2id, XChaCha20-Poly1305, zeroize
Tested with
Automated unit tests and headless window tests, not yet by hand

A forgotten master password can't be reset. Keep it somewhere safe.