A set of WIT interfaces that abstract distributed application capabilities and a runtime CLI for running Wasm applications that use these capabilities.
Warning: Alpha quality software, do not use in production.
SpiderLightning defines a set of *.wit files that abstract distributed application capabilities, such as key-value, messaging, http-server/client and more.
Slight CLI is a runtime for running Wasm applications that compile to WASI and use SpiderLightning capabilities.
This repo also contains libraries that implement of SpiderLightning capabilities to common cloud services including AWS, Azure and more.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/deislabs/spiderlightning/main/install.sh)"
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/deislabs/spiderlightning/main/install.ps1'))
slight new -n firstname.lastname@example.org js && cd spidey # ^^^ starts a new js project under SpiderLightning's v0.5.1 spec slight buildjs -e slightjs_engine.wasm -o main.wasm src/main.js # ^^^ builds the js application slight -c slightfile.toml run main.wasm -l # At this point, you should see: "Hello, JS Wasm!"
slight new -n email@example.com c && cd spidey # ^^^ starts a new c project under SpiderLightning's v0.5.1 spec # you might want to install wasi-sdk dependencies... # on unix, run: # make install-deps # on windows, run: # make install-deps-win # next, to build... # on unix, run: # make bindings && make build # on windows, run: # make bindings && make build-win slight -c slightfile.toml run spidey.wasm # At this point, you should see: "Hello, SpiderLightning!"
slight new -n firstname.lastname@example.org rust && cd spidey # ^^^ starts a new rust project under SpiderLightning's v0.5.1 spec cargo build --target wasm32-wasi slight -c slightfile.toml run target/wasm32-wasi/debug/spidey.wasm # At this point, you should see: "Hello, SpiderLightning!"
git clone https://github.com/deislabs/spiderlightning.git && cd spiderlightning/ # clone our repo locally and go into it make install-deps # installs the WASI-SDK make build # builds SpiderLightning/Slight make build-c # builds our c example make run-c # runs our c example
There are also Rust examples that can be built (
build-rust) and ran (
run-rust). However, we do not recommend running them because some of these examples have dependencies on environment variables or local programs (e.g.,
etcd), so it probably won’t work right off the gate like the C one did.
/crates: runtime, core library and service implementations
/docs: useful documentation to help you understand design decisions, and how to contribute
/examples: Slight examples
/proposals: design documents
/src: the SpiderLightning cli (i.e., Slight)
/templates: templates used by
slight addto create a new Rust or C project
/tests: integration tests
/wit: the SpiderLightning specification written in
*.witformat (see WIT)
Do you want to contribute to SpiderLightning’s growth?
Start with our CONTRIBUTING.md
Aside from the
CONTRIBUTING.md doc, here are a few other good starting points to contributing:
service-implementation-101.mddoc: a step-by-step guide to develop your first service implementor, and
SpiderLightning is a collection of common application interfaces exposed through WebAssembly intended to make cloud-native application development simpler. These interfaces are available to WebAssembly applications through the
slight Command Line Interface (CLI) and host runtime that implements these interfaces using backing implementations of your choosing. For example, for the “message queue” interface, SpiderLightning may provide backends implemented by Azure Service Bus, Apache Kafka, and more.
SpiderLightning’s interfaces offer developers a set of provider-agnostic APIs which enable developers to write portable applications without having to take direct dependencies on vendor specific APIs and SDKs.
Applications targeting SpiderLightning can leverage these interfaces to reduce the amount of code written to achieve tasks such as persisting key/values, participating in pub/sub, handling messages from a message queue, and much more. By reducing the code footprint, SpiderLightning also enables application binaries to be much smaller, often an order of magnitude smaller than similar container-based applications. This feature further increases the portability of applications to target constrained runtime environments like edge devices.
WASI’s primary goal is to provide operating system abstractions for Wasm applications running outside of browser environments. SpiderLightning interfaces extend WASI to provide application capabilities, such as state management, event-driven patterns, and distributed locking. In the future, we hope that SpiderLightning’s interfaces or interfaces that provide similar capabilities become part of WASI specification.
SpiderLightning and Dapr share the same goal of providing capabilities to distributed applications, but each project’s approach to achieving this goal is very different. For example, while Dapr runs as a sidecar container and provides an HTTP/gRPC interface for applications, SpiderLightning chooses not take a dependency on network transport protocols. Instead,
slight links applications directly to generated WASM bindings, then executes them directly.
Spider Lightning is the name of a phenomenon of “long, horizontally travelling flashes often seen on the underside of [..] clouds” (source: nssl), pictured on the right. From that and from the fact we are developing SpiderLightning/
slight based off of WebAssembly’s lightning-fast technologies, the name fit.