Skip to content

pixi 0.71.0 - #289624

Merged
BrewTestBot merged 2 commits into
mainfrom
bump-pixi-0.71.0
Jun 24, 2026
Merged

pixi 0.71.0#289624
BrewTestBot merged 2 commits into
mainfrom
bump-pixi-0.71.0

Conversation

@BrewTestBot

Copy link
Copy Markdown
Contributor

Created by brew bump


Created with brew bump-formula-pr.

Details

release notes
## Release Notes

✨ Highlights

This release adds a lot of exciting features.

⚠️ Breaking: Configurable Conda to PyPI name mappings

Pixi now gives you more control over how conda packages are matched to PyPI packages.

Previously you could already have an external map, in a file that overwrote the mappings we generate with parselmouth

There were a couple of problems though:

  1. It was alwys a full overwrite,
  2. We write a single-file compressed mapping, but it was not usable directly in Pixi and needed to be modified.

Especially 2, limited people on corporate networks to host their own mappings. We've now made a bunch of improvements:

Workspace conda-pypi-map now supports per-channel configuration with:

  1. inline mappings,
  2. remote mapping files, local was already supported,
  3. Direct support for linking to: https://github.com/prefix-dev/parselmouth/blob/main/files/compressed_mapping.json
  4. overlay (new) vs replacement (old) behavior,
  5. explicit opt-out for certain packages,
  6. and finally control over the same-name heuristic. Meaning that in case of a fallback you can enable just taking the conda as the PyPI name.

This makes it easier to fix individual name mismatches, use private channel mappings, or run reliably in
offline and firewall-restricted environments.

And with remote mapping files specifically, you could host an accurate mapping on your own infrastructure by using the compressed mapping, no need to hit an external network.

[workspace.conda-pypi-map]
# Fix a few names while falling back to Pixi's default mapping.
conda-forge = { mapping = { pytorch = "torch", not-on-pypi = false } }

# Treat a custom mapping as the source of truth for a channel.
my-company = { location = "mapping.json", mapping-mode = "replace" }

# Disable PyPI name derivation for one channel.
internal = false

The Python build backend also gains pypi-conda-map, letting pixi-build-python override PyPI-to-conda
dependency mapping inline before consulting the mapping service:

[package.build.config]
ignore-pypi-mapping = false
pypi-conda-map = { torch = "pytorch", my-internal-pkg = false }

All in all, this is a breaking change, since bare mapping locations such as conda-forge = "mapping.json" are now additive overlays by default.
To restore the old source-of-truth behavior, use:

conda-forge = { location = "mapping.json", mapping-mode = "replace", same-name-heuristic = false }

conda-pypi-map = false now fully disables PyPI name derivation, including same-name guessing. The
legacy conda-pypi-map = {} behavior is still supported but deprecated; spell it explicitly as:

conda-pypi-map = { conda-forge = { mapping-mode = "replace" } }
Rich platforms

We deprecated [system-requirements] in favor of the much more expressive rich platform support.
On top of operating systems and processor architecture, platforms can now also include system requirements like CUDA or glibc version:

[workspace]
platforms = [
  "osx-arm64",
  { platform = "linux-64", cuda = "12.0", glibc = "2.28" },
  { name = "jetson-nano", platform = "linux-aarch64", cuda = "12.8" },
]

Speaking of CUDA, together with rich platforms we added support for __cuda_arch.
We already supported __cuda which allows specifying the driver version you require.
With __cuda_arch, you can specify the necessary hardware architecture.

v3 Repodata

We also added support for v3 repodata.
That means you can declare extra dependency groups:

[package.extra-dependencies.test]
hypothesis = "*"
pytest = ">=8"

[package.extra-dependencies.cuda]
cupy = ">=13"

And of course you can also consume them:

[dependencies]
mypackage = { path = "./mypackage", extras = ["test"] }

It also includes the when keyword:

[package.run-dependencies]
unix-helper = { version = "*", when = "__unix" }

And it allows to set flags:

[package.build]
backend = { name = "pixi-build-cmake", version = "0.*" }
# not required:
channels = ["https://prefix.dev/conda-forge"]
config = { key = "value" } # Optional configuration, specific to the build backend
flags = [
  "cuda",
  "blas_openblas",
] # Optional variant flags recorded in the package metadata

Note that while the conda-forge channel does not support v3 repodata just yet. You can start using it for your local (pixi build) source built packages.

Conditional dependencies

Finally, we revamped the way we define conditional dependencies.
We deprecated [package.target.*.host,build,run-dependencies] and introduce the following syntax:

# Only needed when cross-compiling (host platform differs from build platform).
[package.build-dependencies."if(host_platform != build_platform)"]
cross-python = "*"

# Only on Linux.
[package.host-dependencies."if(host_platform == 'linux-64')"]
libgl-devel = ">=1.7.0,<2"

# Based on a build variant.
[package.host-dependencies."if(matches(python, '>=3.10'))"]
exceptiongroup = "*"

NOTE: This only affects source dependencies, [target.*.dependencies] remains valid.

Breaking changes

  • Make conda-pypi mappings configurable by @tdejager in #6333

Added

  • Rich Platform support by @hunger in #6178
  • Support extras, flags and when on conda dependencies by @Hofer-Julian in #6262
  • Do not run tests un unsupported platforms by @hunger in #6339
  • Support if(...) conditional package dependencies by @Hofer-Julian in #6269
  • Support wildcard platform target selectors by @hunger in #6301
  • pixi add skips already-present packages without version spec by @ruben-arts in #6352
  • Make package.build.backend.version optional by @Hofer-Julian in #6384
  • Add --no-pypi flag to conda-environment export by @baszalmstra in #6380
  • Derive c_stdlib build variants from system requirements by @hunger in #6320
  • Friendly __cuda_arch support by @hunger in #6408

Changed

  • Make test_info_output_extended platform-agnostic by @Hofer-Julian in #6314
  • Key locked records by declared platform for rich platforms by @hunger in #6315
  • Detect extra-dependency drift for source packages by @Hofer-Julian in #6263
  • Attest the tarballs and the binary inside separately by @hunger in #6266
  • Allow to re-order, do not sort in the one place that persisted by @hunger in #6346
  • Recommend 'pixi workspace platform add' in target help by @hunger in #6358
  • Do not fail when asked to install an environment with an unused requirement not used by @hunger in #6389
  • Resolve pre-v7 lockfiles for migrated platforms by @hunger
  • Use rust integration tests. by @hunger in #6375
  • Relock advanced_cpp doc example by @tdejager in #6403
  • Forward declared __cuda_arch to the solver by @hunger in #6404
  • Repair main CI failures by @tdejager in #6406

Documentation

  • Remove pixi-inject page by @pavelzw in #6276
  • Add a pixi-build v3 example using extras, flags and when by @Hofer-Julian in #6264
  • Mention code execution of pixi-build in security section by @pavelzw in #6361

Fixed

  • Move examples satisfiability tests to Python by @Hofer-Julian in #6300
  • Honor workspace [cache.*] overrides for conda-pypi mapping cache by @baszalmstra in #6284
  • Stop source builds rebuilding from scratch on every run by @baszalmstra in #6285
  • Suggest the correct cache config key in netfs-redirect warning by @baszalmstra in #6282
  • Skip example satisfiability checks on unsupported platforms by @tdejager in #6311
  • Skip pytorch doc examples on platforms they don't support by @hunger in #6317
  • Stop requiring old backend version doc example by @Hofer-Julian in #6338
  • Allow OCI channels by @baszalmstra in #6341
  • Move workspace variants build test under pixi_build by @hunger in #6345
  • Detect site-packages clobbering of conda packages by PyPI wheels by @tdejager in #6344
  • Refactor test for pixi workspaces by @ruben-arts in #6351
  • Removing environment updates lockfile by @ruben-arts in #6337
  • Derive used variants from conditional dependencies by @Hofer-Julian in #6354
  • Resolve initialization manifest bugs and restructure the init module by @samrosenf in #6294
  • Update stale detached environment and build symlinks by @kilian-hu in #6154
  • Anchor [tool.uv.sources] paths to workspace root in pixi.lock by @jevandezande in #6187
  • Stop adapting backend behaviour based on build/host dependencies by @Hofer-Julian in #6356
  • Verify PyPI lock file hashes during install by @tdejager in #6353
  • Set exclude-newer for pixi-build-rust to 0d by @Hofer-Julian in #6394
  • Set macOS deployment target for PyPI source builds by @tdejager in #6396
  • Install env in PyPI git add test by @tdejager in #6401
  • Fix CI on main by @Hofer-Julian in #6402
  • Abi3 run export handling for pixi-build-python by @pavelzw in #5751
  • Refresh conda-meta/pixi marker when a platform changes by @hunger in #6366
  • Pin boltons to 25.0.0 in purl hash-mapping test by @Hofer-Julian in #6422

Performance

  • Parallelize lockfile source pypi and conda satisfiability checks by @baszalmstra in #6400

Refactor

  • Pypi mapping module so that its a bit more logically named by @tdejager in #6302

New Contributors

  • @jevandezande made their first contribution in #6187

Download pixi 0.71.0

File Platform Checksum
pixi-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
pixi-x86_64-apple-darwin.tar.gz Intel macOS checksum
pixi-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
pixi-aarch64-pc-windows-msvc.msi ARM64 Windows checksum
pixi-x86_64-pc-windows-msvc.zip x64 Windows checksum
pixi-x86_64-pc-windows-msvc.msi x64 Windows checksum
pixi-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
pixi-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
pixi-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum

View the full release notes at https://github.com/prefix-dev/pixi/releases/tag/v0.71.0.


@github-actions github-actions Bot added rust Rust use is a significant feature of the PR or issue bump-formula-pr PR was created using `brew bump-formula-pr` labels Jun 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🤖 An automated task has requested bottles to be published to this PR.

Caution

Please do not push to this PR branch before the bottle commits have been pushed, as this results in a state that is difficult to recover from. If you need to resolve a merge conflict, please use a merge commit. Do not force-push to this PR branch.

@github-actions github-actions Bot added the CI-published-bottle-commits The commits for the built bottles have been pushed to the PR branch. label Jun 24, 2026
@BrewTestBot
BrewTestBot enabled auto-merge June 24, 2026 17:28
@BrewTestBot
BrewTestBot added this pull request to the merge queue Jun 24, 2026
Merged via the queue into main with commit c153c00 Jun 24, 2026
22 checks passed
@BrewTestBot
BrewTestBot deleted the bump-pixi-0.71.0 branch June 24, 2026 17:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bump-formula-pr PR was created using `brew bump-formula-pr` CI-published-bottle-commits The commits for the built bottles have been pushed to the PR branch. rust Rust use is a significant feature of the PR or issue

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants