Local encryption
Varlock includes a built-in varlock() function that lets you secure local untracked secrets (typically in git-ignored env files like .env.local).
This allows you to keep everything out of plaintext - even temporary local overrides, or a “secret-zero” which is needed by some plugins to load the rest of your sensitive data.
Sensitive values will be stored encrypted, with the key linked to your local device, and requiring no extra configuration. The encryption mechanism varies per platform, but as it is tied to your device, these values are not meant to be shared or committed to git.
PLAINTEXT=shh-im-secret # 🚨 dangerSECURED=varlock(local:abc123...) # ✅ secured at restQuick start - existing secrets
Section titled “Quick start - existing secrets”You likely already have some plaintext secrets in a .env.local file. If not you can create one, and add some. Ensure those items are marked as @sensitive in your schema. Then you can use varlock encrypt to encrypt them in-place:
- Run
varlock encrypt --file .env.localto encrypt them in-place - Sensitive plaintext values are replaced with
varlock("local:<***encrypted***>") - Decryption happens automatically during
varlock load/varlock run
Only plaintext values of @sensitive items are encrypted, so you may run it multiple times.
Using varlock(prompt) resolver
Section titled “Using varlock(prompt) resolver”When you need to edit a value or add a new sensitive item, just set the value to varlock(prompt) and run varlock load. You will be prompted for the new value in a secure input prompt, and the encrypted value will be written back to the file automatically.
EXISTING_ITEM=varlock(local:abc123...)NEW_ITEM=varlock(prompt) # will prompt you for new valueUsing varlock encrypt CLI
Section titled “Using varlock encrypt CLI”You can also call the varlock encrypt CLI command to get a secure prompt to encrypt a single value. It will spit out an item you can copy/paste into your file:
◇ Enter the value you want to encrypt│ ▪▪▪▪▪▪▪▪
Copy this into your .env.local file and rename the key appropriately:
SOME_SENSITIVE_KEY=varlock("local:ABC123...")--file option
Section titled “--file option”As outlined above, you can also run varlock encrypt --file .env.local to encrypt all sensitive plaintext values in a file in-place. This is a great way to quickly encrypt many secrets at once.
Core commands
Section titled “Core commands”Use varlock encrypt to create encrypted payloads:
# Interactive: encrypt a single valuevarlock encrypt# Batch: encrypt all sensitive plaintext values in .env.localvarlock encrypt --file .env.localUse varlock reveal to inspect decrypted values safely:
varlock reveal # interactive - select and revealvarlock reveal API_KEY # securely reveal specific itemvarlock reveal API_KEY --copy # copy to clipboardUse varlock lock to invalidate biometric session cache when stepping away:
varlock lockBackend selection overview
Section titled “Backend selection overview”Varlock chooses the best available backend automatically:
| Platform | Backend | Key Storage | Biometric |
|---|---|---|---|
| macOS | Secure Enclave | Hardware Secure Enclave | Touch ID |
| Windows | DPAPI + Windows Hello | Windows credential store | Windows Hello (face/fingerprint/PIN) |
| Linux | TPM2 / Secret Service | TPM2 and/or system key store | Yes (when configured via polkit/PAM) |
| All platforms | File-based fallback | ~/.varlock/ directory | No |
If native capabilities are unavailable, varlock falls back to file-based local encryption.
Platform details & setup
Section titled “Platform details & setup”- Native Swift helper (Secure Enclave integration)
- Uses system-native secure input / auth prompts
- Includes a menu bar applet flow for native interactions
- Hardware-backed key protection via Secure Enclave with biometric auth where supported
✅ No additional install/setup steps required
Windows
Section titled “Windows”- Native helper with DPAPI-based key protection
- Windows native and WSL workflows are both supported
- Automated daemon startup/installation behavior is built in for biometric session flows
- WSL decrypt flows use a native bridge to the Windows daemon path
- Biometric-capable session behavior where Windows Hello is available
✅ No additional install/setup steps required
- Native Linux helper when available
- User-presence verification via polkit/PAM (can support fingerprint/face/password depending system setup)
Common packages/tools:
tpm2-tools(plus distro TPM2 libs such astpm2-tss)polkitfor user-presence authorization flowsxcliporxselforvarlock reveal --copy
Example installs:
# Debian/Ubuntusudo apt-get updatesudo apt-get install -y tpm2-tools tpm2-tss policykit-1 xclip# Fedora/RHEL variantssudo dnf install -y tpm2-tools tpm2-tss polkit xclipIf biometric/user-presence prompts are unavailable on Linux, complete policy setup (native helper command):
sudo varlock-local-encrypt setup --linux-biometrics