Santa 🎅
A modern, high-performance package manager meta-tool that works across platforms and package managers.
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.
Features
🚀 Performance
- 67-90% faster concurrent package operations via async subprocess execution
- Professional-grade caching with TTL and LRU eviction using the moka library
- Memory efficient with zero unnecessary allocations and smart string handling
🔧 Modern Architecture
- Zero
unwrap()andtodo!()in production code - comprehensive error handling - Structured logging with configurable levels and tracing
- Strong typing with builder patterns and validation
- Cross-platform compatibility for Linux, macOS, and Windows
🌟 Advanced Features
- Configuration hot-reloading with file system watching
- Enhanced shell completions with intelligent suggestions for bash/zsh/fish
- Environment variable configuration with comprehensive SANTA_ prefix support
- Plugin system foundation for extensibility
🛡️ Quality & Security
- 144 comprehensive tests with >90% code coverage
- Security hardening with input sanitization and injection protection
- Supply chain security with dependency auditing
- Production-ready error handling and logging
Santa might be useful to you if...
...you regularly use tools that are not installed by default
You're a modern developer. You can get by with grep, sure, but you'd much prefer ripgrep. The problem is, it's not installed. So you're stuck installing it yourself -- using whatever package manager you have available.
Santa gives you one command to install the packages in your own "standard developer toolkit."
...you regularly use different computers running different operating systems or architectures
Isn't it annoying when you log into a machine and it doesn't have your preferred tools? Or your tool isn't installable using apt, but of course, you don't remember that... So you waste 10 minutes looking up where you can install it from.
Santa simplifies this workflow. Santa knows where your packages can be installed from and will install them from the best available source.
Quick Start
Installation
# Install from source (requires Rust)
# Or download pre-built binaries from releases
|
Basic Usage
# Show available packages and their status
# Install all configured packages
# Show current configuration
# Generate shell completions
Configuration
Santa uses a YAML configuration file to determine what packages you want to install and the order of preference for package managers.
Configuration file location: ~/.config/santa/config.yaml
Basic Configuration
sources:
- brew # macOS/Linux package manager
- cargo # Rust package manager
- apt # Debian/Ubuntu package manager
- pacman # Arch Linux package manager
- scoop # Windows package manager
- nix # Universal package manager
packages:
- bat # Better cat with syntax highlighting
- ripgrep # Better grep
- fd # Better find
- exa # Better ls
- bottom # Better top
- git-delta # Better git diff
- chezmoi # Dotfile manager
Environment Variable Configuration
Override any configuration with environment variables:
Available Environment 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)
Development
Santa uses just for development workflow automation. If you don't have just installed:
Quick Start for Contributors
# Clone the repository
# Set up development environment (installs dev tools)
# Run quick development checks
# Run all tests
# Run with hot reload during development
Essential Commands
| Command | Description |
|---|---|
just |
Show all available commands |
just build |
Build debug binary |
just test |
Run all tests |
just lint |
Run clippy linting |
just check-all |
Run complete pre-commit checks |
just bench |
Run performance benchmarks |
just docs |
Generate and open documentation |
Development Workflow
# Daily development
# Before committing
# Release preparation
Testing
# Run all tests
# Run with coverage
# Run only unit tests
# Run only integration tests
# Fast parallel testing
Benchmarking
# Run all benchmarks
# Run specific benchmarks
# Save baseline for comparison
# Compare against baseline
Code Quality
# Check code style
# Auto-fix issues
# Security audit
# Check dependencies
# Supply chain security
Documentation
# Generate docs
# Check docs for errors
# View shell completion help
# View environment variable help
Architecture
Santa is built with modern Rust practices and professional-grade architecture:
Core Components
- Configuration System - YAML-based with environment variable overrides and hot-reloading
- Package Sources - Pluggable system supporting multiple package managers
- Async Operations - High-performance concurrent package checking and installation
- Caching Layer - Intelligent caching with TTL and memory management
- Plugin System - Extensible architecture for future enhancements
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 |
Performance
Santa is designed for performance with measurable improvements:
- 67-90% faster package operations compared to sequential execution
- Professional caching reduces redundant package manager calls
- Async I/O for non-blocking operations
- Memory efficient with zero-copy string handling where possible
Benchmarks
# Run performance benchmarks
# Compare performance improvements
# ... make changes ...
Contributing
We welcome contributions! Please see our development workflow above.
Development Setup
- Install Rust (1.70+): https://rustup.rs/
- Install Just:
cargo install just - Clone and setup:
Code Standards
- Zero
unwrap()andtodo!()in production code - Comprehensive error handling with context
- Tests required for all new functionality
- Documentation required for public APIs
- Security-first approach to all changes
Pull Request Process
- Run
just check-allto ensure all checks pass - Add tests for any new functionality
- Update documentation as needed
- Submit PR with clear description
CI/CD
Santa uses GitHub Actions for continuous integration:
- Multi-platform testing (Linux, macOS, Windows)
- Comprehensive test suite with coverage reporting
- Security auditing and dependency checking
- Performance regression testing
- Automated releases with cross-platform binaries
Run the same checks locally:
# Run CI checks locally
# Platform-specific CI simulation
License
Licensed under the MIT License.
Acknowledgments
- Built with modern Rust ecosystem tools
- Inspired by cross-platform package management needs
- Thanks to all contributors and the open source community
Made with ❤️ by the Santa team