Open Source Application Stack & PaaS

Overview

mycelia

Open Source Application Stack & PaaS

Installation

cargo xtask build

NOTE: We opted for cargo-xtask because Cargo build.rs is not supported for workspaces

Development Server

RUST_LOG=info cargo run --package development_server

Logging

We use env_logger for logging. Please see their documentation for more information on setting custom log levels, filtering, and more.

Community & Contributing & Help

Come join our Discord

wasi_snapshot_preview1.reactor.wasm

search_tags: import not found, guest wasm won't build, wasi, wasi build error

Current version in repo is taken from the v12.0.1 Release

More information on "what the heck" this is can be found here. In the lliekly event that's not enough context, the repo previously hosting this file can be found here: here.

Hazel: My best explanation is.. When compiling the wasm target to wasm32-wasi the guest program expects to find a bunch wasi resources in the table(?). The build script contains an --adapt argument which takes the wasi_snapshot_preview1.reactor.wasm and injects the correct links into the guest code. I think that is what this is expressing. Here is the generated output from a working example

Resources

  1. The lifetime error you're seeing means you should think about using async_trait. Notice the name of the lifetime async_trait ;)
  2. Everything you wanted to know about Resources

Questions

  1. Whats the lifetime behavior of resources??

/// Todo..

  • Lock more dep versions in workspace.deps

  • Build FunctionComponentService

    • a thing that takes invocation requests and produces responses wrapped in a tower service
  • ^ take above into development_server :D

Comments
  • Engineering Blog Static Site Generator

    Engineering Blog Static Site Generator

    We're using a ton of really new, cool, undocumented, tech stuffs. Personally, I keep ending up in the cycle of.. get blocked, code splunk, "AHA, thats how it works"..

    We should get a blog setup so we can start sharing the what we're learning with everyone else. I suspect a big barrier to adoption for wasm right now is just a lack of information.

    opened by SuddenlyHazel 1
  • Enable WASI w/ WIT Dependency Management

    Enable WASI w/ WIT Dependency Management

    Summary

    We're piping though all the needed components on the backend to expose wasi to guest components (with the exception of wasi threads). However, aside from STDIO none of the wasi features are available to guests as the components are not including the wasi wasm components at compile time.

    Note: See here for where we're providing the wasi view and linking them all up.

    Task

    Bytecode alliance provides the wit-deps library which we can hookup in each guests build.rs https://github.com/bytecodealliance/wit-deps/

    Once hooked up in the build.rs script, it will pull in the .wit definitions at compile time so wit-bindgen has access to the descriptors :D

    Once setup we should be able to add wit imports to our guest wit definitions

    opened by SuddenlyHazel 1
  • Development Server

    Development Server

    This PR creates the foundation for the mycelia development server.

    The development server added in this pr consists of a hyper http server and a tonic grpc backend. For now, the development server supports a hosting a single function. The only command added in this PR is swapping out the running function.

    closes #8

    opened by SuddenlyHazel 1
  • Development Server

    Development Server

    Goal

    Provide a binary which hosts a http server that provides access to the deployed function and a RPC server for controlling the development server instance. Additionally, a rust client lib should be created to unblock #5

    Tasks

    • create a hyper instance for the function interface. Forward all calls to the function.
    • create a hyper instance for the RPC interface.

    Note, originally I was thinking of using Tonic but protobuf.. 😩

    opened by SuddenlyHazel 0
  • [RFC] CLI

    [RFC] CLI

    Usage:

    Available commands inside the workspace:

    • cargo run: shows available CLI commands
    • cargo run build: builds project using xtask
    • cargo run start: starts dev server
    • cargo run stop: stops dev server
    • cargo run deploy: deploys component to path
    opened by danielterwiel 0
  • Foundations of Wasm Runtime Lib

    Foundations of Wasm Runtime Lib

    Goal

    The development server needs access to tooling to easily: Spin up new components, swap out existing components with updated version, pass data to and from components. Thankfully, much of the hard work involved with interfacing with wasmtime has been resolved by wit πŸ₯³ .

    Today we have the beginnings of a runtime lib located in the runtime crate (lol). Let's expand on it.

    Task

    Create a runtime handle which wraps up the process of instantiating new components. For now the key bit of functionality is simply creating a component from a wasm blob. FunctionWorld::instantiate_pre appears to be how we now "pre compile" a module.

    Future iterations will need to put some more thought into the context, store, etc. Furthermore, it isn't clear what the best way is to manage the lifecycle of created wasm components.

    opened by SuddenlyHazel 1
  • Basic CLI

    Basic CLI

    Motivation

    Mycelia is going to need a CLI and it needs to work well with cargo.

    There is a package located at /cli with clap already added as a dependency. Documentation on using clap with cargo can be found here. And, there is a ton of examples here.

    Task

    The CLI will need to support four sub commands.

    1. start - start the development server in the current process
    2. stop - send an RPC call to the running server requesting a shutdown
    3. deploy - send an RPC command requesting the server load a new function wasm
    4. build - build the current project for wasm32-wasi and create a component using wasm-tools

    Blockers

    1. The dev server doesn't exist... @SuddenlyHazel needs to build this.
    opened by SuddenlyHazel 0
Owner
Mycelia
Open Source Tooling for Building Better
Mycelia
Source code and documentation for our 'full stack on rust' meetup on 29-9-2022

Full stack on Rust This is the code and documentation repository for our 'Full stack on Rust' meetup on 29-9-2022. It includes step-by-step documentat

Baseflow 7 Oct 23, 2022
MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine

MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine. Both searching and indexing are highly customizable. Features such as typo-tolerance, filters, and synonyms are provided out-of-the-box. For more information about features go to our documentation.

MeiliSearch 31.6k Dec 30, 2022
An open source virtual tabletop that is currently purely a concept.

An open source virtual tabletop that is currently purely a concept.

null 6 Oct 15, 2022
Blueboat is an open-source alternative to Cloudflare Workers. The monolithic engine for serverless web apps.

Blueboat Blueboat is an open-source alternative to Cloudflare Workers. Blueboat aims to be a developer-friendly, multi-tenant platform for serverless

Heyang Zhou 1.8k Jan 9, 2023
Download Apple's open source code from opensource.apple.com

Apple Open Source Downloader This repository defines a Rust crate and CLI program to automate the downloading of Apple's open source code from https:/

Gregory Szorc 6 Aug 19, 2022
Turbo Resin: open-source firmware for resin printers

Turbo Resin: open-source firmware for resin printers Turbo Resin is an open-source firmware for chitu based controller board printers. It currently su

Nicolas Viennot 139 Dec 22, 2022
Polydrive an experimental open source alternative to Google Drive

Polydrive is an experimental open source alternative to Google Drive. It allows users to synchronize their files on multiple devices.

null 3 Apr 20, 2022
A modern and open source twist to classic pastebin sites.

Turbine A modern and open-source twist to classic pastebin sites. What is this? Turbine originally started out as a simple pastebin idea so I could ha

Jay3332 4 Oct 1, 2022
Ruxnasm is an assembler for Uxntal β€” a programming language for the Uxn stack-machine by Hundred Rabbits

Ruxnasm is an assembler for Uxntal β€” a programming language for the Uxn stack-machine by Hundred Rabbits. Ruxnasm strives to be an alternative to Uxnasm, featuring more user-friendly error reporting, warnings, and helpful hints, reminiscent of those seen in modern compilers for languages such as Rust or Elm.

Karol Belina 44 Oct 4, 2022
The language that eats the stack. Heavily inspired by porth which is inspired off of forth

Snack The language that eats the stack. Heavily inspired by porth which is inspired off of forth Install To use Snack you will need Rust and fasm Afte

Cowboy8625 2 Mar 20, 2022
Symbolically Executable Stack Machines in Rust

Symbolically Executable Stack Machines in Rust Symbolic Stack Machines is a library for implementing symbolically executable stack-based virtual machi

TannrA 64 Dec 28, 2022
A toy-level BLE peripheral stack

bleps - A toy-level BLE peripheral stack This is a BLE peripheral stack in Rust. (no-std / no-alloc) To use it you need an implementation of embedded-

BjΓΆrn Quentin 4 Oct 17, 2022
A Rust client for the NOAA Weather Wire Service Open Interface.

nwws-oi A Rust client for the NOAA Weather Wire Service Open Interface. NWWS-OI is one of several platforms through which the National Weather Service

Will Glynn 3 Sep 15, 2022
OpenEMC: open embedded management controller

OpenEMC OpenEMC is an open-source firmware implementing an embedded management controller (EMC) on an STM32F1 microcontroller. It consists of a bootlo

Sebastian Urban 5 Dec 25, 2022
Federated blogging application, thanks to ActivityPub (now on https://git.joinplu.me/ β€” this is just a mirror)

Plume Website β€” Documentation β€” Contribute β€” Instances list Plume is a federated blogging engine, based on ActivityPub. It is written in Rust, with th

Plume 1.9k Jan 8, 2023
QueingSimulator is an application that can be used to build intuitions about behavior of synchronous request/reply systems

Queueing Simulator QueingSimulator is an application that can be used to build intuitions about behavior of synchronous request/reply systems (such as

Joe Magerramov 7 Sep 11, 2022
Simple tray application which shows battery level for HyperX Cloud Flight Wireless Headset.

HyperX Cloud Flight Battery Monitoring Introduction Simple tray application which shows battery level for HyperX Cloud Flight Wireless Headset. Screen

Stefan Kondinski 18 Dec 27, 2022
An application for reading comics together.

Shared comic reader Creates a web server that serves image sets to one or more clients. When one of those clients turns a page, all other clients who

null 0 Dec 17, 2021
A clean and simple network looking glass application

lg lg is my custom Looking Glass server software for use in ZZANet. The whole application is lightweight, self-contained, and easy to use even outside

Evan Pratten 2 Dec 16, 2022