All Projects → deislabs → Wagi

deislabs / Wagi

Licence: mit
Write HTTP handlers in WebAssembly with a minimal amount of work

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Wagi

Veracruz
Main repository for the Veracruz privacy-preserving compute project.
Stars: ✭ 71 (-5.33%)
Mutual labels:  webassembly, wasm
Hvue
A GopherJS & go/wasm binding for Vue.js
Stars: ✭ 50 (-33.33%)
Mutual labels:  webassembly, wasm
Hidamari
Modern operating system aimed at running WebAssembly code.
Stars: ✭ 49 (-34.67%)
Mutual labels:  webassembly, wasm
Blazor Wasm Identity Grpc
Blazor WASM, IdentityServer4, Kestrel Web Server, Entity Framework Code First SQLite Database with Multiple Roles, Additional User Claims & gRPC with Roles Authorization.
Stars: ✭ 61 (-18.67%)
Mutual labels:  webassembly, wasm
Wasmer Python
🐍🕸 WebAssembly runtime for Python
Stars: ✭ 1,131 (+1408%)
Mutual labels:  webassembly, wasm
Tinygo
Go compiler for small places. Microcontrollers, WebAssembly (WASM/WASI), and command-line tools. Based on LLVM.
Stars: ✭ 9,068 (+11990.67%)
Mutual labels:  webassembly, wasm
Vxformgenerator
The library contains a component, that nests itself into the Blazor EditForm instead of a wrapper around the EditForm. The component is able to generate a form based on a POCO or a ExpandoObject. Because of this architecture the library provides the developer flexibility and direct usage of the EditForm.
Stars: ✭ 60 (-20%)
Mutual labels:  webassembly, wasm
Json2excel
Generate excel file from json data
Stars: ✭ 40 (-46.67%)
Mutual labels:  webassembly, wasm
Dockerdot
🐳 dockerdot shows dockerfile dependenciy graph. This is useful to understand how build dockerfile. This uses Go WebAssembly + BuildKit package.
Stars: ✭ 65 (-13.33%)
Mutual labels:  webassembly, wasm
Wasmjit
Small Embeddable WebAssembly Runtime
Stars: ✭ 1,063 (+1317.33%)
Mutual labels:  webassembly, wasm
Muze
Composable data visualisation library for web with a data-first approach now powered by WebAssembly
Stars: ✭ 1,153 (+1437.33%)
Mutual labels:  webassembly, wasm
Web Audio Javascript Webassembly Sdk Interactive Audio
🌐 Superpowered Web Audio JavaScript and WebAssembly SDK for modern web browsers. Allows developers to implement low-latency interactive audio features into web sites and web apps with a friendly Javascript API. https://superpowered.com
Stars: ✭ 68 (-9.33%)
Mutual labels:  webassembly, wasm
Winter
Haskell port of the WebAssembly OCaml reference interpreter
Stars: ✭ 42 (-44%)
Mutual labels:  webassembly, wasm
Uno.ch9
Ch9 - Uno Reference Implementation project
Stars: ✭ 45 (-40%)
Mutual labels:  webassembly, wasm
Rustwasm Addon
🦀 + 🕸 + 🦊 // A web-extension to reverse a string. Yep.
Stars: ✭ 41 (-45.33%)
Mutual labels:  webassembly, wasm
Asm Dom Boilerplate
A simple boilerplate to start using asm-dom without configuration.
Stars: ✭ 49 (-34.67%)
Mutual labels:  webassembly, wasm
Photon
⚡ Rust/WebAssembly image processing library
Stars: ✭ 963 (+1184%)
Mutual labels:  webassembly, wasm
Wasm Sort
WebAssembly sort algorithms compiled by C.
Stars: ✭ 34 (-54.67%)
Mutual labels:  webassembly, wasm
Aioli
Framework for building fast genomics web tools with WebAssembly and WebWorkers
Stars: ✭ 51 (-32%)
Mutual labels:  webassembly, wasm
Proxy Wasm Cpp Sdk
WebAssembly for Proxies (C++ SDK)
Stars: ✭ 55 (-26.67%)
Mutual labels:  webassembly, wasm

WAGI: WebAssembly Gateway Interface

WAGI is the easiest way to get started doing cloud-side WebAssembly apps.

WARNING: This is experimental code. It is not considered production-grade by its developers, neither is it "supported" software.

DeisLabs is experimenting with many WASM technologies right now. This is one of a multitude of projects (including Krustlet) designed to test the limits of WebAssembly as a cloud-based runtime.

tl;dr

WAGI allows you to run WebAssembly WASI binaries as HTTP handlers. Write a "command line" application that prints a few headers, and compile it to WASM32-WASI. Add an entry to the modules.toml matching URL to WASM module. That's it.

You can use any programming language that can compile to WASM32-WASI.

Quickstart

Here's the fastest way to try out WAGI. For details, checkout out the documentation.

To run the WAGI server, use cargo run -- --config examples/modules.toml.

This will start WAGI on http://localhost:3000.

Use a browser or a tool like curl to test:

$ curl -v http://localhost:3000/hello/world
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 3000 (#0)
> GET /hello/world HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: text/plain
< content-length: 12
< date: Wed, 14 Oct 2020 22:00:59 GMT
<
hello world
* Connection #0 to host localhost left intact
* Closing connection 0

To add your own modules, compile your code to wasm32-wasi format and add them to the modules.toml file.

Examples and Demos

  • env_wagi: Dump the environment that WAGI sets up, including env vars and args.
  • hello-wagi-as: AssemblyScript example using environment variables and query params.

If you want to understand the details, read the Common Gateway Interface 1.1 specification. While this is not an exact implementation, it is very close. See the "Differences" section below for the differences.

Contributing

We hang out in the #krustlet channel of the Kubernetes Slack. If WAGI gains popularity, we'll create a dedicated channel (probably on a more fitting Slack server).

WAGI is experimental, and we welcome contributions to improve the project. In fact, we're delighted that you're even reading this section of the docs!

For bug fixes:

  • Please, pretty please, file issues for anything you find. This is a new project, and we are SURE there are some bugs to work out.
  • If you want to write some code, feel free to open PRs to fix issues. You may want to drop a comment on the issue to let us know you're working on it (so we don't duplicate effort).

For refactors and tests:

  • We welcome any changes to improve performance, clean up code, add tests, etc.
  • For style/idiom guidelines, we follow the same conventions as Krustlet

For features:

  • If there is already an issue for that feature, please let us know in the comments if you plan on working on it.
  • If you have a new idea, file an issue describing it, and we will happily discuss it.

Since this is an experimental repository, we might be a little slow to answer.

Code of Conduct

This project has adopted the Microsoft Open Source Code of Conduct.

For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

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].