An extremely fast Python package and project manager, written in Rust.
docker pull astral-sh/uv:latest
docker run -d --name uv --restart always astral-sh/uv:latest
podman run -d --name uv --restart always astral-sh/uv:latest
skopeo inspect docker://docker.io/astral-sh/uv:latest
oras pull astral-sh/uv:latest
# Reproducible cross-compilation environment for Windows trampolines.
#
# All toolchain versions are pinned for binary reproducibility.
# This image provides the build environment; the workspace is bind-mounted
# at runtime by scripts/build-trampolines.sh.
ARG UBUNTU_SNAPSHOT=20260127T200000Z
ARG RUST_NIGHTLY=nightly-2026-05-06
ARG XWIN_SDK_VERSION=10.0.22621
ARG XWIN_CRT_VERSION=14.44.17.14
FROM docker.io/ubuntu:26.04@sha256:4095ef613201918336b5d7d00be15d8b09c72ddb77c80bca249c255887a64d87 AS base
ARG RUST_NIGHTLY
ARG UBUNTU_SNAPSHOT
ENV HOME=/app
ENV CARGO_HOME=${HOME}/rust/cargo
ENV RUSTUP_HOME=${HOME}/rust/rustup
ENV XWIN_CACHE_DIR=${HOME}/xwin-cache
WORKDIR ${HOME}
# Install build dependencies
RUN apt install -y --update ca-certificates && \
apt install -y --update --snapshot ${UBUNTU_SNAPSHOT} \
curl \
llvm \
clang \
lld \
python3 \
&& ln -s /usr/bin/llvm-mt /usr/bin/mt.exe \
&& rm -rf /var/lib/apt/lists/*
# Install Rust nightly toolchain with Windows targets
ARG RUSTUP_VERSION=1.29.2
RUN curl --proto '=https' --tlsv1.2 -sSf \
"https://static.rust-lang.org/rustup/archive/${RUSTUP_VERSION}/$(uname -m)-unknown-linux-gnu/rustup-init" \
-o rustup-init \
&& chmod +x rustup-init \
&& ./rustup-init -y --default-toolchain=${RUST_NIGHTLY} --profile=minimal \
&& rm rustup-init
ENV PATH="${CARGO_HOME}/bin:${PATH}"
RUN rustup component add rust-src --toolchain ${RUST_NIGHTLY}-x86_64-unknown-linux-gnu && \
rustup target add --toolchain ${RUST_NIGHTLY} \
i686-pc-windows-msvc \
x86_64-pc-windows-msvc \
aarch64-pc-windows-msvc
# Install cargo-xwin
FROM base AS cargo-xwin
COPY --from=ghcr.io/astral-sh/uv:0.13.0@sha256:cdc6093146eb3ff6a40107b38f008b789e050e77ad87865e381d9917da55a168 /uv /usr/local/bin/uv
COPY toolchain/pyproject.toml toolchain/uv.lock ./
RUN uv sync --locked --no-dev --python /usr/bin/python3
# Prefetch the Windows SDK/CRT
FROM base AS xwin-cache
ARG XWIN_SDK_VERSION
ARG XWIN_CRT_VERSION
COPY --from=cargo-xwin ${HOME}/.venv/bin/cargo-xwin /usr/local/bin/cargo-xwin
RUN cargo xwin cache xwin \
--xwin-sdk-version ${XWIN_SDK_VERSION} \
--xwin-crt-version ${XWIN_CRT_VERSION} \
--xwin-arch x86,x86_64,aarch64
FROM base
COPY --from=xwin-cache ${HOME}/xwin-cache ${HOME}/xwin-cache
RUN chmod a+rwX ${HOME}/xwin-cache
COPY --from=cargo-xwin ${HOME}/.venv/bin/cargo-xwin /usr/local/bin/cargo-xwin
COPY --from=cargo-xwin /usr/local/bin/uv /usr/local/bin/uv