A JavaScript Runtime built with Mozilla's SpiderMonkey Engine and Rust

Overview

Discord Server License: MPL 2.0

Spiderfire

Spiderfire is a javascript runtime built with Mozilla's SpiderMonkey engine and Rust.

Spiderfire aims to disrupt the server-side javascript runtime environment.

Licensing

This project is licensed under the Mozilla Public License 2.0. The full text of the license can be found here.

Build

For instructions on building Spiderfire, refer here.

Comments
  • [RFC] Macro for Native Classes

    [RFC] Macro for Native Classes

    Extension of #4 for Classes

    This is a low priority task, as procedural macros will most likely be required, and other aspects such as more standard modules and the event loop are more important to complete currently.

    Proposed Syntax

    #[js_class]
    mod Name {
        struct Fields {
            str: String,
            num: u64
        }
        
        #[constructor]
        fn constructor() -> IonResult<Name> {
            Fields {
                str: "",
                num: 0
            }
        }
        
        fn method(#[this] this: IonObject, num: f64) -> IonResult<()> {
            println!("{}", this.str);
            this.set("num", num);
        }
        
        #[get]
        fn get(#[this] this: IonObject) -> IonResult<f64> {
            Ok(this.get("num"))
        }
        
        #[set]
        fn set(#[this] this: IonObject, String str) -> IonResult<()> {
            this.set("str", str);
            Ok(())
        }
    }
    
    Feature: Native/API RFC Progress: Complete 
    opened by Redfire75369 7
  • JavaScript Promise & Rust Future Interoperability

    JavaScript Promise & Rust Future Interoperability

    Issue

    Although promises have been implemented, with the addition of the event loop, there is still an issue as native asynchronicity cannot be used. Every promise that is created requires its own native function to be made.

    Requirements

    • Advanced Understanding of Rust and JavaScript Asynchronous Runtimes
    • Understanding of codebase to utilise and enhance APIs

    Possible Solution

    An API will need to be created that allows Rust Futures to be converted to JavaScript Promises. One possible plan of action is similar to wasm-bindgen, where the future is spawned in a seperate thread, and awaited.

    However, this would require a more flexible API for creating promises. Promises currently each require their own native function. Each promise converted from a future would need to be created dynamically. The most effective solution for this would be to allow callbacks for the creation of Promises, but I am unsure of how this could be done.

    Feature: Native/API Progress: Complete 
    opened by Redfire75369 6
  • [RFC] HTTP Module

    [RFC] HTTP Module

    I've been working on a HTTP module for a while now. I'm just stuck on a few of the API decisions, specifically on how to use the Response to get the data. If you have any other feedback on it, that'd be nice too.

    Here's the current API in http.d.ts. <Removed as it is outdated, See below hidden comment>

    Feature: Module RFC 
    opened by Redfire75369 4
  • Change default output colors to align with Node.js

    Change default output colors to align with Node.js

    Currently, different data types cause differently colored output, which (at least in my opinion) is distracting.

    grafik

    ~~I would suggest changing the output to always be colored white.~~

    opened by joseywoermann 4
  • Fixed FS Module Declaration in TypeScript Definition

    Fixed FS Module Declaration in TypeScript Definition

    based on the other module declaration files this is likely to be a typo @Redfire75369 sorry, while reading the fs module I notice it was declared as assert. Is this an error?

    opened by Gers2017 3
  • Ctrl + C in repl mode results in Segmentation fault

    Ctrl + C in repl mode results in Segmentation fault

    From Ubuntu, zsh, have the current pre-release binary, When i press Ctrl + C 2 times in repl mode i get the following:

    > ^C
    Press Ctrl+C again to exit.
    ^Cmozilla::detail::MutexImpl::~MutexImpl: pthread_mutex_destroy failed: Device or resource busy
    [2]    12204 segmentation fault (core dumped)  /home/v9/Downloads/spidey/spiderfire repl
    
    Bug: CLI 
    opened by Vaimer9 3
  • Issue with Build on various platforms

    Issue with Build on various platforms

    Issue

    Description

    Compilation of spiderfire fails inconsistently on GH Actions during build workflow and when cloning from source.

    Examples

    GitHub Actions

    MacOS build completes successfully Windows and Ubuntu do not successfully build.

    Clone & Build (Linux):

    Experience similar issue to the issue in the Ubuntu CI build.

    Temporary Solution:

    Run cargo update to update Cargo.lock's version of mozjs and mozjs_sys

    Notes

    Refer to issue on rust-mozjs repository for updates

    opened by Redfire75369 3
  • Idea: Easier writing of native functions for SM

    Idea: Easier writing of native functions for SM

    Now you are writing all functions naked for SpiderMonkey. Even Servo does not do that. It uses procedural macro (and WebIDL). Well WebIDL is probably overkill but proc macros...

    This is how it could look like:

    #[jsfn]
    pub fn print(s: String) {
          println!("rust said: {}", s)
    }
    

    and it would expend to:

    unsafe extern "C" fn print(context: *mut JSContext, argc: u32, vp: *mut Value) -> bool {
        let args = Arguments::new(argc, vp);
        args.rval().set(UndefinedValue());
    
        if args.len != 1 {
            JS_ReportErrorASCII(context, b"print() requires exactly 1 argument\0".as_ptr() as *const libc::c_char);
            return false;
        }
    
        println!("{}", to_string(cx, args.value(0).unwrap()));
    
        return true;
    }
    

    It could also be applied for methods (like the one you uses in fs.rs). Something like this is also used in https://github.com/rjs-team/rjs look at js_fn! macro.

    Feature: Native/API 
    opened by sagudev 2
  • Getting this function takes 3 arguments but 2 arguments were supplied From ModuleEvaluate function

    Getting this function takes 3 arguments but 2 arguments were supplied From ModuleEvaluate function

    here is the logs ``` Fresh cc v1.0.67 Fresh version_check v0.9.3 Fresh glob v0.3.0 Fresh unicode-xid v0.2.1 Fresh autocfg v1.0.1 Fresh pkg-config v0.3.19 Fresh regex-syntax v0.6.23 Fresh rustc-hash v1.1.0 Fresh shlex v0.1.1 Fresh lazy_static v1.4.0 Fresh cfg-if v1.0.0 Fresh same-file v1.0.6 Fresh lazycell v1.3.0 Fresh cfg-if v0.1.10 Fresh peeking_take_while v0.1.2 Fresh unicode-width v0.1.8 Fresh ansi_term v0.11.0 Fresh strsim v0.8.0 Fresh vec_map v0.8.2 Fresh once_cell v1.7.2 Fresh termcolor v1.1.2 Fresh regex v1.4.5 Fresh walkdir v2.3.1 Fresh textwrap v0.11.0 Fresh libc v0.2.89 Fresh memchr v2.3.4 Fresh proc-macro2 v1.0.24 Fresh bitflags v1.2.1 Fresh encoding_rs v0.8.28 Fresh which v3.1.1 Fresh log v0.4.14 Fresh atty v0.2.14 Fresh time v0.1.44 Fresh nom v5.1.2 Fresh libloading v0.5.2 Fresh quote v1.0.9 Fresh num-traits v0.2.14 Fresh libz-sys v1.1.2 Fresh encoding_c v0.9.8 Fresh encoding_c_mem v0.2.6 Fresh clap v2.33.3 Fresh cexpr v0.4.0 Fresh clang-sys v0.29.3 Fresh num-integer v0.1.44 Fresh bindgen v0.53.3 Fresh chrono v0.4.19 Fresh mozjs_sys v0.68.2 (https://github.com/servo/mozjs?rev=82da136c53d7ca7b0b7fe1c5622627036ef31899#82da136c) Fresh mozjs v0.14.1 (https://github.com/servo/rust-mozjs#fe104a26) Compiling spiderfire v0.1.0 (/home/wolfpat/spiderfire) Running rustc --crate-name spiderfire --edition=2018 src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -Cembed-bitcode=no -C debuginfo=2 -C metadata=f681912fcf3e37c1 -C extra-filename=-f681912fcf3e37c1 --out-dir /home/wolfpat/spiderfire/target/debug/deps -C incremental=/home/wolfpat/spiderfire/target/debug/incremental -L dependency=/home/wolfpat/spiderfire/target/debug/deps --extern chrono=/home/wolfpat/spiderfire/target/debug/deps/libchrono-33f7dbbd138754ae.rlib --extern clap=/home/wolfpat/spiderfire/target/debug/deps/libclap-02d3490164b7a98c.rlib --extern libc=/home/wolfpat/spiderfire/target/debug/deps/liblibc-92a6ce5a991a67c9.rlib --extern mozjs=/home/wolfpat/spiderfire/target/debug/deps/libmozjs-b5ab7020a62ab304.rlib --extern once_cell=/home/wolfpat/spiderfire/target/debug/deps/libonce_cell-e9da1314ab8fbd82.rlib --extern termcolor=/home/wolfpat/spiderfire/target/debug/deps/libtermcolor-e268ff7bc76f4625.rlib -L native=/home/wolfpat/spiderfire/target/debug/build/mozjs-3ca1e6668fc070d0/out -L native=/home/wolfpat/spiderfire/target/debug/build/mozjs_sys-36dbba0e74ff8ac2/out/build/js/src/build -L native=/home/wolfpat/spiderfire/target/debug/build/mozjs_sys-36dbba0e74ff8ac2/out/build/glue error[E0061]: this function takes 3 arguments but 2 arguments were supplied --> src/runtime/jsapi_utils/eval.rs:103:8 | 103 | if !ModuleEvaluate(rt.cx(), module.handle().into()) { | ^^^^^^^^^^^^^^ ------- ---------------------- supplied 2 arguments | | | expected 3 arguments

    error: aborting due to previous error

    For more information about this error, try rustc --explain E0061. error: could not compile spiderfire.

    Caused by: process didn't exit successfully: rustc --crate-name spiderfire --edition=2018 src/main.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -Cembed-bitcode=no -C debuginfo=2 -C metadata=f681912fcf3e37c1 -C extra-filename=-f681912fcf3e37c1 --out-dir /home/wolfpat/spiderfire/target/debug/deps -C incremental=/home/wolfpat/spiderfire/target/debug/incremental -L dependency=/home/wolfpat/spiderfire/target/debug/deps --extern chrono=/home/wolfpat/spiderfire/target/debug/deps/libchrono-33f7dbbd138754ae.rlib --extern clap=/home/wolfpat/spiderfire/target/debug/deps/libclap-02d3490164b7a98c.rlib --extern libc=/home/wolfpat/spiderfire/target/debug/deps/liblibc-92a6ce5a991a67c9.rlib --extern mozjs=/home/wolfpat/spiderfire/target/debug/deps/libmozjs-b5ab7020a62ab304.rlib --extern once_cell=/home/wolfpat/spiderfire/target/debug/deps/libonce_cell-e9da1314ab8fbd82.rlib --extern termcolor=/home/wolfpat/spiderfire/target/debug/deps/libtermcolor-e268ff7bc76f4625.rlib -L native=/home/wolfpat/spiderfire/target/debug/build/mozjs-3ca1e6668fc070d0/out -L native=/home/wolfpat/spiderfire/target/debug/build/mozjs_sys-36dbba0e74ff8ac2/out/build/js/src/build -L native=/home/wolfpat/spiderfire/target/debug/build/mozjs_sys-36dbba0e74ff8ac2/out/build/glue (exit code: 1)

    
    
    opened by haouarihk 2
  • Added Macro for Native Functions

    Added Macro for Native Functions

    Resolves: #4

    This pull request also splits the application into multiple applications.

    The addition of this new macro allows easier creation of native functions to reduce boilerplate and chances for type errors. An eventual move to a custom attribute procedural macro is intended, but I lack experience and knowledge in that, so this will do for now.

    Example Syntax:

    #[js_fn]
    fn print(val: String) -> IonResult<()> {
        println!("{}", val);
    
        Ok(())
    }
    
    #[js_fn]
    fn log(cx: IonContext, #[varargs] values: Vec<Value>) -> IonResult<()> {
        print_indent(false);
        print_args(cx, values, false);
        println!();
    
        Ok(())
    }
    
    Feature: Native/API 
    opened by Redfire75369 1
  • Added Procedural Macro for Native Classes

    Added Procedural Macro for Native Classes

    Resolves: #9

    The addition of this new procedural macro allows easier creation of native functions to reduce boilerplate and chances for type errors. It currently supports:

    • Methods
    • Accessors
    • Accessors for Public Properties
    • Static Methods,
    • Static Value Properties
    • Static Accessors

    Below is an example of code using this macro:

    #[ion::js_class]
    mod switch {
    	use ion::Result;
    	use mozjs::conversions::ConversionBehavior::Clamp;
    
    	#[derive(Clone, Debug)]
    	pub struct Switch {
    		b: bool,
    		#[convert(Clamp)]
    		pub i: i32,
    	}
    
    	impl Switch {
    		pub const INT: i32 = 32;
    		pub const DOUBLE: f64 = 4.20;
    		pub const STRING: &'static str = "SPIDER\0";
    
    		#[constructor]
    		fn new(b: bool) -> Result<Switch> {
    			Ok(Switch { b, i: 144 })
    		}
    
    		fn print(#[this] this: &mut Switch) -> Result<()> {
    			eprintln!("SWITCH: {:?}", this);
    			Ok(())
    		}
    
    		fn switch(#[this] this: &mut Switch) -> Result<()> {
    			this.b = !this.b;
    			Ok(())
    		}
    
    		fn spiderfire() -> Result<String> {
    			Ok(String::from("SPIDERFIRE"))
    		}
    
    		#[get]
    		fn b(#[this] this: &Switch) -> Result<bool> {
    			Ok(this.b)
    		}
    
    		#[set]
    		fn set_b(#[this] this: &mut Switch, b: bool) -> Result<()> {
    			this.b = b;
    			Ok(())
    		}
    
    		#[get]
    		fn get_a() -> Result<i32> {
    			Ok(Switch::INT)
    		}
    
    		#[set]
    		fn c(_: bool) -> Result<()> {
    			eprintln!("Pranked!");
    			Ok(())
    		}
    	}
    }
    

    The rough equivalent of this code in TypeScript would be

    class Switch {
    	static INT = 32;
    	static DOUBLE = 4.20;
    	static STRING = "SPIDER";
    	
    	constructor(b: boolean) {
    		self._b = b;
    		self._i = 144;
    	}
    	
    	print() {
    		console.log(this);
    	}
    	
    	switch() {
    		this.b = !this.b;
    	}
    	
    	static spiderfire() {
    		return "SPIDERFIRE";
    	}
    	
    	get b() {
    		return this._b;
    	}
    	
    	set b(b: boolean) {
    		this.b = b;
    	}
    	
    	static get a() {
    		return Switch.INT;
    	}
    	
    	static set c(_: any) {
    		console.log("Pranked!");
    	}
    	
    	get i() {
    		return this._i;
    	}
    	
    	set i(i: number) {
    		this._i = i;
    	}
    }
    
    Feature: Native/API Progress: Complete 
    opened by Redfire75369 0
  • [Hacktoberfest] URLSearchParams in URL Module

    [Hacktoberfest] URLSearchParams in URL Module

    Although the URL Module is mostly complete, URLSearchParams is currently unimplemented. This can be implemented with the #[js_class] macro, you can look at the definition of URL or ask here for more help.

    Since the URLSearchParams should mutate the underlying URL object, it can probably store a url: &mut Url or the output of Url::query_pairs_mut. Url::query_pairs_mut should deal with most of the underlying implementation details, and the main task will be mapping the underlying functions to the JS API.

    Requirements: Basic in JavaScript, Intermediate in Rust Difficulty: Intermediate

    Resources

    Feature: Module Hacktoberfest 
    opened by Redfire75369 0
  • [Hacktoberfest] JavaScript API Documentation

    [Hacktoberfest] JavaScript API Documentation

    Currently, Spiderfire has 4 modules (assert, fs, path, url) and a bunch of globals Iconsole, setTimeout, etc.). However, it can be a bit confusing for the users who would like to use these since their API differs slightly from stuff like node or deno.

    All of the above have typescript and flow declaration files. As such, it would be nice to add documentation in these files for those functions. All contributions are welcome.

    Most of the functions should make sense on their own, but feel free to ask here if you need some help.

    Requirements: Intermediate in JavaScript Difficulty: Easy

    Resources

    Documentation Hacktoberfest 
    opened by Redfire75369 0
  • HTTP Networking Module

    HTTP Networking Module

    Issue

    Spiderfire currently lacks a networking module, making it impossible to use this as a serverside runtime, and serve webpages for example. It is also unable to fetch data from web APIs. Implementing a networking module will be essential for spiderfire's usage.

    Possible Solution

    hyper or reqwest can be used to provide HTTP networking APIs in a module.

    Type: Help Wanted Feature: Module 
    opened by Redfire75369 2
  • Add Typescript Support

    Add Typescript Support

    I know, I know this is a deno thing but I really think it would improve the project by attracting all the typescript folks. Personally is something node.js needs and I'd use it without doubt. I'm not suggesting get rid of javascript, not at all, what I'm suggesting is let the users use typescript or javascript without too much configuration or boilerplate. I'm still learning rust but I'd like to work/collaborate on this feature.

    Good First Issue 
    opened by Gers2017 9
  • Documentation for Internal and External API

    Documentation for Internal and External API

    Lack of Documentation

    Spiderfire is currently lacking documentation for most of its API. It would be nice to have the structs and functions documented so that contributors can more easily understand the codebase, and users can begin creation of native modules.

    Requirements

    This task requires basic understanding of Rust, to understand the codebase, and intermediate understanding of Javascript, to understand the interactions with SpiderMonkey. Difficulty: Easy to Intermediate

    Workspace Crates

    • Ion Procedural Macros ('ion-proc`): Contains procedural macros.
      • Wrappers around regular macros
    • Ion (ion): Contains wrappers around the native JSAPI.
      • Wrappers around native types. (IonObject, IonArray, IonDate, IonFunction)
      • Conversion and printing of native types.
      • Handling runtime exceptions.
    • Runtime ('runtime'): Contains functions related to runtime initialisation and operation.
      • Module loader.
      • Console global.
      • Logging level.
    • Modules ('modules'): Contains standard modules.
      • Assertion (assert)
      • File System (fs)
    • CLI (cli): Contains the application code for the command-line interface.
      • Evaluation (eval)
      • REPL (repl)
      • Running modules/scripts (run)
    Documentation Type: Help Wanted Progress: Started 
    opened by Redfire75369 0
  • Multiple Tests in One File

    Multiple Tests in One File

    Issue

    Currently, there is a limitation to the usage of tests as only 1 test per file can be created to test actions within the runtime. This is due to the following. Hence, only 1 runtime can be initialised per thread. Due to how cargo tests are run serially(with --test-threads=1) and in parallel, this means only 1 runtime can be initialised per executable, which requires 1 file per test.

    It is currently not possible to initialize SpiderMonkey multiple times (that is, calling JS_Init/JSAPI methods/JS_ShutDown in that order, then doing so again). This restriction may eventually be lifted.

    Finding a solution to this will improve flexibility for future tests with more complex modules, and JSAPI wrappers. Currently, I have a draft of tests for the fs module, but I am not satisfied with them, as putting them all in a singular function partially defeats the purpose of such tests, as they are not targeted. With this improvement, each portion of the fs module can then be tested independently, and properly utilise cargo's test system, with many tests and test cases.

    Requirements

    • Advanced Understanding of Rust, static values and cargo tests
    • Intermediate Understanding of JavaScript
    • Understanding of Spidermonkey Runtime and Engine initialisation

    Possible Solution

    thread_local or Mutex could be used to store the ParentRuntime and Runtime::create_with_parent could be used to create the appropriate runtimes.

    Type: Help Wanted Tests 
    opened by Redfire75369 1
Releases(v0.1.0-pre.4)
  • v0.1.0-pre.4(Aug 2, 2022)

    Until the full launch of spiderfire, releases will not be versioned and will not be regularly scheduled. This release will be deleted when spiderfire is officially launched.

    This release is meant for developers to begin developing libraries before full-release.

    spiderfire.exe - Windows spiderfire-osx/spiderfire-osx.tar - MacOS spiderfire - Linux

    Changes- Added TypeScript Support

    • Added Cache for Compiled TypeScript

    • Added URL Module

    • Added queueMacrotask and queueMicrotask

    • Added console.table

    • Added Path Normalisation in Stacktraces

    • Added Global Standard Modules for Scripts

    • Added Bracket Validator to REPL

    • Fixed REPL Termination

    Source code(tar.gz)
    Source code(zip)
    bindings.zip(6.72 KB)
    spiderfire(33.98 MB)
    spiderfire-osx(31.68 MB)
    spiderfire-osx.tar(31.68 MB)
    spiderfire.exe(32.16 MB)
  • v0.1.0-pre.3(Dec 16, 2021)

    Until the full launch of spiderfire, releases will not be versioned and will not be regularly scheduled. This release will be deleted when spiderfire is officially launched.

    This release is meant for developers to begin developing libraries before full-release.

    spiderfire.exe - Windows spiderfire-osx/spiderfire-osx.tar - MacOS spiderfire - Linux

    Changes

    • Fixed Microtask Queue Recursion (async/await)
    • Added Exception for Failure during Module Resolution
    • Added Panic Unwind Handler for Native Functions
    Source code(tar.gz)
    Source code(zip)
    spiderfire(27.15 MB)
    spiderfire-osx(25.77 MB)
    spiderfire-osx.tar(25.78 MB)
    spiderfire.exe(25.05 MB)
  • v0.1.0-pre.2(Dec 1, 2021)

  • v0.1.0-pre.1(Nov 21, 2021)

    Until the full launch of spiderfire, releases will not be versioned and will not be regularly scheduled. This release will be deleted when spiderfire is officially launched

    This release is meant for developers to begin developing libraries before full-release.

    The executable on its own has no output, Use spiderfire help to see available subcommands and options.

    spiderfire.exe - Windows spiderfire - Linux

    Source code(tar.gz)
    Source code(zip)
    spiderfire(27.35 MB)
    spiderfire.exe(24.72 MB)
Owner
Redfire
Redfire
Modern JavaScript runtime for Sony PSP, based on rust-psp and QuickJS.

PSP.js Modern JavaScript runtime for Sony PSP, based on rust-psp and QuickJS. ⚠️ Currently in PoC state, unusable for developing JavaScript apps yet.

Yifeng Wang 15 Nov 28, 2022
The JavaScript runtime that aims for productivity and ease

Byte Byte is a easy and productive runtime for Javascript . It makes making complex programs simple and easy-to-scale with its large and fast Rust API

Byte 32 Jun 16, 2021
Diamond is a minimalistic, powerful, and modern Javascript runtime that uses Deno_Core.

Diamond Diamond is a minimalistic, powerful, and modern Javascript runtime that uses Deno_Core. Installation Diamond is currently in beta(not even Alp

Catermelon 4 Aug 30, 2021
A Lean Secure Runtime for JavaScript

Tera tera is a lean secure capability-based runtime for JavaScript. It is primarily designed for multi-tenant serverless environment but has uses in o

Gigamono 7 Oct 7, 2022
Spine runtime for Rust (and wasm!) transpiled from the official C Runtime.

rusty_spine Spine runtime for Rust (and wasm!) transpiled from the official C Runtime. Supports Spine 4.1. [dependencies] rusty_spine = "0.4.0" Onlin

jabu 12 Dec 17, 2022
A simple programming language made for scripting inspired on rust and javascript.

FnXY Programming Language Quick move: CONTRIBUTING | LICENSE What? FnXY is a simple programming language made for scripting inspired on rust and javas

null 2 Nov 27, 2021
swc is a super-fast compiler written in rust; producing widely-supported javascript from modern standards and typescript.

Make the web (development) faster. SWC (stands for Speedy Web Compiler) is a super-fast TypeScript / JavaScript compiler written in Rust. It's a libra

swc 25.4k Dec 31, 2022
Facilitating high-level interactions between Wasm modules and JavaScript

wasm-bindgen Facilitating high-level interactions between Wasm modules and JavaScript. Guide | API Docs | Contributing | Chat Built with ?? ?? by The

Rust and WebAssembly 5.9k Jan 8, 2023
A programming environment that aims to help people learn how to program in JavaScript, while giving them a tour on how old computers and their limitations used to be.

This repository is for the new under renovation rewrite of the LIKO-12 project. The legacy version with the original stars and contributions is still

null 1k Jan 5, 2023
Guarding 是一个用于 Java、JavaScript、Rust、Golang 等语言的架构守护工具。借助于易于理解的 DSL,来编写守护规则。Guarding is a guardians for code, architecture, layered.

Guarding Guarding is a guardians for code, architecture, layered. Using git hooks and DSL for design guard rules. Usage install cargo install guarding

Inherd OS Team (硬核开源小组) 47 Dec 5, 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
Javascript wrapper bindings for diamond types

Diamond JS wrapper library This is a javascript / WASM wrapper around diamond types. This code is currently experimental WIP. Do not trust this for an

Seph Gentle 14 Jun 16, 2022
Node.js bindings to the ripgrep library, for fast file searching in JavaScript without child processes!

ripgrepjs ripgrepjs: Node.js bindings to the ripgrep library, for direct integration with JS programs without spawning an extra subprocess! This proje

Annika 1 May 10, 2022
The Hassle-Free JavaScript Tool Manager

The Hassle-Free JavaScript Tool Manager Fast: Install and run any JS tool quickly and seamlessly! Volta is built in Rust and ships as a snappy static

Volta: Start your engines. ⚡ 7.3k Jan 8, 2023
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
Objective-C Runtime bindings and wrapper for Rust.

Objective-C Runtime bindings and wrapper for Rust. Documentation: http://ssheldon.github.io/rust-objc/objc/ Crate: https://crates.io/crates/objc Messa

Steven Sheldon 336 Jan 2, 2023
Minimal framework to inject the .NET Runtime into a process in Rust

錆の核 sabinokaku Minimal framework to inject the .NET Runtime into a process. Supports Windows and Linux. macOS support is complicated due to SIP, and w

Snowflake Emulator Frontend 8 Mar 6, 2022
Zinnia is a runtime for Filecoin Station modules. It provides a sandboxed environment to execute untrusted code on consumer-grade computers.

?? Zinnia Zinnia is a runtime for Filecoin Station modules. It provides a sandboxed environment to execute untrusted code on consumer-grade computers.

Filecoin Station 5 Jan 25, 2023
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