A platform-agnostic, directory-scoped secrets manager. Store secrets outside your repos, inherit them through directory ancestry.
~/projects/ # DATABASE_URL, API_KEY defined here
├── app-a/ # inherits both secrets
├── app-b/ # inherits both, overrides API_KEY
│ └── tests/ # blocks API_KEY (uses none)
└── app-c/ # inherits both secrets
Linux/macOS:
curl -fsSL https://safia.rocks/burrow/install.sh | shburrow set API_KEY=sk-live-abc123
burrow set DATABASE_URL=postgres://localhost/mydb --path ~/projectsburrow get API_KEY
burrow get API_KEY --format jsonburrow list
burrow list --format jsoneval "$(burrow export)"
eval "$(burrow export --format shell)" && npm startburrow unset API_KEY --path ~/projects/app/testsburrow remove API_KEY --path ~/projects/appUnlike unset which blocks inheritance, remove deletes the entry entirely, restoring inheritance from parent directories.
Secrets are stored in your user profile:
- Linux/macOS:
$XDG_CONFIG_HOME/burrowor~/.config/burrow - Windows:
%APPDATA%\burrow
When you request secrets for a directory, burrow:
- Finds all ancestor paths with stored secrets
- Merges them from shallowest to deepest
- Deeper scopes override shallower ones
- Tombstones (from
unset) block inheritance
Burrow also works as a TypeScript/JavaScript library:
import { BurrowClient } from '@captainsafia/burrow';
const client = new BurrowClient();
try {
await client.set('API_KEY', 'secret123', { path: '/my/project' });
const secret = await client.get('API_KEY', { cwd: '/my/project/subdir' });
console.log(secret?.value); // 'secret123'
console.log(secret?.sourcePath); // '/my/project'
const allSecrets = await client.list({ cwd: '/my/project' });
} finally {
client.close(); // Clean up database connection
}Or with TypeScript's using declarations for automatic cleanup:
{
using client = new BurrowClient();
await client.set('API_KEY', 'secret123');
} // Automatically cleaned up- Bun v1.0 or later
git clone https://github.com/captainsafia/burrow.git
cd burrow
bun install# Run tests
bun test
# Type check
bun run typecheck
# Build npm package
bun run build
# Compile binary
bun run compileMIT