cpython/Platforms/WASI
Brett Cannon b63dc8abdf
Refactor Platforms/WASI/__main__.py for lazy importing and future new subcommands (#145404)
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
2026-03-04 13:27:23 -08:00
..
.ruff.toml Refactor Platforms/WASI/__main__.py for lazy importing and future new subcommands (#145404) 2026-03-04 13:27:23 -08:00
__main__.py Refactor Platforms/WASI/__main__.py for lazy importing and future new subcommands (#145404) 2026-03-04 13:27:23 -08:00
_build.py Refactor Platforms/WASI/__main__.py for lazy importing and future new subcommands (#145404) 2026-03-04 13:27:23 -08:00
config.site-wasm32-wasi
config.toml gh-144675: update to WASI SDK 30 (#144676) 2026-02-11 16:12:08 -08:00
README.md
wasmtime.toml

Python WASI (wasm32-wasi) build

WASI support is tier 2.

This directory contains configuration and helpers to facilitate cross compilation of CPython to WebAssembly (WASM) using WASI. WASI builds use WASM runtimes such as wasmtime.

NOTE: If you are looking for general information about WebAssembly that is not directly related to CPython, please see https://github.com/psf/webassembly.

Build

See the devguide on how to build and run for WASI.

Detecting WASI builds

Python code

import os, sys

if sys.platform == "wasi":
    # Python on WASI
    ...

if os.name == "posix":
    # WASM platforms identify as POSIX-like.
    # Windows does not provide os.uname().
    machine = os.uname().machine
    if machine.startswith("wasm"):
        # WebAssembly (wasm32, wasm64 potentially in the future)
>>> import os, sys
>>> os.uname()
posix.uname_result(
    sysname='wasi',
    nodename='(none)',
    release='0.0.0',
    version='0.0.0',
    machine='wasm32'
)
>>> os.name
'posix'
>>> sys.platform
'wasi'

C code

WASI SDK defines several built-in macros. You can dump a full list of built-ins with /path/to/wasi-sdk/bin/clang -dM -E - < /dev/null.

  • WebAssembly __wasm__ (also __wasm)
  • wasm32 __wasm32__ (also __wasm32)
  • wasm64 __wasm64__
  • WASI __wasi__