I attended the RustNL meetup in Amsterdam where Tim de Jager and Bas Zalmstra from prefix.dev presented their journey building Pixi β a modern package manager written entirely in Rust. The talk was titled βIntroducing Pixi β A Journey of Making a Package Manager in Rustβ and delivered some fascinating insights into building developer tools at scale.

What Is Pixi?
Pixi is an open-source package manager (github.com/prefix-dev/pixi β 9,000+ stars) built on the conda/conda-forge ecosystem. It supports:
- Global and Local environments via
pixi.tomlandpixi.lock - Binary AND source dependencies β not just one or the other
- Multi-language projects β perfect for Robotics, Data Science, and mixed stacks
- First-class Windows support β unlike most package managers that treat Windows as an afterthought
The Philosophy
The team built Pixi around six core principles:
- Fast β parallel downloads, reflinks, lazy solving
- User Friendly β simple CLI, intuitive configuration
- Isolated Environments β no global pollution
- Single Tool β replaces conda, mamba, pip, virtualenv
- Fun β both to use and to build
- First-class Windows β not a second-class citizen
Who Uses Pixi?
Major projects have adopted Pixi for their development workflows:
- CPython β the reference Python implementation
- FreeCAD β open-source parametric 3D modeler
- mamba β the fast conda package manager itself
- modflow β USGS groundwater modeling
- NVIDIA/cuda-python β CUDA Python bindings
The Architecture: Four Rust Crates
The closing slide revealed the full ecosystem of projects:

- Pixi π± β the user-facing CLI and environment manager
- Rattler π€ β the core library for conda package management
- Resolvo π§© β a custom SAT solver for dependency resolution
- Rattler-build π¨ β build system for conda packages
Each project has its own mascot character and is published independently on crates.io.
Why So Fast?
This was one of the most technically interesting slides β the specific engineering decisions that make Pixi blazingly fast:

- Rattler: Parallel download, extract, and link β bounded only by IO throughput
- Rattler: Reflinks first, then hardlinks, then copy. Fresh environments cost almost nothing
- Rattler/Sparse: Crate fetches over HTTP range requests. Often skips the full archive entirely
- Rattler: Shared jlap metadata with conditional GET. Warm start is nearly free
- Resolvo: Lazy CDCL solving. Only fetches metadata for packages it actually considers
The key insight: every layer of the stack is optimized independently. The solver never fetches unnecessary metadata. The installer never copies when it can link. The downloader never transfers when it can reuse.
What They Did Right

Bas reflected on the decisions that paid off:
- Directly made Rattler into a library β not an application with library extraction later
- Started dogfooding Rattler with Pixi.dev β eating their own cooking early
- Invested into making their own solver (Resolvo) β rather than wrapping an existing SAT solver
- Had a project style which worked for them β team culture matters


What Could Have Been Done Better
The team was refreshingly honest about their mistakes:

- Did not split pixi into crates directly β monolithic at first, harder to decompose later
- Did not invest enough into faster CI:
- Offline tests
- Mock Registries (conda and PyPI)
- Started on the build feature late in the process β should have been earlier
- Still find it really hard to juggle features vs. issues β the eternal open-source dilemma


Tim de Jagerβs Background
Tim previously worked at:
- Abbey Games β C++ game development
- Smart Robotics β C++ and Python robotics
This cross-domain experience shaped Pixiβs focus on multi-language projects. When youβve worked in robotics where Python meets C++ meets ROS, you understand the pain of managing dependencies across language boundaries.
Why Pixi Is Fun to Build
Tim shared that working on a package manager is uniquely rewarding because:
- It combines algorithmic challenges (SAT solving, dependency resolution) with engineering problems (IO optimization, caching strategies)
- The community is grateful β developers love fast tools
- Active Discord community of ~250 members providing feedback
- His takeaway: βThere is more than cargo. Working on package management is fun.β
Key Takeaways for Rust Developers
- Library-first design pays off β make it a library from day one, not an afterthought
- Dogfood early β use your own tool in production before others do
- Invest in custom solutions where performance matters (Resolvo vs wrapping minisat)
- CI speed is a feature β mock registries and offline tests save enormous time
- HTTP range requests are underutilized β you often donβt need the full archive
- Reflinks/hardlinks should be your first choice, copy your last resort
The Rust Package Manager Landscape
Pixi occupies an interesting niche: itβs not competing with Cargo (Rust packages) but rather with conda, pip, and mamba (Python/C++/multi-language packages). By building in Rust, they get:
- Memory safety without GC pauses during resolution
- Fearless concurrency for parallel downloads
- Zero-cost abstractions for the solver
- Cross-compilation support for all platforms
Related Posts
If youβre interested in Rust language development, check out my coverage of the Inko programming language talk from the same meetup β a language that compiles through Rustβs LLVM backend with Erlang-style concurrency.
For more on developer tooling and package management in the cloud-native space, see:
- Kustomize vs Helm β package management for Kubernetes
- ArgoCD vs Flux β GitOps delivery tools
- The Developer Burden β why tool consolidation matters
Pixi is open source at github.com/prefix-dev/pixi. The RustNL meetup was hosted at the JetBrains office in Amsterdam.