deny.sh from your terminal.
For developers and administrators: encrypt files on your own machine, manage local secrets and store control files in your password manager. The free command-line interface (CLI) needs no account for local encryption. Install below.
Install
npx deny-sh
npm install -g deny-sh
Commands
.env files with deniable encryption. Automatically adds .deny/ to .gitignore.
.deny/ directory in the current project and configure the local settings file.
.deny/, and API usage summary.
Integrations
1Password
Sync control files to your 1Password vault via the op CLI. Push, pull, list, and check sync status.
deny-sh 1p pushdeny-sh 1p pulldeny-sh 1p listdeny-sh 1p status
Bitwarden
Sync control files to Bitwarden via the bw CLI. Same push/pull/list/status interface as 1Password.
deny-sh bw pushdeny-sh bw pulldeny-sh bw listdeny-sh bw status
Cloud backup
Encrypted archives to local disk, Google Drive, Dropbox, or S3. Configure once, back up anywhere.
deny-sh backup pushdeny-sh backup pulldeny-sh backup listdeny-sh backup config
The .deny/ directory
By convention, deny-sh init creates a .deny/ directory in your project. This is where control files, encrypted backups, and local config live.
.deny/ config.json # local settings (API key, vault path) *.control.json # control files for each encrypted item *.decoy.json # decoy control files backups/ # local encrypted archive copies
Add .deny/*.control.json to your .gitignore. deny-sh env protect does this automatically for .env files.
Encryption dependencies
AES-256-CTR via node:crypto from the Node.js standard library, encrypts the data. Argon2id via hash-wasm, a WebAssembly module for password-based key derivation. The CLI itself adds commander for argument parsing.