Skip to main content

Releases

Modules and components

WebAssembly binaries may be components built according to the Component Model or modules built to the core WebAssembly specification.

As you begin writing a Wasm application using WASI APIs, one of your first decisions will be which type of binary you want to produce. This decision is typically guided by your use case and the runtime you wish to use. Check to see which WASI releases your runtime supports.

  • Components can use WASI P2 or P3 and the Component Model for composability and interoperability, meaning that a WebAssembly component compiled from one language (Rust, for example) can communicate or be combined with a component compiled from another language (such as Go). WASI P3 adds native async support, building on the foundation established in WASI P2.

  • Modules can use APIs from WASI P1, an earlier stage of WASI's development. Since WASI P2 was released end of January 2024, WASI P1 support is more widespread among Wasm runtimes, and it is widely used in production today.

WASI releases

ReleaseStatusDescription
WASI P3StableNative async support with async func, stream<T>, and future<T>
WASI P2StableComponent Model foundation with WIT interfaces, composability, and cross-language interoperability
WASI P1LegacyPOSIX-inspired module API with broad runtime support

For more information on release timelines and plans, see the Roadmap.

Proposals for the standard

All WASI APIs are proposals for standardization by the WASI Subgroup. The API proposals in WASI P1 and P2 met implementation and portability criteria for inclusion at the time of those releases. A proposal advances through the following stages as defined in the WASI Subgroup's Phase Process:

  • Phase 0 - Pre-proposal: The pre-proposal phase serves as a way to share ideas. At this phase, the WASI subgroup has not yet decided that the pre-proposal is in scope for WASI, and there may be overlap between pre-proposals.
  • Phase 1 - Feature proposal: In this phase, the proposal is added to the proposal list and a new fork of the spec repo is created.
  • Phase 2 - Feature description available: During this phase, one or more implementations prototype the feature and a test suite is added.
  • Phase 3 - Implementation phase: At this phase, project champions create releases following the conventions of semantic versioning (semver).
  • Phase 4 - Standardize the feature: At this point, the feature is fully handed off to the Working Group, where edge cases are considered and only minor changes occur.
  • Phase 5 - The feature is standardized: Once the Working Group reaches consensus that the feature is complete, editors perform final editorial tweaks and merge the feature into the main branch of the primary spec repo.

Proposals are first made to the WASI Subgroup of the WebAssembly Community Group. (See the WASI Subgroup's meeting schedule.)

All active WASI proposals can be found on the WASI GitHub repository. See the Contributing to WASI page for information about submitting a new proposal.

WASI test suite

WASI runtimes are tested against a shared test suite, wasi-testsuite, which exercises interfaces from WASI P1 and WASI P3 across runtime implementations. The repository includes a test runner with adapters for the major runtimes (Wasmtime, jco, WAMR, and others), and is the shared reference for verifying runtime conformance.

Active proposals

Phase 5 - The Feature is Standardized (WG)

API ProposalDescriptionRepository

Phase 4 - Standardize the Feature (WG)

API ProposalDescriptionRepository

Phase 3 - Implementation Phase (SG)

API ProposalDescriptionRepository
I/OStreams, pollables, and async wait primitives; removed in WASI P3https://github.com/WebAssembly/WASI/tree/main/proposals/io
ClocksWall-clock and monotonic-clock accesshttps://github.com/WebAssembly/WASI/tree/main/proposals/clocks
RandomCryptographically secure and insecure random byte generationhttps://github.com/WebAssembly/WASI/tree/main/proposals/random
FilesystemFile and directory operations on preopened directorieshttps://github.com/WebAssembly/WASI/tree/main/proposals/filesystem
SocketsTCP and UDP networking, plus DNS resolutionhttps://github.com/WebAssembly/WASI/tree/main/proposals/sockets
CLIEnvironment variables, command-line arguments, stdio, and process exithttps://github.com/WebAssembly/WASI/tree/main/proposals/cli
HTTPIncoming and outgoing HTTP request and response handlinghttps://github.com/WebAssembly/WASI/tree/main/proposals/http

Phase 2 - Proposed Spec Text Available (CG + WG)

API ProposalDescriptionRepository
Clocks: TimezoneTimezone-aware datetime conversions and UTC offsetshttps://github.com/WebAssembly/WASI/tree/main/proposals/clocks
HTTP: Informational Outbound Response1xx informational response support for outbound HTTPhttps://github.com/WebAssembly/WASI/tree/main/proposals/http
I2CInter-Integrated Circuit bus access for embedded peripheralshttps://github.com/WebAssembly/wasi-i2c
Key-value StoreCRUD operations against a key-value backendhttps://github.com/WebAssembly/wasi-kv-store
Machine Learning (wasi-nn)Inference against pre-trained ML modelshttps://github.com/WebAssembly/wasi-nn
Runtime ConfigRead-only access to host-provided configuration valueshttps://github.com/WebAssembly/wasi-runtime-config
GFXCross-platform graphics primitives for surfaces and frameshttps://github.com/WebAssembly/wasi-gfx
MessagingPublish/subscribe and request/reply messaging primitiveshttps://github.com/WebAssembly/wasi-messaging

Phase 1 - Feature Proposal (CG)

API ProposalDescriptionRepository
Blob StoreObject-storage operations on containers and blobshttps://github.com/WebAssembly/wasi-blob-store
CryptoSignatures, hashing, and symmetric encryption primitiveshttps://github.com/WebAssembly/wasi-crypto
GPIOGeneral-purpose digital I/O pin control for embedded deviceshttps://github.com/WebAssembly/wasi-gpio
Distributed Lock ServiceDistributed locking primitives for coordinating across nodeshttps://github.com/WebAssembly/wasi-distributed-lock-service
LoggingStructured logging with severity levelshttps://github.com/WebAssembly/wasi-logging
ObserveApplication telemetry plumbing for observability toolinghttps://github.com/dylibso/wasi-observe
OTelOpenTelemetry traces, metrics, and logshttps://github.com/calebschoepp/wasi-otel
ParallelParallel computation primitives such as map and reducehttps://github.com/WebAssembly/wasi-parallel
Pattern MatchPattern matching against strings using regex-style expressionshttps://github.com/WebAssembly/wasi-pattern-match
SPISerial Peripheral Interface bus access for embedded peripheralshttps://github.com/WebAssembly/wasi-spi
SQLConnection-oriented SQL database operationshttps://github.com/WebAssembly/wasi-sql
SQL EmbedEmbedded SQL execution against in-process databaseshttps://github.com/WebAssembly/wasi-sql-embed
ThreadsNative thread spawning and synchronization for componentshttps://github.com/WebAssembly/wasi-native-threads
TLSTransport Layer Security for sockets and other byte streamshttps://github.com/WebAssembly/wasi-tls
URLURL parsing, construction, and manipulationhttps://github.com/WebAssembly/wasi-url
USBUSB device enumeration and host communicationhttps://github.com/WebAssembly/wasi-usb

Phase 0 - Pre-Proposal (CG)

ProposalDescriptionRepository
proxy-wasm/specPlugin interface for proxies and gateways; will advance as multiple smaller proposalshttps://github.com/proxy-wasm/spec

Versioning

Proposals remain in the 0.x semver range until they reach Phase 5 and are fully standardized. At that point, a 1.0 release should be made available.