A modern, secure, and user-friendly dotfile manager built with Rust
DotState is a terminal-based tool that helps you manage your dotfiles effortlessly. Whether you're syncing your configuration across multiple machines or setting up a new development environment, DotState makes it simple, safe, and fast.
Kapture.2025-12-22.at.17.10.01.mp4
Managing dotfiles can be a pain. You want your .zshrc, .vimrc, and other config files synced across machines, but traditional solutions are either too complex, insecure, or require too much manual work.
DotState solves this by being:
- π¦ Built with Rust - Fast, memory-safe, and reliable
- π Secure by design - No shell injection vulnerabilities, safe file operations
- π¨ Beautiful TUI - Intuitive interface that doesn't require learning Git
- β‘ Lightning fast - Non-blocking operations, instant feedback
- π‘οΈ Safe - Automatic backups before any file operations
- π GitHub-powered - Your dotfiles stored securely in a private or public repo
- Require Git knowledge
- Manual symlink management
- No built-in backup system
- Complex setup process
- Zero Git knowledge required - We handle everything
- Automatic symlink management - Files are linked automatically
- Built-in backups - Your files are safe before any operation
- One-command setup - Get started in seconds
- Profile support - Separate configs for work, personal, Mac, Linux, etc.
- Package management - Track and install CLI tools per profile
- Beautiful TUI - Visual interface with mouse support
- Profile Management: Create separate profiles for different contexts (work, personal, Mac, Linux, etc.)
- GitHub Sync: Automatic sync with GitHub (private or public repos)
- Smart File Detection: Automatically finds common dotfiles in your home directory
- Safe Operations: Automatic backups before any file modification
- Symlink Management: Automatic creation and management of symlinks
- Custom Files: Add any file or directory, not just dotfiles
- CLI Tool Tracking: Define and track CLI tools and dependencies per profile
- Multi-Manager Support: Works with Homebrew, Cargo, npm, pip, and more
- Installation Flow: Check what's missing and install with one command
- Custom Packages: Support for custom installation scripts
- Beautiful TUI: Modern terminal interface built with Ratatui
- Mouse Support: Click to navigate and interact
- Real-time Feedback: See what's happening as it happens
- Error Recovery: Clear error messages with actionable guidance
- CLI & TUI: Full-featured CLI for automation, beautiful TUI for interactive use
- No Shell Injection: Direct command execution, no shell interpretation
- Safe File Operations: Validates paths, prevents dangerous operations
- Secure GitHub Integration: Token-based authentication
- Backup System: Automatic backups before any destructive operation
# Clone the repository
git clone https://github.com/serkanyersen/dotstate.git
cd dotstate
# Build and install
cargo install --path .cargo install dotstatebrew tap serkanyersen/dotstate
brew install dotstateOr use the direct install:
brew install serkanyersen/dotstate/dotstate-
Launch DotState:
dotstate
-
First-time Setup:
- Enter your GitHub token (create one at github.com/settings/tokens)
- Choose repository name and location
- Select repository visibility (private/public)
-
Add Your Files:
- Navigate to "Manage Files"
- Select files to sync (they're automatically added)
- Files are moved to the repo and symlinked automatically
-
Sync to GitHub:
- Go to "Sync with Remote"
- Your files are committed, pulled, and pushed automatically
That's it! Your dotfiles are now synced and ready to use on any machine.
DotState also provides a powerful CLI for automation:
# List all synced files
dotstate list
# Add a file to sync
dotstate add ~/.myconfig
# Sync with remote (commit, pull, push)
dotstate sync
# Activate symlinks (useful after cloning on a new machine)
dotstate activate
# Deactivate symlinks (restore original files)
dotstate deactivate
# Show help
dotstate help- Storage: Your dotfiles are stored in a Git repository (default:
~/.config/dotstate/storage) - Symlinks: Original files are replaced with symlinks pointing to the repo
- Profiles: Different profiles can have different sets of files
- Sync: Changes are committed and synced with GitHub automatically
- No Shell Injection: All commands use direct execution, not shell interpretation
- Path Validation: Dangerous paths (like home directory root) are blocked
- Git Repository Detection: Prevents nested Git repositories
- Backup System: Automatic backups before any file operation
- Token Security: GitHub tokens are stored securely in config files
- Rust: Latest stable version (for building from source)
- Git: For repository operations
- GitHub Account: For cloud sync (optional, but recommended)
DotState is actively developed and ready for use. The core features are stable, and we're continuously improving based on user feedback.
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
MIT License - see LICENSE file for details.
Built with:
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with β€οΈ and Rust