tuck

The modern dotfiles manager

Simple, fast, and built in TypeScript. Track any config file — in your home directory or inside any git repo — sync across machines, and never lose your configs again. Agent-native, too: structured JSON output and a write-confined sandbox.

npm install -g @prnv/tuck

Track any dotfile instantly

Smart category detection organizes your configs automatically. Let tuck init and tuck sync discover files automatically, or use tuck add for manual control. Files are copied and organized by category.

Learn about tracking

Know your dotfiles status

See your entire configuration state at a glance. Branch info, sync status, and all tracked files organized by category - everything you need to stay in control.

View all commands

Sync with a single command

Automatically detects changes AND new dotfiles on your system. Select what to track interactively, commit, and push - all in one command. Pulls from remote first if behind. No manual git workflows needed.

See how sync works

Apply dotfiles from anywhere

Bootstrap a new machine in seconds. Point tuck at a GitHub, GitLab, or custom user, any git URL, a local folder, or a tarball. tuck creates Time Machine backup snapshots of your existing configs and applies with smart merging that preserves your local customizations.

Learn about apply

Restore when you need it

Symlink or copy, your choice. Automatic backups before every operation mean you can always restore. SSH and GPG permissions are handled correctly.

Explore restore options

Verify nothing drifted

tuck verify compares your live files, the repo, and the manifest so you always know what's out of sync. Use --exit-code as a CI gate, --json for automation, and --fix to safely re-copy whatever drifted.

See all commands

Track configs inside your repos

Not just your home directory. Track .vscode/settings.json, CLAUDE.md, or .cursorrules that live inside a project, then sync them across machines with 'tuck repo link'. Track any config file, anywhere.

Learn about repo tracking

Quick Start

Up and running in under a minute

1

Install tuck

npm install -g @prnv/tuck

or use yarn, pnpm, or bun

2

Initialize (does everything!)

tuck init

Scans your dotfiles, select what to track, syncs to your remote (GitHub, GitLab, or custom — or stay fully local)

3

Keep in sync (ongoing)

tuck sync

Run anytime - detects changes, finds new files, pushes updates

Core Commands

What 99% of users need. Initialize, sync, and check status - the essential workflow for managing your dotfiles.

tuck init

Set up tuck, scan for dotfiles, select what to track, and sync - all in one. Works with GitHub, GitLab, custom, or local-only providers. Creates ~/.tuck directory with Git tracking.

--from <url>--bare-r, --remote <url>-y, --yes--json
tuck sync

Detect changes, find new files, and push to remote. Pulls first if behind, scans for new dotfiles, commits and pushes.

--json--plan--dry-run--no-commit--no-push-m, --message
tuck status

See what's tracked and what's changed. Shows branch info, sync status, and all tracked files by category.

--short--json
Lake George, Free Study, John Frederick Kensett, c. 1872

Backup Commands

Fine-grained control for creating and managing your dotfile backups. Add files, discover new ones, and sync manually.

tuck add <files>

Manually track specific files. Copies files to ~/.tuck organized by category. Use --repo to track config files that live inside any git repo, not just $HOME.

--repo [dir]-c, --category--symlink--json--yes
tuck remove <files>

Stop tracking dotfiles. Optionally delete from repository or keep original files intact.

--delete--json
tuck list

List all tracked files. Filter by category or output as JSON for scripting.

-c, --category--paths--json
The Rocky Mountains, Lander's Peak, Albert Bierstadt, 1863

Restore Commands

Apply dotfiles from others, restore your own, or undo changes. Everything you need to use your backups across machines.

tuck apply <source>

Apply dotfiles from anywhere: a GitHub, GitLab, or custom user or owner/repo, any git URL, a local directory, or a tarball. Smart merging preserves your local customizations.

--merge--replace--dry-run--json--repo-root
tuck restore

Restore dotfiles from ~/.tuck to your system. Useful when setting up on a new machine.

--all--json--plan--dry-run--symlink
tuck undo

Restore files from Time Machine backup snapshots. Created automatically when using tuck apply.

--list--latest--file <path>
The Hill of the Alhambra, Granada, Samuel Colman, 1865

Security & Config

Manage secrets safely and customize tuck to your workflow. Keep sensitive data out of git while staying productive.

tuck secrets

Manage local secrets for placeholder replacement. Scan files and git history for exposed secrets.

listset <name>scanscan-history--json
tuck config

Customize tuck behavior - default branch, file strategy, hooks, and more.

get <key>set <key> <value>listedit--json
tuck diff

Show differences between system files and repository. Useful before syncing.

--staged--stat--category--json
Wyoming Valley, Pennsylvania, Jasper Francis Cropsey, 1864

Agent-Native

Drive tuck from AI agents and CI — structured JSON I/O, drift verification, a write-confined --root sandbox, and an MCP server. Every command supports --json, --yes, --plan, and --dry-run for safe, scriptable automation.

tuck verify

Detect drift between your live files, the repo, and the manifest. Gate CI on it or safely re-copy what changed.

--json--exit-code--fix
tuck repo

Manage per-machine bindings for config files tracked inside your git repos, synced across machines.

linklistunlink
tuck mcp serve

Expose tuck as tools to AI agents over MCP. Pair with --root to confine every write to a sandbox.

tools
The Gulf Stream, Winslow Homer, 1899

How it works

tuck stores your dotfiles in ~/.tuck, organized by category. When you run tuck init, it scans your system and lets you choose which files to track. Run tuck sync anytime to detect changes and sync to your remote.

~/.zshrc~/.tuck/files/shell/zshrc
~/.gitconfig~/.tuck/files/git/gitconfig
~/.config/nvim~/.tuck/files/editors/nvim
~/work/app/.vscode/settings.json~/.tuck/files/repos/<repo>/.vscode/settings.json

Run tuck sync to detect changes and push to remote. On a new machine: tuck init --from <repo-url> or tuck apply username

How tuck compares

Feature comparison with other dotfile managers

Featuretuckchezmoidotbotrcmvcshyadmbare gitGNU Stow
Automatic dotfile discovery
Secret scanning
Git history secret scanning
Time Machine backups
Smart merge with preserve markers
Auto-categorization
Remote repo auto-setup (GitHub/GitLab/custom)
JSON / agent automation
Drift detection (verify)!?
Write sandbox (--root)
MCP server
Track files in any repo
Interactive CLI prompts!?
Distributionnpm, brew, binarySingle binaryPython packageMultiple filesSingle script or packageSingle script-Perl script
Install methodManyManygit submoduleManyManyManyManualMany
Non-root install on bare system!?
Windows support!?!?
Bootstrap requirementsNode.js 18+, GitNonePython, gitBashsh, gitgitgitPerl
Source reposSingleSingleSingleMultipleMultipleSingleSingleSingle
dotfiles are...Files or SymlinksFilesSymlinksSymlinksFilesFilesFilesSymlinks
Config fileOptionalRequiredOptionalNoneOptionalOptionalOptionalNone
Private files
Show differences without applying
Whole file encryption
Password manager integration
Machine-to-machine file differencesPlannedTemplatesAlternative filesAlternative filesBranchesAlt files, templates!?
Custom variables in templatesPlanned
Executable files
File creation with initial contents
Externals
Manage partial filesPlanned!?!?
File removal
Directory creation
Run scripts (hooks)
Run once scripts
Machine-to-machine symlink differences!?!?
Shell completion
Archive import!?
Archive export!?
Implementation languageTypeScriptGoPythonBashPOSIX ShellBashCPerl
Supported
!?Partial / Manual effort
PlannedComing soon
Not supported

Built on open source

Built with the open source community

tuck stays small by leaning on tools developers already trust: Git for history, TypeScript for clarity, and standard package managers for distribution. The point is not to invent a new workflow, just to make dotfiles easier to keep.

Git-backed historyTypeScript CLInpm + Homebrew installsGitHub collaboration

Install tuck

Choose your preferred method

npm
npm install -g @prnv/tuck
brew
brew install Pranav-Karra-3301/tuck/tuck
curl
curl -fsSL https://tuck.sh/install.sh | bash