πŸš€ An OSS project to develop and run serverless applications on WebAssembly

Overview

Wasm Workers Server

Wasm Workers Server (wws) is a framework to develop and run serverless applications server in WebAssembly. These applications are composed by multiple modules called "workers". Each of these tiny modules is in charge of replying to a specific HTTP path in your application.

The server loads the existing Wasm modules and compatible languages in the given path. The filenames and folders determine the final routes that will be served. This is called "filesystem routing" and is a popular technique. Successful frameworks such as NextJS and Eleventy work in this way.

Here you have an example of running the tool:

$ ls .
index.wasm api

$ wws .
βš™οΈ  Loading routes from: .
πŸ—Ί  Detected routes:
    - http://127.0.0.1:8080/
      => index.wasm (name: default)
    - http://127.0.0.1:8080/api/hello
      => api/hello.js (name: default)
πŸš€ Start serving requests at http://127.0.0.1:8080

Documentation

All our documentation is available at https://workers.wasmlabs.dev.

Get Started

Wasm Workers Server runs almost anywhere. Thanks to its portability, downloading and running it anywhere is quite simple:

curl -fsSL https://workers.wasmlabs.dev/install | bash && \
  wws --help

You will see the help of the server:

Usage: wws [OPTIONS] [PATH] [COMMAND]

Commands:
  runtimes  Manage the language runtimes in your project
  help      Print this message or the help of the given subcommand(s)

Arguments:
  [PATH]  Folder to read WebAssembly modules from [default: .]

Options:
      --host <HOSTNAME>  Hostname to initiate the server [default: 127.0.0.1]
  -p, --port <PORT>      Port to initiate the server [default: 8080]
      --prefix <PREFIX>  Prepend the given path to all URLs [default: ]
  -h, --help             Print help
  -V, --version          Print version

Then, you can download some of our example modules and try them directly:

curl https://raw.githubusercontent.com/vmware-labs/wasm-workers-server/main/examples/js-basic/index.js \
  -o ./index.js && \
  wws .

The server will start immediately:

βš™οΈ  Loading routes from: .
πŸ—Ί  Detected routes:
    - http://127.0.0.1:8080/
      => index.js (name: default)
πŸš€ Start serving requests at http://127.0.0.1:8080

Now, open your browser at http://127.0.0.1:8080.

Local installation

By default, our install.sh script will place the wws binary in the /usr/local/bin path. If you want to install it in your current path, you can run the installer with the --local option:

curl -fsSL https://workers.wasmlabs.dev/install | bash -s -- --local && \
  ./wws --help

Running in a container

If you don't want to install anything locally you can just run wws from the ghcr.io/vmware-labs/wws:latest container image. All you need to do is:

  • Map a local folder with workers to /app within the container
  • Expose port 8080 from the container

Here is how to quickly run a container with an ad-hoc worker from the /tmp/wws-app folder:

mkdir /tmp/wws-app 2>/dev/null;
echo 'addEventListener("fetch", (e) => { return e.respondWith(new Response("Hello from WWS\n"));});' > /tmp/wws-app/index.js;
docker run --rm -v /tmp/wws-app:/app -p 8080:8080 ghcr.io/vmware-labs/wws:latest

Language Support

Wasm Workers Server focuses on simplicity. We want you to run workers (written in different languages) safely in WebAssembly. For interpreted languages, we add different interpreters:

Language Support Requires an external runtime
Rust βœ… No
JavaScript βœ… No
Ruby βœ… Yes
Python βœ… Yes
... ... ...

To get more information about multi-language support in Wasm Workers Server, check our documentation.

Development

Prerequisites

To work with this project you will need to install:

Run the project

After installing the different prerequisites, you can run the development environment with:

$ cargo run -- --help

This command will run the server and look for .wasm and compatible modules (like .js) in the folder you pass via arguments. Check the examples folder to get more information about creating Wasm workers.

Documentation

  • src: includes the source code for the Wasm Workers Server project
  • examples: folder to generate different example workers. Check the README file inside to get more information about how to build those
Comments
  • Use QuickJS instead of Rust: Rust requires at least 1GB disk space to install

    Use QuickJS instead of Rust: Rust requires at least 1GB disk space to install

    Is your feature request related to a problem? Please describe.

    The last time I checked Rust requires at least 1GB of disk space to install. When running a live OS using RAM starting out with 1GB of disk space installing Rust is prohibitive, essentially not possible.

    Describe the solution you'd like

    Develop the server application relying on QuickJS or txiki.js. QuickJS after strip is less than 1MB. tjs (txiki.js) executable after building is 7.6MB without strip and supports WASM.

    Describe alternatives you've considered

    I proposed WinterCG take up specifying a server that can be used by Node.js, Deno, Bun, QuickJS, txiki.js. The reply was that is not in the scope of their goals.

    Options are limited when Rust is a requirement.

    Additional context

    We only have to build the network binding once. Then we don't have to rely on 1GB+ Rust installation anymore just to compile a local server.

    πŸ› bug 
    opened by guest271314 20
  • can't start wss in android (termux).

    can't start wss in android (termux).

    Hi I'm try using https://termux.dev to run this, but I'm facing this...

    /wws . 
    βš™οΈ  Loading routes from: .
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 22, kind: InvalidInput, message: "Invalid argument" }', /home/ereslibre/.cargo/registry/src/github.com-1ecc6299db9ec823/wasmtime-jit-1.0.1/src/code_memory.rs:63:14
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace```
    opened by X7md 5
  • Improve filesystem routing and path management

    Improve filesystem routing and path management

    Refactor the logic to load the app routes from the filesystem. Before, we were using functions instead of related struct implementations. The code was not clear and structs were taking mixed responsibilities. For example, we had a public function to retrieve_best_route that takes Routes as a parameter. I converted this into a Routes's method directly.

    This is the list of changes I applied:

    • Create a separate folder for the filesystem routing logic (router)
    • Split Routes and Route structs into separate files
    • Move public functions to struct implementations to avoid passing references around to provide a result
    • Replace glob library with wax. This library provides a better support for glob patterns. For example, glob doesn't support multiple options like *.{js,wasm}
    • Update the main entrypoint to use the new APIs. It didn't require many changes.

    It closes #3

    πŸš€ enhancement cla-not-required 
    opened by Angelmmiguel 4
  • Support static assests in handlers

    Support static assests in handlers

    Some handlers return HTML code that may require static assets such as JavaScript (client-side) and CSS. Currently, it can be injected in the handler, however is much more convenient to provide a way to set static files.

    We can provide this feature using two approaches:

    • Mount generic folders (using WASI) in the handler and provide libraries to manage those files
    • Add a new data.folder configuration property that will serve the files directly using the Rust server

    The final approach is still under discussion.

    πŸš€ enhancement 
    opened by Angelmmiguel 4
  • Display a message with the number of detected workers

    Display a message with the number of detected workers

    As described in #103, This PR adds a message the number of workers before processing them.

    You can see the message like below.

    % cargo build
    % cd examples/
    % ../target/debug/wws .
    βš™οΈ  8 files are identified as workers. Start processing them
    βš™οΈ  Loading routes from: .
    πŸ—Ί  Detected routes:
        - http://127.0.0.1:8080/js-redirect/handler
          => ./js-redirect/handler.js (name: default)
        - http://127.0.0.1:8080/js-json/handler
          => ./js-json/handler.js (name: test)
        - http://127.0.0.1:8080/js-basic
          => ./js-basic/index.js (name: default)
        - http://127.0.0.1:8080/js-tictactoe/handler
          => ./js-tictactoe/handler.js (name: tictactoe)
        - http://127.0.0.1:8080/js-params/[id]
          => ./js-params/[id].js (name: default)
        - http://127.0.0.1:8080/js-params/fixed
          => ./js-params/fixed.js (name: default)
        - http://127.0.0.1:8080/js-params/sub/[id]
          => ./js-params/sub/[id].js (name: default)
        - http://127.0.0.1:8080/js-params/[id]/fixed
          => ./js-params/[id]/fixed.js (name: default)
    πŸš€ Start serving requests at http://127.0.0.1:8080
    

    resolve #103

    cla-rejected 
    opened by gibachan 3
  • feat: read static files from the public folder

    feat: read static files from the public folder

    Support static files by reading them from the public folder in the root of the project. Any file inside this folder will be served as a static file, so project like static sites can work without embedding files in the workers. This is a pretty consistent standard in different web frameworks like:

    Note that the public folder based on the given path in the CLI. So, for wws ./examples, the CLI will serve the files from ./examples/public. There's an issue with path management as wws ./examples should calculate the routes without including the examples folder. This issue will be solved in #3.

    It closes #7

    cla-not-required 
    opened by Angelmmiguel 3
  • add support IPv6 hostname

    add support IPv6 hostname

    on previous version

    wws --host "[::]"
    
    Error: Custom { kind: Uncategorized, error: "failed to lookup address information: nodename nor servname provided, or not known" }
    
    opened by taisukef 3
  • Improve path management in wws

    Improve path management in wws

    The wws server relies on the local filesystem heavily. The way we are managing paths at this point may cause issues when running the server in Windows environments. In addition to that, the way we check for multiple extensions is quite complex and error prone.

    The goal for this issue is to:

    • Define available extensions in a constant (in the future we may mek this configurable)
    • Limit the conversion of paths to String and &str to printing data
    • Rely on Path and PathBuf for any path management requirement
    πŸš€ enhancement 
    opened by Angelmmiguel 3
  • typo: python.md

    typo: python.md

    Describe the bug

    https://github.com/vmware-labs/wasm-workers-server/blob/0b87331d9a20c8dc20309c169019a638f0376edf/docs/docs/languages/python.md?plain=1#L148-L150

    In python.md, it says To read them in Ruby," but shouldn't this be "To read them in Python, ? It's a very small thing, but I noticed it, so I opened an issue.

    Reproduction steps

    N/A

    Expected behavior

    The text in python.md above will be modified.

    Additional context

    No response

    :memo: documentation 
    opened by Trippy3 2
  • feat: create methods to manage runtimes

    feat: create methods to manage runtimes

    This PR includes several refactors and new features to manage language runtimes. In general, this PR prepares the code for the complete feature. The main changes applied to this PR are:

    • Create a new set of utilities for fetching data. It uses reqwest in async mode. For the validation side, it receives a Checksum instance to validate against the content.
    • Refactor the Data struct that was used for language runtimes to install transient files in a .wws directory. Now, we also need to download and store runtime files such as wasm modules, polyfills and templates. For this reason, I moved the .wws folder management into a global Store struct. I also fixed the routes to work on Windows too.
    • Create a "manager" set of utilities to initialize runtimes, install and download associated files. It uses the aforementioned Store struct to create the files in the correct location.
    • Merge all repository / runtime metadata structs into a common runtimes/metadata.rs file. This way is less confusing to understand the scope of those structs.
    • Unfortunately, I run into lifetimes issues with Serde and the Repository -> Runtime -> RemoteFile struct. In the end, I opted for making all owned types and revisit it in the future 😞
    • Add a filename field to the RemoteFile struct.

    Usage experience

    println!("πŸ—Ί  Fetching index!");
    let repo = Repository::from_remote_file(
        "https://raw.githubusercontent.com/Angelmmiguel/wws-index-test/main/index.toml",
    ).await.unwrap();
    
    let runtime = repo.runtimes.first().unwrap()
    
    println!("πŸ—Ί  Installing  runtime...");
    println!("{}", runtime);
    install_runtime("wlr", runtime).await.unwrap();
    

    And then, you can inspect the .wws folder:

    ~/W/o/wws ❯❯❯ tree .wws
    .wws
    β”œβ”€β”€ runtimes
    β”‚Β Β  β”œβ”€β”€ rust
    β”‚Β Β  └── wlr
    β”‚Β Β      └── ruby
    β”‚Β Β          └── 3.2.0+20230118-8aec06d
    β”‚Β Β              β”œβ”€β”€ poly.rb
    β”‚Β Β              β”œβ”€β”€ ruby.wasm
    β”‚Β Β              └── template.txt
    └── workers
        └── js
            └── 961b7b706f36e745dc7c3306a2a41214ddac3ad41a38fa8da6a2460058235420
                └── index.js
    

    It closes #66

    cla-not-required 
    opened by Angelmmiguel 2
  • fix: avoid exiting as Tokio needs to manage open threads. Fix typo

    fix: avoid exiting as Tokio needs to manage open threads. Fix typo

    Properly manage errors when running commands by using the Result return value. Before, I was exiting the CLI earlier and that was causing the app to panik. The reason is that, Actix uses Tokio under the hood for managing async code. Tokio need to manage the entire application to ensure the threads are properly finished. By exiting early, we force the program to panik.

    I also fixed a small typo.

    Result

    ./wws install ruby latest
    βš™οΈ  Fetching data from the repository...
    πŸš€ Installing the runtime...
    ❌ There was an error installing the runtime from the repository
    πŸ‘‰ The checksums don't match
    Error: Custom { kind: InvalidData, error: "" }
    

    I couldn't remove the "Error: Custom" message for now. However, this is much better than the previous output so I'll investigate why this is happening in a future version.

    It closes #96

    πŸ› bug cla-not-required 
    opened by Angelmmiguel 1
  • Allow to load a wasm file from a remote registry

    Allow to load a wasm file from a remote registry

    Is your feature request related to a problem? Please describe.

    I publish my wasm plugin on wapm.io or a GitLab Generic Package registry. At the start of wws I would like to be able to set an option or an environment variable with the URL of the wasm module to download the module and then start/serve it.

    Describe the solution you'd like

    wws \ 
    --remote-location https://gitlab.com/api/v4/projects/${PROJECT_ID}/packages/generic/${PACKAGE}/${VERSION}/${MODULE}" \
    --save-to ./hello
    
    

    Describe alternatives you've considered

    No response

    Additional context

    No response

    opened by k33g 2
  • The wws container image doesn't include valid certificates

    The wws container image doesn't include valid certificates

    Describe the bug

    When installing a runtime in the wws container image, it fails due to missing certificates. Since it's a scratch image, it doesn't include any trusted certificate repository.

    Reproduction steps

    1. Run `docker run --rm ghcr.io/vmware-labs/wws:preview /wws runtimes install python latest
    2. Get the error

    These are the logs:

    Unable to find image 'ghcr.io/vmware-labs/wws:preview' locally
    c1994d4857c7: Download complete
    bcdcd7e7fe33: Download complete
    eb70f13fc605: Download complete
    d018807117cb: Download complete
    βš™οΈ  Fetching data from the repository...
    ❌ There was an error installing the runtime from the repository
    πŸ‘‰ error sending request for url (https://workers.wasmlabs.dev/repository/v1/index.toml): error trying to connect: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1919: (unable to get local issuer certificate)
    

    Expected behavior

    It properly downloads the runtime and save it.

    Additional context

    We can install certificates in a fresh container as a previous step and then, copy them in the scratch final image.

    πŸ› bug 
    opened by Angelmmiguel 0
  • Allow to load a repository file from local filesystem

    Allow to load a repository file from local filesystem

    Is your feature request related to a problem? Please describe.

    Afetr adding support for multiple languages in wws 1.0.0, we introduced the concept of the index repository. This toml file contains information about the available language runtimes developers can download.

    We constantly release new versions of these runtimes as we add new languages, versions and revisions of the polyfills and wrappers. To test them, you need to point your local installation to a different location by using the WWS_REPO_NAME and WWS_REPO_URL environment variables (or the --repo-name and --repo-url params).

    These URLs are always remote, as the file:// URL scheme is not allowed.

    Describe the solution you'd like

    Allow to get the index.toml and related files from the local filesystem. We can detect these URLs and use the File rust library. Note that reqwest doesn't plan to support the file:// scheme as the project focuses on HTTP requests.

    Describe alternatives you've considered

    Currently, I'm uploading these files to public gists for testing, but it shouldn't be required.

    Additional context

    No response

    πŸš€ enhancement πŸ‘‹ good first issue 
    opened by Angelmmiguel 0
  • Revisit how wws-server and wws-worker communicates together

    Revisit how wws-server and wws-worker communicates together

    Is your feature request related to a problem? Please describe.

    This is not an issue, but a refactor

    The wws-server uses the wws-worker crate to get a response for the different requests. To run the worker module, it requires to transform the input from a HttpRequest to WasmInput (JSON) and the output from WasmOutput (JSON) to a HttpResponse.

    The input transformation is done in the wws-worker while the output is managed by the wws-server. This is an incosistent behavior.

    Describe the solution you'd like

    We should establish the right boundaries and moving transformations to a single place. I would say the wws-worker shouldn't require on actix-web. For this reason, the input transformations must be moved to wws-server and keep wws-worker to work only with WasmInput and WasmOutput structs.

    Describe alternatives you've considered

    I also considered to move the output transformation logic to the wws-worker crate. However, this approach reduces the reusability of the wws-worker crate as it now depends to actix-web.

    Additional context

    This conversation started on https://github.com/vmware-labs/wasm-workers-server/pull/106#discussion_r1136797914

    πŸš€ enhancement 
    opened by Angelmmiguel 0
  • Display a message with the number of detected workers before processing them

    Display a message with the number of detected workers before processing them

    Is your feature request related to a problem? Please describe.

    By default, wws looks for workers in the given path and any directory inside. In certain projects, you may have some extra folders like python venv or NodeJS modules. You don't want these folders to be processed and this will be covered by #47.

    However, this issue is not easy to notice. As discussed in #101, the CLI just hangs while trying to load all the files in the given directory.

    Describe the solution you'd like

    To inform the user about this, we can add a new message before start processing the workers:

    X files are identified as workers. Start processing them
    

    This message will help to spot these issues as users will notice it when waiting for wws to process the workers.

    Describe alternatives you've considered

    No response

    Additional context

    No response

    πŸš€ enhancement πŸ‘‹ good first issue 
    opened by Angelmmiguel 0
  • wws hangs when running a Python project based on venv

    wws hangs when running a Python project based on venv

    Describe the bug

    @Kaligraphy247 created a project to run a Python application with wws. After adding venv to setup the Python intial project, wws couldn't start the project. It hangs without printing anything and the CPU goes high.

    When removing the venv context and keeping only the scripts, the project works fine.

    He kindly created a repository to reproduce the issue: https://github.com/Kaligraphy247/python-wws-venv

    Original report: https://twitter.com/kaligraph_jay/status/1629932602990682115

    Reproduction steps

    1. Clone the repository (git clone https://github.com/Kaligraphy247/python-wws-venv)
    2. Install runtime deps (wws runtimes install)
    3. Run the project (wws)
    4. wws cannot start
    5. Switch to the minimal branch (git checkout minimal)
    6. Run the project (wws)
    7. It works

    Expected behavior

    The wws service can start the project or at least prints the related issue.

    πŸ› bug 
    opened by Angelmmiguel 2
Releases(v1.1.0)
  • v1.1.0(Mar 22, 2023)

    What's Changed

    • feat: split wws code in multiple crates by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/106
    • fix: pass the root_path as shared data in actix by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/114
    • feat: allow mounting folders in workers by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/112
    • feat: add binary data management on both Python and Ruby polyfills by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/113
    • fix: calculate the 'from' path from the workers location by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/117

    Full Changelog: https://github.com/vmware-labs/wasm-workers-server/compare/v1.0.1...v1.1.0

    Source code(tar.gz)
    Source code(zip)
    wws-linux-musl-aarch64.tar.gz(10.48 MB)
    wws-linux-musl-x86_64.tar.gz(10.83 MB)
    wws-macos-darwin-aarch64.tar.gz(7.38 MB)
    wws-macos-darwin-x86_64.tar.gz(7.72 MB)
    wws-pc-windows-aarch64.tar.gz(6.13 MB)
    wws-pc-windows-x86_64.tar.gz(6.56 MB)
  • v1.0.1(Mar 8, 2023)

    Others

    • chore: bump wasmtime to 6.0.1 by @ereslibre in https://github.com/vmware-labs/wasm-workers-server/pull/104

    Container

    docker pull ghcr.io/vmware-labs/wws:v1.0.1
    # Or
    podman pull ghcr.io/vmware-labs/wws:v1.0.1
    

    Full Changelog: https://github.com/vmware-labs/wasm-workers-server/compare/v1.0.0...v1.0.1

    Source code(tar.gz)
    Source code(zip)
    wws-linux-musl-aarch64.tar.gz(10.29 MB)
    wws-linux-musl-x86_64.tar.gz(10.63 MB)
    wws-macos-darwin-aarch64.tar.gz(7.25 MB)
    wws-macos-darwin-x86_64.tar.gz(7.59 MB)
    wws-pc-windows-aarch64.tar.gz(6.05 MB)
    wws-pc-windows-x86_64.tar.gz(6.47 MB)
  • v1.0.0(Feb 23, 2023)

    Youtube video thumbnail about this release

    We also wrote an article and recorded a video about this release:

    Features

    • feat: allow dynamic routing based on file paths by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/55
    • feat: improve filesystem routing and path management by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/56
    • feat: refactor runner code into multiple runtimes to simplify the addition of new ones by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/62
    • feat: create the RuntimeMetadata and Repository structs. Refactor Runtimes by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/72
    • feat: create methods to manage runtimes by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/74
    • feat: create and manage the .wws.toml file and its metadata by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/75
    • feat: add the runtimes command to manage language runtimes by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/79
    • feat: run workers in installed language runtimes by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/81
    • feat: add tags to the runtime metadata by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/87
    • feat: add multi-language documentation and update structure by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/84
    • feat: check missing runtimes before loading workers by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/90
    • feat: add the initial repository index by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/88
    • feat: bump wws and libraries to 1.0.0 by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/98

    Fixes

    • fix: add missing OpenSSL dependency for building wws by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/77
    • fix: use inline args in all println and format by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/83
    • fix: send the query string to the workers by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/93
    • fix: avoid flushing KV store when worker fails by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/91
    • fix: avoid exiting as Tokio needs to manage open threads. Fix typo by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/97

    Others

    • update: bump Wasmtime 4.0.0, Tokio 1.23.1 and Json5 2.2.3 (node) by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/60
    • update: bump cargo deps by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/89

    Container

    docker pull ghcr.io/vmware-labs/wws:v1.0.0
    # Or
    podman pull ghcr.io/vmware-labs/wws:v1.0.0
    

    Full Changelog: https://github.com/vmware-labs/wasm-workers-server/compare/v0.6.0...v1.0.0

    Source code(tar.gz)
    Source code(zip)
    wws-linux-musl-aarch64.tar.gz(10.29 MB)
    wws-linux-musl-x86_64.tar.gz(10.62 MB)
    wws-macos-darwin-aarch64.tar.gz(7.24 MB)
    wws-macos-darwin-x86_64.tar.gz(7.57 MB)
    wws-pc-windows-aarch64.tar.gz(6.04 MB)
    wws-pc-windows-x86_64.tar.gz(6.46 MB)
  • v0.6.0(Dec 2, 2022)

    Youtube video thumbnail about this release

    We also wrote an article and recorded a video about this release:

    Features

    • feat: read static files from the public folder by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/29
    • feat: allow returning an array of bytes from Rust workers by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/45
    • feat: add the prefix option to prepend a path to all URLs by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/37
    • feat: configure and inject environment variables in workers by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/42
    • feat: automate container build with GitHub Actions by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/52

    Fixes

    • fix: normalize API routes using Rust path entities by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/32
    • fix: avoid service JS files inside public folder as worker by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/38
    • fix: make vars section optional in the configuration by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/51

    Others

    • feat: rename attr macro handler to worker by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/48
    • Remove Arc when initializing arguments by @ereslibre in https://github.com/vmware-labs/wasm-workers-server/pull/33
    • feat: bump Wasmtime version to 3.0.0 by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/40
    • chore: bump multiple dependency versions with cargo update by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/41

    New Contributors

    • @ereslibre made their first contribution in https://github.com/vmware-labs/wasm-workers-server/pull/33

    Container

    docker pull ghcr.io/vmware-labs/wws:v0.6.0
    # Or
    podman pull ghcr.io/vmware-labs/wws:v0.6.0
    

    Full Changelog: https://github.com/vmware-labs/wasm-workers-server/compare/v0.5.1...v0.6.0

    Source code(tar.gz)
    Source code(zip)
    wws-linux-musl-aarch64.tar.gz(8.03 MB)
    wws-linux-musl-x86_64.tar.gz(8.23 MB)
    wws-macos-darwin-aarch64.tar.gz(6.22 MB)
    wws-macos-darwin-x86_64.tar.gz(6.56 MB)
    wws-pc-windows-aarch64.tar.gz(5.09 MB)
    wws-pc-windows-x86_64.tar.gz(5.49 MB)
  • v0.5.1(Nov 14, 2022)

    What's Changed

    Features

    • add support IPv6 hostname by @taisukef in https://github.com/vmware-labs/wasm-workers-server/pull/19
    • Build container images by @assambar in https://github.com/vmware-labs/wasm-workers-server/pull/15

    Others

    • feat: Bump Wasmtime and Anyhow versions by @gzurl in https://github.com/vmware-labs/wasm-workers-server/pull/16
    • feat: run fmt and clippy in the CI by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/22
    • feat: add new workflow to cross-compile wws by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/23
    • feat: upgrade wasmtime to 2.0.2 by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/27

    Documentation

    • feat: add the documentation site to the project (#12) by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/13
    • Fix doc, Tutorials / Create a Rust worker by @taisukef in https://github.com/vmware-labs/wasm-workers-server/pull/18
    • Fix typos by @ssssota in https://github.com/vmware-labs/wasm-workers-server/pull/14
    • fix example, rust-basic, add escape by @taisukef in https://github.com/vmware-labs/wasm-workers-server/pull/20

    New Contributors

    • @taisukef made their first contribution in https://github.com/vmware-labs/wasm-workers-server/pull/18
    • @ssssota made their first contribution in https://github.com/vmware-labs/wasm-workers-server/pull/14
    • @gzurl made their first contribution in https://github.com/vmware-labs/wasm-workers-server/pull/16
    • @assambar made their first contribution in https://github.com/vmware-labs/wasm-workers-server/pull/15

    Full Changelog: https://github.com/vmware-labs/wasm-workers-server/compare/v0.5.0...v0.5.1 Related build: https://github.com/vmware-labs/wasm-workers-server/actions/runs/3460014117

    Source code(tar.gz)
    Source code(zip)
    wws-linux-musl-aarch64.tar.gz(7.66 MB)
    wws-linux-musl-x86_64.tar.gz(7.91 MB)
    wws-macos-darwin-aarch64.tar.gz(5.78 MB)
    wws-macos-darwin-x86_64.tar.gz(6.37 MB)
    wws-pc-windows-aarch64.tar.gz(4.96 MB)
    wws-pc-windows-x86_64.tar.gz(5.27 MB)
  • v0.5.0(Oct 17, 2022)

    What's Changed

    • feat: initial version of the Wasm Workers Server project: wws
    • feat: add JavaScript and Rust kits to build workers
    • feat: add JavaScript worker examples
    • feat: add Rust worker examples
    • feat: build the project on main commits and PRs (#1) by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/2
    • fix: normalize API paths properly for index files by @Angelmmiguel in https://github.com/vmware-labs/wasm-workers-server/pull/5

    New Contributors

    • @Angelmmiguel made their first contribution in https://github.com/vmware-labs/wasm-workers-server/pull/2

    Full Changelog: https://github.com/vmware-labs/wasm-workers-server/commits/v0.5.0

    Source code(tar.gz)
    Source code(zip)
    wws-linux-musl-aarch64.tar.gz(7.66 MB)
    wws-linux-musl-x86_64.tar.gz(7.87 MB)
    wws-macos-darwin-aarch64.tar.gz(5.77 MB)
    wws-macos-darwin-x86_64.tar.gz(6.32 MB)
Owner
VMware Labs
This organization contains experimental open source projects.
VMware  Labs
Rust Lambda using Serverless

Rust Serverless Lambda Template

μ„ΉμŠ€ μ‹ μ²­μ„œ 4 May 31, 2022
An serverless framework based on wasm runtime.

wasm_serverless An distributed serverless framework based on wasm runtime. Feishu doc https://fvd360f8oos.feishu.cn/docx/XSxcdONk2oVJD5xtZuicxftqn3f?f

null 3 Nov 23, 2023
A notebook app integrated with todo lists utility. Developed with Rust, WebAssembly, Yew and Trunk.

Flow.er A notebook app integrated with todo-list utility. Project flow.er is a Rust WASM app running in browser. Taking advantage of Yew and Trunk, it

null 45 Dec 31, 2022
plugy empowers you to construct agnostic dynamic plugin systems using Rust and WebAssembly.

plugy plugy is a plugin system designed to enable the seamless integration of Rust-based plugins into your application. It provides a runtime environm

Geoffrey Mureithi 22 Aug 12, 2023
Run Java code from Rust!

Java Native Interface Bindings for Rust This library provides complete FFI bindings to the Java Native Interface, as well as a safe and intuitive wrap

Ben Anderson 66 Nov 28, 2022
WebAssembly implementation from scratch in Safe Rust with zero dependencies

wain wain is a WebAssembly INterpreter written in Rust from scratch with zero dependencies. An implementation of WebAssembly. Features: No unsafe code

Linda_pp 328 Jan 2, 2023
NPM package distributing biscuit in WebAssembly for web components

Biscuit playground This is an example application for Biscuit tokens, where you can manipulate tokens and their verification in your browser. build wi

null 0 Dec 30, 2021
witgen is a library to generate .wit files for WebAssembly in Rust

witgen witgen is a library to help you generate wit definitions in a wit file for WebAssembly. Using this lib in addition to wit-bindgen will help you

Coenen Benjamin 28 Nov 9, 2022
Build frontend browser apps with Rust + WebAssembly. Supports server side rendering.

Percy Build frontend browser apps with Rust + WebAssembly. Supports server side rendering. The Percy Book This README gives a light introduction to Pe

Chinedu Francis Nwafili 2.1k Jan 1, 2023
`wasm-snip` replaces a WebAssembly function's body with an `unreachable`

wasm-snip wasm-snip replaces a Wasm function's body with an unreachable instruction. API Docs | Contributing | Chat Built with ?? ?? by The Rust and W

Rust and WebAssembly 177 Dec 28, 2022
WebAssembly (Wasm) interpreter.

Continuous Integration Test Coverage Documentation Crates.io wasmi- WebAssembly (Wasm) Interpreter wasmi was conceived as a component of parity-ethere

Parity Technologies 1k Jan 4, 2023
Dependency solver for Elm, made in WebAssembly

Dependency solver for Elm, made in WebAssembly This repo holds a dependency solver for the elm ecosystem compiled to a WebAssembly module. The wasm mo

Matthieu Pizenberg 3 Jun 16, 2022
A simple code for checking crate 'prost' on WebAssembly (πŸ¦€ + πŸ•ΈοΈ = πŸ’–)

rust-wasm-prost This repository is a simple code for checking crate 'prost' on WebAssembly ( ?? + ??️ = ?? ). What is prost? prost is a Protocol Buffe

Chris Ohk 6 Apr 5, 2022
Version of Clue made to be compilable in WebAssembly (WIP)

Clue is a programming language that compiles into Lua code with a syntax similar to languages like C or Rust. Clue tries to be almost as simple as Lua

Clue 2 Jun 16, 2022
Mod_wasm - an extension module for the Apache HTTP Server (httpd) that enables the usage of WebAssembly (Wasm).

mod_wasm is an extension module for the Apache HTTP Server (httpd) that enables the usage of WebAssembly (Wasm). This module will allow to execute certain tasks in the backend in a very efficient and secure way.

VMware  Labs 67 Dec 21, 2022
Low level tooling for WebAssembly in JavaScript using wasm-tools

js-wasm-tools js-wasm-tools compiles some of the API of wasm-tools to JavaScript and WebAssembly via wasm-bindgen. This offers low level tooling for W

Dominic Elm 59 Dec 19, 2022
Rust bindings for Supabase JavaScript library via WebAssembly.

supabase-js-rs Rust bindings for Supabase JavaScript library via WebAssembly. Usage Add supabase-js-rs to Cargo.toml supabase-js-rs = { version = "0.1

Valery Stepanov 8 Jan 13, 2023
An attempt to build full-featured WebAssembly-based monolith charts

Graphima Graphima (Greek: γράφημα) is an attempt to build full-featured WebAssembly-based monolith charts. See "Can I Use" WebAssembly for browser sup

Nikita Almakov 5 Jun 9, 2023
Let's pretend that life-before-main exists for Rust targeting WebAssembly

Let's pretend that life-before-main exists for Rust targeting WebAssembly. Installation Add a dependency on wasm-init. This crate intentionally provid

Ruan Pearce-Authers 7 Aug 29, 2023