Open Source · Apache 2.0

Native arm64 scientific
containers, verified to work.

The conda-forge geo stack — GDAL, PROJ, GEOS, rasterio, shapely, scikit-image — won't pip install on arm64 (No matching distribution found for rasterio). It solves clean on conda-forge. aarch.science builds it native for Apple Silicon and AWS Graviton — and proves each image imports and runs, not just solves.

29
verified env images — geospatial, earth-observation, geo-ml, climate, pointcloud, comp-chem, dft, md, viz, r, astro, fem-cfd, cfd-fv, optimization, neuroimaging, single-cell, bayes, geoscience, cp2k, pathology, quantum, hep, structbio, popgen, tomography, psi4, nlp, gw
1.87×
better price/performance on Graviton c7g vs Intel c7i — measured, this workload
solve ≠ run
every image must import & pass a functional smoke test

Looking for a specific tool?
Two questions decide which project has it — the first usually settles it.

aarch.bio aarch.science
unit one tool per image (~503) a curated multi-package env (29)
example samtools, bwa, bcftools geospatial, dft, astro, single-cell
source bioconda / BioContainers conda-forge
you want it when "I need this tool for a pipeline step" "I need a working stack to import against"
you want go to
a drop-in for quay.io/biocontainers/scanpy:… aarch.bio
a stack where scanpy, Seurat, leidenalg and anndata already work together aarch.science single-cell
samtools for one pipeline step aarch.bio
a verified geospatial / DFT / astronomy stack aarch.science

A delivery gap, one layer over

aarch.science stands on conda-forge — an enormous, mostly-volunteer good. The arm64 packages are already there. The way most people reach for them isn't.

The machines doing science are increasingly arm64 — every Apple Silicon Mac, every AWS Graviton instance. We measured the geo-prep stack at 1.87× better price/performance on Graviton c7g vs Intel c7i (1.52× faster, 1.23× cheaper) — for CPU-bound geospatial work.

But the native-library scientific stack — GDAL, PROJ, GEOS and the Python packages on top of them (rasterio, fiona, shapely, pyproj) — has incomplete, Python-version-fragile arm64 wheel coverage on PyPI. Reach for it with pip on a Graviton box and you get No matching distribution found for rasterio. The build falls back to expensive Intel, leaving the price/perf win on the table.

The packages do exist on arm64 — conda-forge ships linux-aarch64 builds, and the whole geo stack solves cleanly there (123 packages, all native). The gap isn't porting; it's that there's no curated, verified set of containers built from those packages. That's what aarch.science fills.

The subtle part — and why "verified" is the whole point: an environment can solve and still fail to assemble on arm64 — a missing native lib, an ABI mismatch, a broken wheel. pip "solved" too, then import rasterio would have failed. So every aarch.science image is tested inside the built arm64 container: it must import every headline package and do real work — reproject a point through PROJ, run GEOS geometry ops, write a GeoTIFF and read it back through both rasterio and raw GDAL. Only then does it earn the tag.

How it works

A curated conda-forge environment, built native per architecture, then proven to run before it's published.

native build

No emulation, ever

Native-library envs build on a native arm64 runner — no QEMU. We never emulate to publish images whose whole purpose is running native on Graviton and Apple Silicon.

curated envs

Whole stacks, not loose packages

conda-forge ships packages, not containers. We curate version-pinned environments by workflow — geospatial first — committed as the source of truth and versioned by content hash.

verified

Solve ≠ run

The build refuses to tag unless the env imports every headline package and passes a functional smoke test inside the arm64 image. The smoke test is baked in, so you can re-run it on what you pull.

provenance

Signed, traceable

Every image is cosign keyless-signed in CI and logged to the Sigstore transparency log. Anyone can verify it was built by our public workflow, from a specific commit — no need to trust us.

Use it

Pull the verified geospatial image and run native. The same image works on an Apple Silicon laptop and a Graviton server.

# pull a verified stack — native arm64, no account docker pull quay.io/aarchsci/geospatial:latest docker pull quay.io/aarchsci/earth-observation:latest docker pull quay.io/aarchsci/geo-ml:latest docker pull quay.io/aarchsci/climate:latest docker pull quay.io/aarchsci/pointcloud:latest docker pull quay.io/aarchsci/comp-chem:latest docker pull quay.io/aarchsci/dft:latest docker pull quay.io/aarchsci/md:latest docker pull quay.io/aarchsci/viz:latest
# re-run the verification yourself — it ships inside the image docker run --rm quay.io/aarchsci/geospatial:latest python /opt/aarchsci/smoke.py

geospatial
110 packages — native arm64, verified, signed, public

The fieldwork CPU-prep stack. Headline packages:

gdal proj geos rasterio fiona shapely pyproj scikit-image numpy scipy … +113 deps, all native arm64

earth-observation
246 packages — native arm64, verified, signed, public

The geospatial base plus the labeled-array / lazy / STAC layer:

+ xarray dask rioxarray stackstac pystac-client odc-stac netcdf4 zarr … on the full geospatial stack

geo-ml
368 packages — CPU machine learning on geospatial / tabular data

+ scikit-learn xgboost lightgbm geopandas pysal statsmodels datashader

climate
267 packages — atmospheric / climate analysis (GRIB + regridding) + ocean thermodynamics

xarray dask cartopy cfgrib / eccodes metpy xesmf / esmpy netcdf4 · zarr cdo · nco gsw (TEOS-10)

pointcloud
234 packages — LiDAR / DEM / terrain processing

+ pdal python-pdal laspy richdem on the full geospatial stack

comp-chem
212 packages — cheminformatics, molecular dynamics, quantum chemistry & docking

rdkit openbabel openmm mdanalysis mdtraj ase pyscf vina

dft
236 packages — plane-wave & LCAO density-functional theory, MPI-parallel

gpaw siesta psi4 nwchem quantum-espresso + sssp ase libxc libvdwxc elpa scalapack openmpi mpi4py spglib phonopy pymatgen

md
246 packages — classical molecular dynamics, MPI-parallel

gromacs lammps ambertools openmpi mpi4py mdanalysis mdtraj parmed

viz
246 packages — headless scientific visualisation, rendered on CPU

paraview pvbatch vtk mesa / llvmpipe Xvfb pillow

r
328 packages — R for scientific work, the catalog's first non-Python env

R 4.5.3 tidyverse data.table arrow sf terra glmnet randomForest caret knitr / rmarkdown Rcpp

astro
361 packages — the Astropy ecosystem, for astronomy and astrophysics, plus N-body dynamics

astropy 8 photutils sunpy healpy yt regions reproject specutils astroquery rebound (N-body)

fem-cfd
131 packages — FEniCSx + CalculiX: finite-element PDE solving and structural FEA, MPI-parallel

fenics-dolfinx basix ufl PETSc SLEPc OpenMPI mpi4py HDF5 / ADIOS2 CalculiX

cfd-fv
56 packages — SU2: finite-volume CFD (compressible / aerodynamic), MPI-parallel

SU2 SU2_CFD OpenMPI mpi4py numpy / scipy

optimization
64 packages — LP & mixed-integer programming (operations research)

HiGHS + highspy SCIP + PySCIPOpt CBC scipy.optimize

neuroimaging
296 packages — volume-based fMRI, diffusion & structural MRI

AFNI DIPY nibabel nilearn nipype scikit-learn

single-cell
532 packages — single-cell transcriptomics, both ecosystems in one image

Scanpy Seurat 5 anndata leidenalg / igraph umap-learn python 3.14 + R 4.5

bayes
125 packages — Bayesian inference & MCMC with Stan

CmdStan 2.40 cmdstanpy ArviZ cxx-compiler

geoscience
113 packages — seismology & groundwater flow (solid earth / subsurface)

ObsPy MODFLOW 6 FloPy numpy / scipy

cp2k
111 packages — CP2K: Gaussian + plane-wave DFT and ab-initio MD, MPI-parallel

CP2K 2026.2 ELPA ScaLAPACK SIRIUS OpenMPI

pathology
209 packages — digital pathology / whole-slide imaging

OpenSlide 4.0 openslide-python tifffile + imagecodecs scikit-image zarr / dask

quantum
165 packages — quantum circuit simulation

Qiskit 2.5 Aer (CPU) qiskit-algorithms OpenFermion QuTiP 5.3

hep
355 packages — high-energy physics

ROOT 6.40 Pythia8 Geant4 11.4 (headless) FastJet / LHAPDF / YODA uproot + awkward

pic
167 packages — particle-in-cell plasma physics

WarpX 26.10 AMReX / pyAMReX openPMD yt OpenMP-threaded

structbio
121 packages — crystallography & structural biology

cctbx 2026.9 gemmi 0.7.5 biopython 1.88

popgen
247 packages — coalescent simulation / population genetics

msprime 1.4.4 tskit 1.0.3 tszip / demes scikit-allel

tomography
88 packages — CT reconstruction

ASTRA 2.5 (CPU) TomoPy 1.15 scikit-image no GPU needed

psi4
82 packages — molecular quantum chemistry

Psi4 1.11 HF / DFT / MP2 / CC own integral stack

nlp
91 packages — natural-language processing

spaCy 3.8 en_core_web_sm no model download

gw
216 packages — gravitational-wave astronomy

Bilby 2.8 LALSuite 7.25 PyCBC 2.10 python 3.13

Verify, don't trust

Two independent things you can check yourself: that it works, and where it came from.

# 1. it actually runs — the functional smoke test ships in the image docker run --rm quay.io/aarchsci/geospatial:latest python /opt/aarchsci/smoke.py # 2. it was built by aarch.science's CI, from source, logged publicly cosign verify quay.io/aarchsci/geospatial:latest \ --certificate-identity-regexp 'github.com/playgroundlogic/aarchsci' \ --certificate-oidc-issuer https://token.actions.githubusercontent.com

Images are built by a public GitHub Actions workflow, keyless-signed with Sigstore, and recorded in the Rekor transparency log. The signature attests which workflow, which repo, which commit produced the image. And because the smoke test is baked in, you can confirm the env imports and runs on your own hardware. Trust the process, not the publisher.