The python-native-wasm profile covers packages that combine a
Python distribution, native C or C++ build outputs, and optional WASM
runtime artifacts. 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.
CMakePresets.json remains a permitted compatibility graph.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. Bazel lanes build, test, and generate compile
commands. CMake compatibility presets use Ninja and enable
CMAKE_EXPORT_COMPILE_COMMANDS=ON.
Mixed-mode packages that commit distributable runtime artifacts should use
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.
These grouped paths are not mandatory for every mixed/native package. Some
packages use dist/native/** or dist/wasm/** only
as ignored local staging until a release channel explicitly promotes an
artifact.
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,
Bazel module or 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 Bazel test or CTest, platform wheel build and installed-wheel smoke tests, WASM build and smoke tests, and final release validation from a GitHub Release published event.