The python-native-wasm profile covers packages that combine a
Python distribution, native C or C++ build outputs, and optional WASM
runtime artifacts. Geometer is the reference shape for this profile. This
profile inherits the native tooling expectations from the
C++ Standard.
Returns the current mixed-mode profile for Python packages with native and WASM runtime artifacts.
Renders the mixed-mode profile as text or JSON.
CMakeLists.txt owns the native build graph.CMakePresets.json defines portable native configure presets.python/<package>/ or src/<package>/ owns Python APIs.tests/cpp/, tests/python/, and tests/wasm/ cover runtime surfaces.scripts/validate_native.py builds and smokes the native artifacts.scripts/validate_python_package.py builds a wheel and tests an installed copy.
Pure Python packages use Hatchling. Mixed-mode packages may use a custom
setuptools.build_meta path when the wheel must bundle platform
executables or libraries. The custom hook must be documented and covered by
installed-wheel validation. Native configure presets use Ninja by default
and enable CMAKE_EXPORT_COMPILE_COMMANDS=ON.
Mixed-mode packages may commit distributable runtime artifacts only under
grouped paths such as dist/native/windows-x64/,
dist/native/linux-x64/, dist/native/macos-arm64/,
and dist/wasm/browser/. Root-level files in
dist/ are limited to documentation or manifests.
Local build state remains ignored. Examples include build/,
build-*/, build-wasm/, .deps/,
out/, .venv/, and test result folders.
Release signoff must prove that the native CLI, Python source wrapper, installed wheel, and WASM targets still work. The release gate should run Ruff, Pyright, clang-format, Lizard complexity checks for owned C/C++, CTest, native validation, package validation, and a stale artifact policy check.
Version identity must be synchronized across Python package metadata,
CMake project metadata, CLI --version, native runtime version
APIs, and ABI generation fields. Date-based public versions remain the
default; ABI dates change only when the native ABI generation changes.
CI should keep separate lanes for Python signoff, native build and CTest, platform wheel build and installed-wheel smoke tests, WASM build and smoke tests, and final release validation from a GitHub Release published event.