Tiny, blazing fast WebAssembly compute

Sat, the tiny WebAssembly compute module

Sat (as in satellite) is an experiment, and isn't ready for production use. Please try it out and give feedback!

Sat is a compute module designed to have the maximum performance and smallest possible footprint. Where our Atmo project is a fully-fledged platform with support for running entire applications, Sat takes the opposite approach: run a single module really f***ing fast.

Sat has no dependencies (it's statically compiled), and can run in a tiny Docker container (Alpine). It's meant to live in small places such as edge compute instances.

Using Sat

To run Sat, Docker is easiest. Clone this repo and run:

make docker run

This will build the suborbital/sat:dev Docker image and then launch it using the hello-echo.wasm module found in the testmodule directory.

You can then make a POST request to localhost:8080 with a body, and that body will be echoed back to you.

Sat executes modules with the Runnable API enabled, so you can create modules using our Subo CLI and all of the capabilities are available for use.

Note that statically compiling Sat on macOS is not currently possible, so it is Linux-only for now.

Stdin mode

As an alternative to running Sat as a server, you can also use it in stdin mode. First, build Sat:

make sat
OR
make sat/dynamic #on macOS

Then, run Sat with an input on stdin:

echo "world" | .bin/sat --stdin ./testmodule/hello-echo.wasm

Sat will write the response to stdout and exit.

Run from URL

If you provide a URL as the path argument to Sat, it will download the module from that URL, write it to a temp directory, and use it for execution:

sat "https://github.com/suborbital/reactr/blob/main/rwasm/testdata/hello-echo/hello-echo.wasm?raw=true"

The URL must be HTTPS and must have a .wasm suffix (excluding query parameters)

One day...

Sat has the ability to create a mesh with other instances using local network discovery and websockets. By default, Sat starts on a random port, and listens for requests from its peers. In the future, this will enable some very interesting network topologies and potentially an integration with Atmo, but for now we are focused on being tiny and fast.

Copyright Suborbital contributors 2021.

Owner
Suborbital
Rocket-fueled open source platform tools
Suborbital
Comments
  • Unable to run Sat with a compiled Runnable

    Unable to run Sat with a compiled Runnable

    Following these steps in the docs, on an Intel Mac running Monterey, @ramonh and I ran make docker run followed by make sat and then SAT_HTTP_PORT=8080 ./sat https://github.com/suborbital/reactr/blob/main/rwasm/testdata/hello-echo/hello-echo.wasm, and got the following error:

    {"log_message":"(W) configured to use HTTP with no TLS","timestamp":"2022-04-04T09:31:00.580195-07:00","level":2,"app":{"sat_version":"v0.1.1"}}
    {"log_message":"(I) starting hello-echo ...","timestamp":"2022-04-04T09:31:00.580593-07:00","level":3,"app":{"sat_version":"v0.1.1"}}
    {"log_message":"(I) serving on :8080","timestamp":"2022-04-04T09:31:00.580609-07:00","level":3,"app":{"sat_version":"v0.1.1"}}
    {"log_message":"(E) failed to start hello-echo worker: failed to reconcilePoolSize: failed to addThread more than numRetries: runnable returned OnChange error: failed to addInstance: failed to builder.New: failed to internals: failed to NewModule: failed to parse WebAssembly module\n\nCaused by:\n    Invalid input WebAssembly code at offset 0: Bad magic number","timestamp":"2022-04-04T09:31:00.580844-07:00","level":1}
    
  • Include response headers in real sat response

    Include response headers in real sat response

    Hi there! This project looks extremely promising.

    I was trying out sat and got quite confused about why calls to resp::set_header didn't seem to have any effect - my HTTP headers were not showing up on the response. On looking into it, I see they do get added to the CoordinatedResponse structure, but the RespHeaders here are simply ignored by handler.go and hence they don't end up in the real HTTP response.

    Fortunately it's very easy to add the headers to the real HTTP response as per this PR. If there is some reason why it's intentional that the response headers should be discarded then I apologise (though it would be great if you could clarify why). Thanks!

  • Question about headers

    Question about headers

    👋 Hello, perhaps I missed something because of my baby steps with Rust and Swift, but I'm unable to get the value of a header with ReqHeader (or req::header):

    import Suborbital
    
    class HelloPeople: Suborbital.Runnable {
        func run(input: String) -> String {
            
            return "hello " + input + " " + ReqHeader(key:"message")
        }
    }
    
    Suborbital.Set(runnable: HelloPeople())
    

    And I try to call the function like this:

    data="Bob Morane"
    curl -d "${data}" \
        -H "Content-Type: application/json" \
        -H "message: 'ping'" \
        -X POST "http://localhost:8080"
    

    But ReqHeader(key:"message") returns an empty value

  • chore(deps): update module github.com/suborbital/appspec to v0.0.4

    chore(deps): update module github.com/suborbital/appspec to v0.0.4

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/suborbital/appspec | require | patch | v0.0.4-0.20220926160156-36407db9d5e1 -> v0.0.4 |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • chore(deps): update module github.com/suborbital/reactr to v0.15.2

    chore(deps): update module github.com/suborbital/reactr to v0.15.2

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/suborbital/reactr | require | minor | v0.14.0 -> v0.15.2 | | github.com/suborbital/reactr | require | patch | v0.15.1 -> v0.15.2 |


    Release Notes

    suborbital/reactr

    v0.15.2

    Compare Source

    v0.15.1: Beta-15.1

    Compare Source

    Changelog

    Update wasmtime to v0.35.0

    v0.15.0: Beta-15

    Compare Source

    JavaScript and TypeScript Support

    This release of Reactr includes a new library for use with JavaScript and TypeScript runnables. With Subo Beta-4, JS runnables can be created with subo create runnable <name> --lang js, and TS runnables can be created with subo create runnable <name> --lang ts.


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • chore(deps): update module github.com/suborbital/reactr to v0.15.1

    chore(deps): update module github.com/suborbital/reactr to v0.15.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/suborbital/reactr | require | minor | v0.14.0 -> v0.15.1 |


    Release Notes

    suborbital/reactr

    v0.15.1

    Compare Source

    Changelog

    Update wasmtime to v0.35.0

    v0.15.0

    Compare Source

    JavaScript and TypeScript Support

    This release of Reactr includes a new library for use with JavaScript and TypeScript runnables. With Subo Beta-4, JS runnables can be created with subo create runnable <name> --lang js, and TS runnables can be created with subo create runnable <name> --lang ts.


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

  • chore(deps): update module github.com/suborbital/e2core to v0.4.7

    chore(deps): update module github.com/suborbital/e2core to v0.4.7

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/suborbital/e2core | require | patch | v0.4.4-0.20220927141500-cc009c3a3c36 -> v0.4.7 |


    Release Notes

    suborbital/e2core

    v0.4.7

    Compare Source

    Atmo Beta-4.7 fixes a panic when attempting to connect to a control plane server that is not available, and an issue connecting to external databases.

    v0.4.6

    Compare Source

    Atmo Beta-4.6 fixes an issue with stream handlers that would fail to handle arbitrary message schemas.

    v0.4.5

    Compare Source

    Atmo Beta-4.5 brings some minor fixes and the ability to define static peers with the ATMO_PEERS env var.


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

  • chore(deps): update module go to 1.19

    chore(deps): update module go to 1.19

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | go (source) | golang | minor | 1.18 -> 1.19 |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

  • Unable to build manually Sat for arm platform with WasmEdge

    Unable to build manually Sat for arm platform with WasmEdge

    Usually, on RaspberryPi, I install the WasmEdge library like this:

    curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash -s -- -e all -v 0.9.0-rc5
    

    Because Reactr needs this version of the Wasmedge library (https://github.com/suborbital/reactr/blob/main/go.mod#L13).

    And then:

    git clone --depth=1 https://github.com/suborbital/sat.git
    
    cd sat
    go build -o .bin/sat -tags netgo,wasmedge .
    

    But the version 0.9.0-rc5 of Wasmedge seems to be unavailable, and then the build of Sat is impossible.

    # github.com/second-state/WasmEdge-go/wasmedge
    ../go/pkg/mod/github.com/second-state/[email protected]/wasmedge/ast.go:3:11: fatal error: wasmedge/wasmedge.h: No such file or directory
     // #include <wasmedge/wasmedge.h>
               ^~~~~~~~~~~~~~~~~~~~~
    
  • [HACK] 🪲 Fix warning message [make sat]

    [HACK] 🪲 Fix warning message [make sat]

    When the building sat, I get this message:

    # github.com/suborbital/sat/sat
    /usr/bin/ld: /workspace/sat/vendor/github.com/bytecodealliance/wasmtime-go/build/linux-x86_64/libwasmtime.a(dirs_sys_next-ac02c6299ada6dc3.dirs_sys_next.3b0485cb-cgu.6.rcgu.o): in function `dirs_sys_next::target_unix_not_redox::home_dir':
    dirs_sys_next.3b0485cb-cgu.6:(.text._ZN13dirs_sys_next21target_unix_not_redox8home_dir17hcb096aa60fa17738E+0x147): warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /usr/bin/ld: /workspace/sat/vendor/github.com/bytecodealliance/wasmtime-go/build/linux-x86_64/libwasmtime.a(std-008055cc7d873802.std.cf1c8f7e-cgu.0.rcgu.o): in function `<std::sys_common::net::LookupHost as core::convert::TryFrom<(&str,u16)>>::try_from':
    /rustc/c8dfcfe046a7680554bf4eb612bad840e7631c4b//library/std/src/sys_common/net.rs:197: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    
  • Add dependency stage to Dockerfile

    Add dependency stage to Dockerfile

    The Dockerfile now fetches the latest wasmtime tarball build for the correct arch and OS and puts libwasmtime.a in the right place so it can be linked in.

  • chore(deps): update module github.com/suborbital/e2core to v0.5.0

    chore(deps): update module github.com/suborbital/e2core to v0.5.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/suborbital/e2core | require | minor | v0.4.4-0.20221006164052-adc475e4ccd0 -> v0.5.0 |


    Release Notes

    suborbital/e2core

    v0.5.0

    Compare Source

    E2Core Beta-5 marks the first official release of E2Core, substantially revamped to efficiently execute module plugins.

    v0.4.8

    Compare Source

    This is a patch release of (legacy) Atmo that uses the Wasmtime runtime by default rather than the Wasmer runtime. It is functionally identical to the 0.4.7 release.

    v0.4.7

    Compare Source

    Atmo Beta-4.7 fixes a panic when attempting to connect to a control plane server that is not available, and an issue connecting to external databases.

    v0.4.6

    Compare Source

    Atmo Beta-4.6 fixes an issue with stream handlers that would fail to handle arbitrary message schemas.

    v0.4.5

    Compare Source

    Atmo Beta-4.5 brings some minor fixes and the ability to define static peers with the ATMO_PEERS env var.


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • Remove e2Core / sat circular dependency

    Remove e2Core / sat circular dependency

    Sat and e2Core depend on each other. They should not.

    This ticket tracks the sat side of the work.

    See the e2core here: https://github.com/suborbital/e2core/issues/286

  • chore(deps): update module github.com/second-state/wasmedge-go to v0.11.2

    chore(deps): update module github.com/second-state/wasmedge-go to v0.11.2

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/second-state/WasmEdge-go | require | patch | v0.11.0 -> v0.11.2 |


    Release Notes

    second-state/WasmEdge-go

    v0.11.2

    Compare Source

    Breaking Changes:

    • WasmEdge updated. Please install the WasmEdge 0.11.2 or newer version.

    Features:

    • Updated to the WasmEdge 0.11.2.
    • Added new APIs.
      • Added wasmedge.SetLogOff() to turn off the logging.
      • Added (*wasmedge.Configure).SetForceInterpreter() to set the forcibly interpreter mode in configuration.
      • Added (*wasmedge.Configure).IsForceInterpreter() to retrieve the forcibly interpreter mode setting in configuration.

    v0.11.1

    Compare Source

    Breaking Changes:

    • WasmEdge updated. Please install the WasmEdge 0.11.1 or newer version.

    Features:


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • Improve JS build toolchain by moving build logic out of templates

    Improve JS build toolchain by moving build logic out of templates

    We should consider moving build logic out of the module templates and building them into the build toolchain or the runtime itself.

    At a high level this should consist of two steps:

    • Moving the build process out of the template and integrating it into the JS build toolchain
    • Reducing/removing the boilerplate in the templates and co-locating the js sdk with the runtime

    Both of these will require a strict contract of SDK versioning where the remaining template/source code will need to define:

    • What version of the toolchain/runtime it is compatible with
    • What external dependencies should be included (as we would be moving the package.json out of the template as well)

    This would both simplify versioning and migrations for when breaking SDK versions are released, as well as allow for "legacy" modules to be built and supported through sat/e2core instances that run earlier sdk versions in deployment environments that do not permit upgrading/migration of old modules.

  • chore(deps): update module github.com/testcontainers/testcontainers-go to v0.16.0

    chore(deps): update module github.com/testcontainers/testcontainers-go to v0.16.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/testcontainers/testcontainers-go | require | minor | v0.14.0 -> v0.16.0 |


    Release Notes

    testcontainers/testcontainers-go

    v0.16.0

    Compare Source

    What's Changed

    ⚠️ Breaking Changes

    • feat: support native docker compose api (#​476) @​baez90

      Docker Compose v2 is implemented in Go, and for that reason we have decided to provide native Go support to Compose, deprecating the shell-escape based LocalDockerCompose, which was invoking the local binary of compose. Given the version includes the Compose dependency, and the Docker folks added a replace directive until the upcoming Docker 22.06 release is out, we were forced to add it too, causing consumers of Testcontainers for Go to add the following replace directive too.

    replace (
    	github.com/docker/cli => github.com/docker/cli v20.10.3-0.20221013132413-1d6c6e2367e2+incompatible // 22.06 master branch
    	github.com/docker/docker => github.com/docker/docker v20.10.3-0.20221013203545-33ab36d6b304+incompatible // 22.06 branch
    	github.com/moby/buildkit => github.com/moby/buildkit v0.10.1-0.20220816171719-55ba9d14360a // same as buildx
    
    	github.com/opencontainers/runc => github.com/opencontainers/runc v1.1.2 // Can be removed on next bump of containerd to > 1.6.4
    
    	// For k8s dependencies, we use a replace directive, to prevent them being
    	// upgraded to the version specified in containerd, which is not relevant to the
    	// version needed.
    	// See https://github.com/docker/buildx/pull/948 for details.
    	// https://github.com/docker/buildx/blob/v0.8.1/go.mod#L62-L64
    	k8s.io/api => k8s.io/api v0.22.4
    	k8s.io/apimachinery => k8s.io/apimachinery v0.22.4
    	k8s.io/client-go => k8s.io/client-go v0.22.4
    )
    
    • fix: do not prepend garbage in the container.Exec response (#​624) @​mdelapenya

      The signature of the Exec function on a container created by the library has been changed in what we thought it was a non-breaking change manner, using variadic arguments. But we confirmed that it could be a breaking change in the rare case where the Exec function is assigned to a variable.

    // The original Exec function works here because its type is func(context.Context, []string),
    // but the new Exec function’s type is func(context.Context, []string, ...ProcessOption),
    // so the assignment fails at compile time. For that reason we are moving it to this section.
    var execFn func(ctx context.Context, cmd []string) = myContainer.Exec
    

    🚀 Features

    • feat: implement new MultiStrategy design (#​580) @​hhsnopek

      This PR enhances how the wait.ForAll strategy behaves: it will control the startup timeout and the deadline for all inner wait strategies, using two methods: WithStartupTimeoutDefault, which sets the default timeout for all inner wait strategies; and WithDeadline, which sets a time.Duration which limits all wait strategies. As a consequence, the already existing function WithStartupTimeout has been deprecated from the multi-strategy struct.

    • feat: Auth config for build images (#​602) @​paulozenida

    • feat: log docker info from compose (#​591) @​mdelapenya

    🐛 Bug Fixes

    📖 Documentation

    🧹 Housekeeping

    📦 Dependency updates

    v0.15.0

    Compare Source

    What's Changed

    🚀 Features

    ⚠️ Breaking Changes

    Before this change, when waiting for a SQL to be executed in a container it always checked against localhost, but it could be the case that the database instance runs in a different container. For that reason, the library now supports passing the host where the database is running so that the wait.ForSQL function needs the host as part of the input parameters.

    - func ForSQL(port nat.Port, driver string, url func(nat.Port) string) *waitForSql {
    + func ForSQL(port nat.Port, driver string, url func(host string, port nat.Port) string) *waitForSql {
    

    🐛 Bug Fixes

    📖 Documentation

    🧹 Housekeeping

    📦 Dependency updates


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • Implement TextEncoder/Decoder polyfills for JS natively

    Implement TextEncoder/Decoder polyfills for JS natively

    Using the #165 toolchain allows us to inject globals during compilation. This allows us to pollyfill JS/TS language features and APIs that are not available in the Javy runtime in "userland", that is, in the toolchain's compilation phase instead.

Related tags
WebAssembly interop between Go and JS values.

vert Package vert provides WebAssembly interop between Go and JS values. Install GOOS=js GOARCH=wasm go get github.com/norunners/vert Examples Hello W

Dec 28, 2022
WebAssembly for Proxies (Golang host implementation)

WebAssembly for Proxies (GoLang host implementation) The GoLang implementation for proxy-wasm, enabling developer to run proxy-wasm extensions in Go.

Dec 29, 2022
🐹🕸️ WebAssembly runtime for Go
🐹🕸️ WebAssembly runtime for Go

Wasmer Go Website • Docs • Slack Channel A complete and mature WebAssembly runtime for Go based on Wasmer. Features Easy to use: The wasmer API mimics

Jan 2, 2023
🐹🕸️ WebAssembly runtime for Go
🐹🕸️ WebAssembly runtime for Go

Wasmer Go Website • Docs • Slack Channel A complete and mature WebAssembly runtime for Go based on Wasmer. Features Easy to use: The wasmer API mimics

Dec 29, 2022
Golang-WASM provides a simple idiomatic, and comprehensive API and bindings for working with WebAssembly for Go and JavaScript developers
Golang-WASM provides a simple idiomatic, and comprehensive API and bindings for working with WebAssembly for Go and JavaScript developers

A bridge and bindings for JS DOM API with Go WebAssembly. Written by Team Ortix - Hamza Ali and Chan Wen Xu. GOOS=js GOARCH=wasm go get -u github.com/

Dec 22, 2022
A package to build progressive web apps with Go programming language and WebAssembly.
A package to build progressive web apps with Go programming language and WebAssembly.

Go-app is a package for building progressive web apps (PWA) with the Go programming language (Golang) and WebAssembly (Wasm). Shaping a UI is done by

Dec 30, 2022
A package to build progressive web apps with Go programming language and WebAssembly.
A package to build progressive web apps with Go programming language and WebAssembly.

Go-app is a package for building progressive web apps (PWA) with the Go programming language (Golang) and WebAssembly (Wasm). Shaping a UI is done by

Jan 2, 2023
Vugu: A modern UI library for Go+WebAssembly (experimental)

Vugu: A modern UI library for Go+WebAssembly (experimental)

Jan 3, 2023
WebAssembly runtime for wasmer-go
WebAssembly runtime for wasmer-go

gowasmer When compiling Go to WebAssembly, the Go compiler assumes the WebAssembly is going to run in a JavaScript environment. Hence a wasm_exec.js f

Dec 28, 2022
A template project to demonstrate how to run WebAssembly functions as sidecar microservices in dapr
A template project to demonstrate how to run WebAssembly functions as sidecar microservices in dapr

Live Demo 1. Introduction DAPR is a portable, event-driven runtime that makes it easy for any developer to build resilient, stateless and stateful app

Jan 3, 2023
WebAssembly Lightweight Javascript Framework in Go (AngularJS Inspired)

Tango Lightweight WASM HTML / Javascript Framework Intro WebAssembly is nice, Go on the web is nice, so I ported Tangu to Go and WebAssembly. Tangu is

Dec 20, 2022
Running a Command line tool written in Go on browser with WebAssembly

Running a command line tool written in Go on browser with WebAssembly This repo contains code/assets from the article Files: . ├── article.md

Dec 30, 2022
This library provides WebAssembly capability for goja Javascript engine

This module provides WebAssembly functions into goja javascript engine.

Jan 10, 2022
A Brainfuck to WebAssembly compiler written in Go.

brainfuck2wasm A Brainfuck to WebAssembly compiler written in Go. I am writing this compiler for a Medium article. When I complete the compiler, I'll

Jun 6, 2022
Dom - A Go API for different Web APIs for WebAssembly target

Go DOM binding (and more) for WebAssembly This library provides a Go API for dif

Jan 7, 2023
wazero: the zero dependency WebAssembly runtime for Go developers

wazero: the zero dependency WebAssembly runtime for Go developers WebAssembly is a way to safely run code compiled in other languages. Runtimes execut

Jan 2, 2023
`tinydisplay` is a tiny display for TinyGo development.
`tinydisplay` is a tiny display for TinyGo development.

tinydisplay tinydisplay is a tiny display for TinyGo development. tinydisplay works on windows, macOS and linux. Usage First, run ./cmd/tinydisplay. N

Oct 9, 2022
Fast face detection, pupil/eyes localization and facial landmark points detection library in pure Go.
Fast face detection, pupil/eyes localization and facial landmark points detection library in pure Go.

Pigo is a pure Go face detection, pupil/eyes localization and facial landmark points detection library based on Pixel Intensity Comparison-based Objec

Dec 24, 2022
FaaSNet: Scalable and Fast Provisioning of Custom Serverless Container Runtimes at Alibaba Cloud Function Compute (USENIX ATC'21)

FaaSNet FaaSNet is the first system that provides an end-to-end, integrated solution for FaaS-optimized container runtime provisioning. FaaSNet uses l

Jan 2, 2023
Simple and blazing fast lockfree logging library for golang
Simple and blazing fast lockfree logging library for golang

glg is simple golang logging library Requirement Go 1.11 Installation go get github.com/kpango/glg Example package main import ( "net/http" "time"

Nov 28, 2022