9 releases
| 0.3.2 | Jan 31, 2026 |
|---|---|
| 0.3.1 | Jan 18, 2026 |
| 0.3.0 | Dec 16, 2025 |
| 0.2.0 | Dec 2, 2025 |
| 0.1.0 | Apr 1, 2022 |
#2407 in Command line utilities
1MB
17K
SLoC
Santa 🎅
A modern, high-performance package manager meta-tool that works across platforms.
Santa helps you install and manage packages across multiple platforms and package managers with a single command. Whether you're switching between macOS, Linux, or Windows, Santa ensures your essential tools are always available.
Why Santa?
You regularly use tools not installed by default
You're a modern developer. You prefer ripgrep over grep, bat over cat, and fd over find. The problem? They're not installed by default. You're stuck installing them manually with whatever package manager is available.
Santa gives you one command to install your entire "standard developer toolkit."
You work across different operating systems
Isn't it annoying when you log into a new machine and it doesn't have your preferred tools? Or when your tool isn't installable using apt, but you don't remember which package manager does have it?
Santa simplifies this workflow. Santa knows where your packages can be installed from and will install them from the best available source.
Features
🚀 Performance
- 67-90% faster concurrent package operations via async subprocess execution
- Professional-grade caching with TTL and LRU eviction
- Memory efficient with zero unnecessary allocations
🔧 Cross-Platform
- Linux, macOS, and Windows support
- Multiple package managers: Homebrew, Cargo, APT, Pacman, AUR, Scoop, Nix
- Automatic fallback to available package managers
🌟 User-Friendly
- Configuration hot-reloading - changes take effect immediately
- Shell completions for bash, zsh, and fish
- Environment variable overrides for all settings
- CCL configuration format - simple and readable
🛡️ Reliable
- Comprehensive error handling with helpful messages
- Security hardening with input sanitization
- 144 comprehensive tests with >90% code coverage
Installation
From Releases (Recommended)
Download pre-built binaries from the releases page:
# Linux (x64)
curl -L https://github.com/tylerbutler/santa/releases/latest/download/santa-linux-x64.tar.gz | tar xz
# macOS (Apple Silicon)
curl -L https://github.com/tylerbutler/santa/releases/latest/download/santa-macos-aarch64.tar.gz | tar xz
# Windows (PowerShell)
irm https://github.com/tylerbutler/santa/releases/latest/download/santa-windows-x64.zip -OutFile santa.zip
Expand-Archive santa.zip
From Source
cargo install santa-cli
Verify Installation
santa --version
Quick Start
1. Check Status
See what packages are available and their installation status:
santa status
2. Install Packages
Install all configured packages:
santa install
Install specific packages:
santa install ripgrep bat fd
3. View Configuration
santa config
4. Set Up Shell Completions
# Bash
santa completions bash >> ~/.bashrc
# Zsh
santa completions zsh >> ~/.zshrc
# Fish
santa completions fish > ~/.config/fish/completions/santa.fish
Configuration
Santa uses a CCL (Categorical Configuration Language) configuration file.
Default location: ~/.config/santa/config.ccl
Basic Configuration
/= Package sources in order of preference
sources =
= brew
= cargo
= apt
= pacman
= scoop
= nix
/= Packages to install
packages =
= bat
= ripgrep
= fd
= exa
= bottom
= git-delta
= chezmoi
Supported Package Managers
| Package Manager | Platforms | Status |
|---|---|---|
| Homebrew | macOS, Linux | ✅ Full Support |
| Cargo | All | ✅ Full Support |
| APT | Debian, Ubuntu | ✅ Full Support |
| Pacman | Arch Linux | ✅ Full Support |
| AUR | Arch Linux | ✅ Full Support |
| Scoop | Windows | ✅ Full Support |
| Nix | All | ✅ Full Support |
Environment Variables
Override any configuration setting with environment variables:
export SANTA_SOURCES="brew,cargo,apt"
export SANTA_PACKAGES="git,rust,ripgrep"
export SANTA_LOG_LEVEL="debug"
export SANTA_BUILTIN_ONLY="true"
Available Variables:
SANTA_LOG_LEVEL- Set log level (trace, debug, info, warn, error)SANTA_CONFIG_PATH- Override configuration file pathSANTA_SOURCES- Override package sources (comma-separated)SANTA_PACKAGES- Override package list (comma-separated)SANTA_BUILTIN_ONLY- Use builtin configuration only (true/false)SANTA_CACHE_TTL_SECONDS- Set package cache TTLSANTA_CACHE_SIZE- Set maximum cache entriesSANTA_VERBOSE- Set verbose logging level (0-3)SANTA_HOT_RELOAD- Enable configuration hot-reloading (true/false)
Commands
santa status
Show all packages and their installation status across available package managers.
santa status
# Show only installed packages
santa status --installed
# Show only missing packages
santa status --missing
santa install
Install packages from the configured sources.
# Install all configured packages
santa install
# Install specific packages
santa install ripgrep bat fd
# Dry run (show what would be installed)
santa install --dry-run
santa config
Display current configuration including sources, packages, and settings.
santa config
# Show configuration file path
santa config --path
# Show resolved configuration (after environment variables)
santa config --resolved
santa completions
Generate shell completion scripts.
# Generate for bash
santa completions bash
# Generate for zsh
santa completions zsh
# Generate for fish
santa completions fish
Advanced Usage
Custom Configuration File
santa --config ~/my-config.ccl status
Verbose Output
# Level 1: Basic info
santa -v install
# Level 2: Detailed info
santa -vv install
# Level 3: Debug info
santa -vvv install
Using with CI/CD
# Set packages via environment variable
export SANTA_PACKAGES="jq,yq,gh"
santa install
# Use builtin configuration only (no config file)
export SANTA_BUILTIN_ONLY=true
santa install
Troubleshooting
Package Not Found
If a package isn't found, check:
- The package name is correct for your package manager
- Your package manager is in the
sourceslist - Your package manager is installed and in your PATH
# Check which package managers are available
santa config
Permission Errors
Some package managers require elevated privileges:
# Linux/macOS
sudo santa install
# Windows (run PowerShell as Administrator)
santa install
Configuration Not Loading
Verify your configuration file path:
santa config --path
Or specify the path explicitly:
santa --config ~/.config/santa/config.ccl status
Performance
Santa is designed for speed:
- 67-90% faster than sequential package operations
- Parallel execution of package manager queries
- Intelligent caching to avoid redundant operations
- Async I/O for non-blocking operations
Contributing
Contributions are welcome! Please see the main repository for development guidelines.
License
Licensed under the MIT License.
Made with ❤️ for developers who work across platforms
Dependencies
~33–56MB
~882K SLoC