wasm / wasm
A complete and mature WebAssembly runtime for PHP based on Wasmer
Installs: 120
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1 022
Watchers: 38
Forks: 43
Open Issues: 18
Requires
- ext-wasm: ^1.0.0
Requires (Dev)
- friendsofphp/php-cs-fixer: @dev
- phpdocumentor/flyfinder: @dev
- phpdocumentor/phpdocumentor: @dev
- phpunit/phpunit: @dev
Replaces
This package is auto-updated.
Last update: 2025-01-18 21:41:59 UTC
README

Wasmer PHP
Website • Docs • Slack Channel
A complete and mature WebAssembly runtime for PHP based on Wasmer.
Features
- Easy to use: The
wasmer
API mimics the standard WebAssembly C API, - Fast:
wasmer
executes the WebAssembly modules as fast as possible, close to native speed, - Safe: All calls to WebAssembly will be fast, but more importantly, completely safe and sandboxed.
Install
To install the library, follow the classical:
git clone https://github.com/wasmerio/wasmer-php cd wasmer-php/ext phpize ./configure --enable-wasmer make make test make install
Note: Wasmer doesn't work on Windows yet.
Examples
Procedural API
<?php declare(strict_types=1); $engine = wasm_engine_new(); $store = wasm_store_new($engine); $wasm = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'hello.wasm'); $module = wasm_module_new($store, $wasm); function hello_callback() { echo 'Calling back...' . PHP_EOL; echo '> Hello World!' . PHP_EOL; return null; } $functype = wasm_functype_new(new Wasm\Vec\ValType(), new Wasm\Vec\ValType()); $func = wasm_func_new($store, $functype, 'hello_callback'); wasm_functype_delete($functype); $extern = wasm_func_as_extern($func); $externs = new Wasm\Vec\Extern([$extern]); $instance = wasm_instance_new($store, $module, $externs); wasm_func_delete($func); $exports = wasm_instance_exports($instance); $run = wasm_extern_as_func($exports[0]); wasm_module_delete($module); wasm_instance_delete($instance); $results = wasm_func_call($run, new Wasm\Vec\Val()); wasm_store_delete($store); wasm_engine_delete($engine);
Object-oriented API
<?php declare(strict_types=1); use Wasm; require_once __DIR__.'/../vendor/autoload.php'; $engine = Wasm\Engine::new(); $store = Wasm\Store::new($engine); $wasm = file_get_contents(__DIR__.DIRECTORY_SEPARATOR.'hello.wasm'); $module = Wasm\Module::new($store, $wasm); function hello_callback() { echo 'Calling back...'.PHP_EOL; echo '> Hello World!'.PHP_EOL; return null; } $functype = Wasm\Functype::new(new Wasm\Vec\ValType(), new Wasm\Vec\ValType()); $func = Wasm\Module\Func::new($store, $functype, 'hello_callback'); $extern = $func->asExtern(); $externs = new Wasm\Vec\Extern([$extern->inner()]); $instance = Wasm\Module\Instance::new($store, $module, $externs); $exports = $instance->exports(); $run = $exports[0]->asFunc(); $args = new Wasm\Vec\Val(); $results = $run($args);
This example covers the most basic Wasm use case: we take a Wasm module (in its text representation form), create an instance from it, get an exported function and run it.
You can go through more advanced examples in the dedicated directories:
Supported platforms and features
Platforms
Features
Compilers and engines
Runtime
Types
Objects
Misc
License
The entire project is under the MIT License. Please read the
LICENSE
file.