Philosophy
DaemonHound is not another dotfile manager. It is a deliberate answer to a problem every developer faces: your development environment should be reproducible, portable, and versioned — just like your code.
Why DaemonHound exists
Developers accumulate configuration everywhere:
.envfiles across dozens of repositories- SSH keys and Git configuration
- Shell configuration and aliases
- API tokens and service credentials
- Local tool configuration files
- Docker credentials and Kubernetes configs
- IDE settings and editor preferences
Eventually you buy a new laptop, reinstall your OS, or switch between work and personal machines — and spend hours, sometimes days, trying to recreate your environment. The files are scattered. Some are secrets, some are configs, some are machine-specific. Nothing ties them together.
DaemonHound exists because developers shouldn't think about moving configuration between machines. They should simply declare what matters, and DaemonHound should ensure it exists everywhere it belongs.
Why it is opinionated
The goal isn't to support every workflow. It's to define one good workflow and optimize heavily around it. Those opinions are not arbitrary — they eliminate dozens of configuration choices and make the tool predictable.
- Local-first. Your secrets never leave your machine unless you choose to sync them.
- Git as the synchronization backend. You already know Git. It gives you version history, diffs, and a remote for free.
- Encryption by default. No opt-in. No checkbox. Everything sensitive is encrypted at rest with age.
- Namespace-based organization. Derived from Git remotes — no manual configuration, no fragile path strings.
- CLI-first. A single binary. No daemon required. No web dashboard required. The daemon and web UI are optional layers.
- No hosted SaaS. Your vault is your own private Git repo. No accounts. No subscriptions. No third-party servers.
- Explicit synchronization. Files are tracked because you intentionally declared them — not because the tool scanned your machine. No surprises.
A lot of developer tools become complex because they try to support every possible workflow. If someone wants complete flexibility, they can already combine Git, GPG, Syncthing, shell scripts, and a password manager. DaemonHound's value proposition is that it removes all of that assembly work and replaces it with a coherent, well-defined workflow.
Not a dotfile manager
Dotfile managers (like chezmoi, yadm, or stow) are generic: they version files in a repo and symlink or copy them into place. They don't understand what the files are.
DaemonHound understands developer assets. It knows the difference between:
- Secrets — API keys, tokens, credentials. Encrypted, versioned, rotatable.
- Shared configuration —
.env.local,.gitconfig. Synced across machines. - Machine-specific files — shell configs, macOS preferences. Backed up per-machine, never merged.
- Generated files — build artifacts. Ignored entirely.
That semantic understanding is what makes DaemonHound valuable. It doesn't just move files — it treats different categories of files differently, with the right encryption, sync behavior, and lifecycle for each.
What it is not
DaemonHound isn't trying to replace:
- 1Password, Bitwarden, or other password managers
- Dropbox, iCloud Drive, or Syncthing
- Ansible, Chef, or configuration management tools
- Kubernetes Secrets, Vault, or Doppler
Those are generic synchronization or secret storage tools. DaemonHound is specific to the developer machine — the constellation of repos, configs, and secrets that make up your working environment.
Optimizing for developer experience
Being opinionated lets DaemonHound build features that would otherwise require extensive configuration:
- Zero-configuration onboarding.
dhd initand you're ready. No config files to write. - Predictable vault layout. Every DaemonHound vault has the same structure. You can inspect it with
git. - Automatic encryption. You never choose an encryption scheme. age is always used, always on.
- Standardized namespaces. Derived from your Git remote. No naming conventions to invent.
- Deterministic sync. You know exactly what will happen when you run
dhd sync.
In other words, DaemonHound optimizes for developer experience over configurability. Every opinion removes a decision you don't need to make.