pixi-outdated
A CLI tool to check for outdated dependencies in pixi projects.
Features
- ✅ Multi-platform analysis - Check all platforms in your lockfile simultaneously
- ✅ Smart caching - Queries each package only once across all platforms
- ✅ Conda packages - Query channel repodata with rattler for accurate version info
- ✅ PyPI packages - Check Python packages via the PyPI JSON API
- ✅ No parsing needed - Leverages
pixi list --jsonfor package information - ✅ Flexible filtering - Check explicit dependencies only or specific packages
- ✅ Multi-environment - Support for different pixi environments
- ✅ Progress tracking - Visual progress bars for multi-platform queries
- ✅ JSON output - Machine-readable output for automation
Installation
Usage
Check all packages (including transitive dependencies)
Check only explicit dependencies from pixi.toml
Check specific packages
# Single package
# Multiple packages
Check packages in a specific environment
Check packages for a specific platform
# Single platform
# Check all platforms in lockfile (default behavior)
Note: When no platform is specified, pixi-outdated automatically checks all platforms defined in your pixi.lock file and shows:
- Updates common to all platforms
- Platform-specific updates
Additional options
)
)
)
Example Output
===
===
===
Development Status
✅ Production Ready! This tool is fully functional and well-tested.
Completed Features:
- Multi-platform analysis - Automatically checks all platforms in lockfile
- Smart query optimization - Each package queried only once across platforms (50% reduction in API calls)
- CLI argument parsing with support for:
- Multiple package names
- Explicit dependencies only (
--explicit) - Environment selection (
--environment) - Platform selection (
--platform) - JSON output (
--json) - Verbose output with structured logging (
--verbose)
- Integration with pixi - Uses
pixi list --jsonfor package info - Conda support - Repodata querying with rattler
- Shared Gateway instance for performance (7s first query, <7ms cached)
- Multi-platform queries in single API call
- NoArch and platform-specific packages
- PyPI support - PyPI JSON API integration with automatic caching
- Progress tracking - Visual progress bars for long operations
- Comprehensive tests - 25 tests covering all functionality
- Unit tests for all modules
- Integration tests with real lockfiles
- Error handling and edge cases
- Result coalescing - Intelligently groups updates by platform
Performance:
- ~50% reduction in API calls through intelligent caching
- PyPI packages queried once regardless of platform count
- Parallel platform analysis with single progress bar
Architecture
Design Principles
Instead of parsing pixi.toml and pixi.lock directly, we leverage existing tools:
- Use
pixi list --json- Avoids reinventing package resolution logic - Use
rattler_lock- Read lockfiles for platform information - Smart caching - Query each unique package once across all platforms
- Parallel analysis - Process all platforms simultaneously
Module Structure
src/
├── main.rs # CLI entry point and multi-platform orchestration
├── lib.rs # Library exports (lockfile, conda, pixi, pypi)
├── lockfile.rs # Read platforms from pixi.lock using rattler_lock
├── pixi.rs # Shell out to `pixi list --json` for package info
├── conda.rs # Query conda channels for latest versions (with multi-platform support)
└── pypi.rs # Query PyPI JSON API for latest versions
tests/
└── integration_test.rs # End-to-end tests with real lockfiles
Key Optimizations
- PackageKey Deduplication: Unique packages identified by
(name, channel, kind)tuple - Version Cache: All version queries cached before building per-platform results
- Multi-platform Queries: Conda packages queried across all platforms in one API call
- PyPI Caching: Automatically cached since they have no channel (platform-independent)
Testing
Run the test suite:
# All tests
# With output
# Specific test
# Integration tests only
Run clippy:
Test Coverage
- 17 unit tests - Testing individual modules (conda, pixi, lockfile)
- 6 integration tests - End-to-end testing with real lockfiles
- 2 binary tests - Testing main application logic
License
MIT