> Crate: https://crates.io/crates/rustyscript > GitHub: https://github.com/rscarson/rustyscript > Run JS in rust with deno core #rust-project #Deno is a JS/TS runtime, compatible with Node.js since v2, and written in Rust. In their blog [Roll your own JavaScript runtime](https://deno.com/blog/roll-your-own-javascript-runtime) they demonstrated how to build a custom JS runtime with custom functions using `deno_core::op2`. I can't replicate the code in this blog. This repo [make-your-own-js-runtime](https://github.com/carloslfu/make-your-own-js-runtime) is a working demo. [rustyscript](https://crates.io/crates/rustyscript) packaged the into a crate (a thin wrapper over Deno runtime). > Rustyscript is designed to be a thin wrapper over the Deno runtime, to remove potential pitfalls and simplify the API without sacrificing flexibility or performance. It is used in this tauri demo [deno-in-tauri](https://github.com/typed-sigterm/deno-in-tauri). The repo also mentions [Lavendeux](https://github.com/rscarson/lavendeux) using rustyscript. I am thinking about building a deno plugin for Tauri. With my [kkrpc](https://github.com/kunkunsh/kkrpc) protocol It should grant Tauri similar power to Electron. ## Features Here are some sample code ### Run script in string as a default module ```rust let module = Module::new( "test.js", "export default (string, integer) => { console.log(`Hello world: string=${string}, integer=${integer}`); return 4; } ", ); let value: usize = Runtime::execute_module(&module, vec![], Default::default(), json_args!("test", 5))?; assert_eq!(value, 4); ``` ### Load script from FS > Modules can also be loaded from the filesystem with [`Module::load`] or [`Module::load_dir`] if you want to collect all modules in a given directory. ```rust use rustyscript::{json_args, import}; let mut module = import("js/my_module.js").expect("Something went wrong!"); let value: String = module.call("exported_function_name", json_args!()).expect("Could not get a value!"); ``` ### Evaluate JS Expression Directly ```rust let result: i64 = rustyscript::evaluate("5 + 5").expect("The expression was invalid!"); ``` ### Expose Rust Function for JS to Call ```rust use rustyscript::{ Runtime, Module, serde_json::Value }; let module = Module::new("test.js", " rustyscript.functions.foo(); "); let mut runtime = Runtime::new(Default::default())?; runtime.register_function("foo", |args| { if let Some(value) = args.get(0) { println!("called with: {}", value); } Ok(Value::Null) })?; runtime.load_module(&module)?; ```