wasmerio / Wasmer Php
Licence: mit
ππΈοΈ WebAssembly runtime for PHP
Stars: β 796
Programming Languages
rust
11053 projects
Projects that are alternatives of or similar to Wasmer Php
Raylib
A simple and easy-to-use library to enjoy videogames programming
Stars: β 8,169 (+926.26%)
Mutual labels: wasm, webassembly
Ssvm
SSVM is a high performance, extensible, and hardware optimized WebAssembly Virtual Machine for cloud, AI, and blockchain applications.
Stars: β 751 (-5.65%)
Mutual labels: webassembly, wasm
Zwitterion
A web dev server that lets you import anything*
Stars: β 514 (-35.43%)
Mutual labels: webassembly, wasm
Awesome Wasm Runtimes
A list of webassemby runtimes
Stars: β 490 (-38.44%)
Mutual labels: webassembly, wasm
Astro
A fun safe language for rapid prototyping and high performance applications
Stars: β 588 (-26.13%)
Mutual labels: webassembly, wasm
Uno
Build Mobile, Desktop and WebAssembly apps with C# and XAML. Today. Open source and professionally supported.
Stars: β 6,029 (+657.41%)
Mutual labels: webassembly, wasm
Awesome Wasm
π Curated list of awesome things regarding WebAssembly (wasm) ecosystem.
Stars: β 6,377 (+701.13%)
Mutual labels: webassembly, wasm
Camaro
camaro is an utility to transform XML to JSON, using Node.js binding to native XML parser pugixml, one of the fastest XML parser around.
Stars: β 438 (-44.97%)
Mutual labels: webassembly, wasm
Dotnet Webassembly
Create, read, modify, write and execute WebAssembly (WASM) files from .NET-based applications.
Stars: β 535 (-32.79%)
Mutual labels: webassembly, wasm
Genact
π A nonsense activity generator
Stars: β 5,109 (+541.83%)
Mutual labels: webassembly, wasm
Wasm And Rust
WebAssembly and Rust: A Web Love Story
Stars: β 476 (-40.2%)
Mutual labels: webassembly, wasm
Graphql Client
Typed, correct GraphQL requests and responses in Rust
Stars: β 620 (-22.11%)
Mutual labels: webassembly, wasm
Asmble
Compile WebAssembly to JVM and other WASM tools
Stars: β 466 (-41.46%)
Mutual labels: webassembly, wasm
Vim.wasm
Vim editor ported to WebAssembly
Stars: β 4,915 (+517.46%)
Mutual labels: webassembly, wasm
Jwebassembly
Java bytecode to WebAssembly compiler
Stars: β 426 (-46.48%)
Mutual labels: webassembly, wasm
Wasmtime
Standalone JIT-style runtime for WebAssembly, using Cranelift
Stars: β 6,413 (+705.65%)
Mutual labels: webassembly, wasm
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
Platform | Architecture | Status |
---|---|---|
Linux | amd64 |
β |
Linux | aarch64 |
β |
Windows | amd64 |
β |
Darwin | amd64 |
β |
Darwin | aarch64 |
β |
PHP | Status |
---|---|
8.0 | β |
7.4 | β |
7.3 | β |
Features
Compilers and engines
Compiler | Status |
---|---|
Cranelift | β |
LLVM | β |
Singlepass | β |
Engine | Status |
---|---|
Native | β |
JIT | β |
Object File | β |
Runtime
Object | Status |
---|---|
config | β |
engine | β |
store | β |
Types
Type | Status |
---|---|
valtype | β |
functype | β |
globaltype | β |
tabletype | β |
memorytype | β |
externtype | β |
importtype | β |
exporttype | β |
Objects
Object | Status |
---|---|
val | β |
frame | β |
trap | β |
foreign | β |
module | β |
func | β |
global | β |
table | π§βπ» |
memory | π§βπ» |
extern | β |
instance | β |
Misc
Feature | Status |
---|---|
WAT | β |
WASI | β |
Cross Compilation | β |
License
The entire project is under the MIT License. Please read the
LICENSE
file.
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].