2019-02-20 00:01:44 +00:00
< p align = "center" >
< a href = "https://wasmer.io" target = "_blank" rel = "noopener noreferrer" >
< img width = "400" src = "https://raw.githubusercontent.com/wasmerio/wasmer/master/logo.png" alt = "Wasmer logo" >
< / a >
< / p >
2018-10-11 19:29:36 +00:00
2018-11-05 13:52:53 +00:00
< p align = "center" >
2019-02-20 00:01:44 +00:00
< a href = "https://circleci.com/gh/wasmerio/wasmer/" >
< img src = "https://img.shields.io/circleci/project/github/wasmerio/wasmer/master.svg" alt = "Build Status" >
< / a >
< a href = "https://github.com/wasmerio/wasmer/blob/master/LICENSE" >
< img src = "https://img.shields.io/github/license/wasmerio/wasmer.svg" alt = "License" >
< / a >
2019-01-28 18:12:23 +00:00
< a href = "https://spectrum.chat/wasmer" >
2019-02-20 00:01:44 +00:00
< img src = "https://withspectrum.github.io/badge/badge.svg" alt = "Join the Wasmer Community" >
2019-01-28 18:12:23 +00:00
< / a >
2018-11-05 13:52:53 +00:00
< / p >
2018-10-11 19:29:36 +00:00
2018-11-05 13:52:53 +00:00
## Introduction
2018-10-11 19:29:36 +00:00
2019-03-27 22:23:43 +00:00
[Wasmer ](https://wasmer.io/ ) is a standalone JIT WebAssembly runtime, aiming to be fully compatible with [WASI ](https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/ ) and [Emscripten ](https://emscripten.org/ ).
2018-12-07 19:21:04 +00:00
Install Wasmer with:
```sh
curl https://get.wasmer.io -sSfL | sh
```
2018-10-11 19:29:36 +00:00
2019-02-20 00:01:44 +00:00
_**NEW ✨**: You can now embed Wasmer in your Rust application, check our [example repo ](https://github.com/wasmerio/wasmer-rust-example ) to see how!_
2019-01-24 22:50:29 +00:00
2018-12-07 19:25:31 +00:00
### Usage
2018-10-11 19:29:36 +00:00
2019-02-20 00:01:44 +00:00
Wasmer can execute both the standard binary format (`.wasm`) and the text
2018-11-05 13:52:53 +00:00
format defined by the WebAssembly reference interpreter (`.wat`).
2018-10-11 19:29:36 +00:00
2019-02-20 00:01:44 +00:00
Once installed, you will be able to run any WebAssembly files (_including nginx and Lua!_):
2018-10-14 21:49:10 +00:00
```sh
2019-01-22 19:34:36 +00:00
# Run Lua
wasmer run examples/lua.wasm
2019-02-20 00:01:44 +00:00
# Run nginx
2018-12-07 04:25:14 +00:00
wasmer run examples/nginx/nginx.wasm -- -p examples/nginx -c nginx.conf
2018-10-14 21:49:10 +00:00
```
2019-01-22 19:34:36 +00:00
## Code Structure
Wasmer is structured into different directories:
2019-02-20 00:01:44 +00:00
- [`src` ](./src ): code related to the Wasmer executable itself
2019-01-22 19:34:36 +00:00
- [`lib` ](./lib ): modularized libraries that Wasmer uses under the hood
2019-02-20 00:01:44 +00:00
- [`examples` ](./examples ): some useful examples to getting started with Wasmer
2019-01-22 19:34:36 +00:00
2019-01-23 05:22:23 +00:00
## Dependencies
2018-10-11 19:29:36 +00:00
2019-02-20 00:01:44 +00:00
Building Wasmer requires [rustup ](https://rustup.rs/ ).
2019-01-23 05:22:23 +00:00
2019-02-14 17:58:33 +00:00
To build on Windows, download and run [`rustup-init.exe` ](https://win.rustup.rs/ )
2019-01-23 05:22:23 +00:00
then follow the onscreen instructions.
2019-02-14 17:58:33 +00:00
To build on other systems, run:
2019-01-23 05:22:23 +00:00
```sh
curl https://sh.rustup.rs -sSf | sh
```
### Other dependencies
Please select your operating system:
2019-01-24 22:50:29 +00:00
- [macOS ](#macos )
- [Debian-based Linuxes ](#debian-based-linuxes )
- [Microsoft Windows ](#windows-msvc )
2019-01-23 05:22:23 +00:00
#### macOS
2019-02-20 00:01:44 +00:00
If you have [Homebrew ](https://brew.sh/ ) installed:
2019-01-23 05:22:23 +00:00
2019-01-24 22:50:29 +00:00
```sh
2019-01-23 05:22:23 +00:00
brew install cmake
```
2019-02-20 00:01:44 +00:00
Or, in case you have [MacPorts ](https://www.macports.org/install.php ):
2019-01-23 05:22:23 +00:00
```sh
sudo port install cmake
```
#### Debian-based Linuxes
2019-01-24 22:50:29 +00:00
```sh
2019-01-23 05:22:23 +00:00
sudo apt install cmake
```
#### Windows (MSVC)
2019-02-20 00:01:44 +00:00
Windows support is _highly experimental_ . Only simple Wasm programs may be run, and no syscalls are allowed. This means
nginx and Lua do not work on Windows. See [this issue ](https://github.com/wasmerio/wasmer/issues/176 ) regarding Emscripten syscall polyfills for Windows.
2019-01-23 05:22:23 +00:00
2019-03-08 02:06:53 +00:00
1. Install [Visual Studio ](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&rel=15 )
2. Install [Rust for Windows ](https://win.rustup.rs )
3. Install [Python for Windows ](https://www.python.org/downloads/release/python-2714/ ). The Windows x86-64 MSI installer is fine.
2019-02-20 00:01:44 +00:00
Make sure to enable "Add python.exe to Path" during installation.
2019-01-23 05:22:23 +00:00
2019-03-08 02:06:53 +00:00
4. Install [Git for Windows ](https://git-scm.com/download/win ). Allow it to add `git.exe` to your PATH (default
2019-01-24 22:50:29 +00:00
settings for the installer are fine).
2019-01-23 05:22:23 +00:00
2019-03-08 02:06:53 +00:00
5. Install [CMake ](https://cmake.org/download/ ). Ensure CMake is in your PATH.
6. Install [LLVM 7.0 ](https://prereleases.llvm.org/win-snapshots/LLVM-7.0.0-r336178-win64.exe )
2019-02-14 17:58:33 +00:00
2019-01-23 05:22:23 +00:00
## Building
Wasmer is built with [Cargo ](https://crates.io/ ), the Rust package manager.
2018-10-11 19:29:36 +00:00
```sh
2018-12-18 05:13:23 +00:00
# checkout code
git clone https://github.com/wasmerio/wasmer.git
2018-10-11 19:29:36 +00:00
cd wasmer
# install tools
# make sure that `python` is accessible.
2019-01-21 02:18:59 +00:00
cargo install --path .
2018-10-11 19:29:36 +00:00
```
2018-10-14 21:49:10 +00:00
## Testing
2019-02-20 00:01:44 +00:00
Thanks to [spec tests ](https://github.com/wasmerio/wasmer/tree/master/lib/spectests/spectests ) we can ensure 100% compatibility with the WebAssembly spec test suite.
2018-10-24 10:07:52 +00:00
2018-10-14 21:49:10 +00:00
Tests can be run with:
```sh
2018-11-15 21:30:00 +00:00
make test
2018-10-14 21:49:10 +00:00
```
2019-02-20 00:01:44 +00:00
If you need to regenerate the Rust tests from the spec tests
2018-10-24 10:07:52 +00:00
you can run:
```sh
make spectests
```
2019-01-18 20:20:13 +00:00
You can also run integration tests with:
```sh
make integration-tests
```
2019-02-22 20:31:31 +00:00
## Benchmarking
Benchmarks can be run with:
```sh
cargo bench --all
```
2018-10-24 10:07:52 +00:00
## Roadmap
2018-10-14 21:54:28 +00:00
Wasmer is an open project guided by strong principles, aiming to be modular, flexible and fast. It is open to the community to help set its direction.
2019-02-20 00:01:44 +00:00
Below are some of the goals of this project (in order of priority):
2018-10-24 10:07:52 +00:00
2019-02-20 00:01:44 +00:00
- [x] It should be 100% compatible with the [WebAssembly spec tests ](https://github.com/wasmerio/wasmer/tree/master/lib/spectests/spectests )
2018-11-22 06:15:13 +00:00
- [x] It should be fast _(partially achieved)_
2019-03-27 22:23:43 +00:00
- [ ] Support WASI _(in the works)_
2019-01-25 16:35:18 +00:00
- [ ] Support Emscripten calls _(in the works)_
2018-10-24 10:07:52 +00:00
- [ ] Support Rust ABI calls
2019-02-20 00:01:44 +00:00
- [ ] Support Go ABI calls
2018-12-07 19:25:31 +00:00
## Architecture
2019-02-20 00:01:44 +00:00
If you would like to know how Wasmer works under the hood, please see [ARCHITECTURE.md ](./ARCHITECTURE.md ).
2018-12-07 19:25:31 +00:00
2018-10-11 19:29:36 +00:00
## License
2019-02-20 00:01:44 +00:00
Wasmer is primarily distributed under the terms of the [MIT license ](http://opensource.org/licenses/MIT ) ([LICENSE](./LICENSE)).
2018-12-19 21:00:07 +00:00
2019-02-20 00:01:44 +00:00
[ATTRIBUTIONS ](./ATTRIBUTIONS.md )