Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork442
Boa is an embeddable Javascript engine written in Rust.
License
MIT, Unlicense licenses found
Licenses found
boa-dev/boa
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Boa is an experimental JavaScript lexer, parser and interpreter written in Rust 🦀, it has support formore than 90% of the latest ECMAScript specification. We continuously improve the conformance to keep up with the ever-evolving standard.
Try out the engine now at the live WASM playgroundhere!
Prefer a CLI? Feel free to try outboa_cli
!
Boa currently publishes and actively maintains the following crates:
boa_ast
- Boa's ECMAScript Abstract Syntax Treeboa_cli
- Boa's CLI && REPL implementationboa_engine
- Boa's implementation of ECMAScript builtin objects andexecutionboa_gc
- Boa's garbage collectorboa_interner
- Boa's string internerboa_parser
- Boa's lexer and parserboa_icu_provider
- Boa's ICU4X data providerboa_runtime
- Boa's WebAPI featuresboa_string
- Boa's ECMAScript string implementation.tag_ptr
- Utility library that enables a pointer to be associated with a tag of typeusize
.
Note
TheBoa
andboa_unicode
crates are deprecated.
To start using Boa simply add theboa_engine
crate to yourCargo.toml
:
[dependencies]boa_engine ="0.20.0"
Then inmain.rs
, copy the below:
use boa_engine::{Context,Source,JsResult};fnmain() ->JsResult<()>{let js_code =r#" let two = 1 + 1; let definitely_not_four = two + "2"; definitely_not_four "#;// Instantiate the execution contextletmut context =Context::default();// Parse the source codelet result = context.eval(Source::from_bytes(js_code))?;println!("{}", result.display());Ok(())}
Now, all that's left to do iscargo run
.
Congrats! You've executed your first JavaScript code using Boa!
For more information on Boa's API, feel free to check out our documentation.
To know more details about Boa's conformance surrounding theECMAScript specification,you can check out ourECMASCript Test262 test suite resultshere.
Please, check theCONTRIBUTING.md file to know how tocontribute in the project. You will need Rust installed and an editor. We havesome configurations ready for VSCode.
Checkdebugging.md for more info on debugging.
Important
This only applies towasm32-unknown-unknown
target,WASI
andEmscripten
target variants are handled automatically.
- Enable the
js
feature flag. - Set
RUSTFLAGS='--cfg getrandom_backend="wasm_js"'
Therustflags
can also be set by adding a.cargo/config.toml
file in the project root directory:
[target.wasm32-unknown-unknown]rustflags ='--cfg getrandom_backend="wasm_js"'
For more information see:getrandom
WebAssembly Support
- Clone this repo.
- Run with
cargo run -- test.js
in the project root directory wheretest.js
is a path to an existing JS file with any valid JS code. - If any JS doesn't work then it's a bug. Please raise anissue!
Usage: boa [OPTIONS] [FILE]...Arguments: [FILE]... The JavaScript file(s) to be evaluatedOptions: --strict Run in strict mode -a, --dump-ast [<FORMAT>] Dump the AST to stdout with the given format [possible values: debug, json, json-pretty] -t, --trace Dump the AST to stdout with the given format --vi Use vi mode in the REPL -O, --optimize --optimizer-statistics --flowgraph [<FORMAT>] Generate instruction flowgraph. Default is Graphviz [possible values: graphviz, mermaid] --flowgraph-direction <FORMAT> Specifies the direction of the flowgraph. Default is top-top-bottom [possible values: top-to-bottom, bottom-to-top, left-to-right, right-to-left] --debug-object Inject debugging object `$boa` -m, --module Treats the input files as modules -r, --root <ROOT> Root path from where the module resolver will try to load the modules [default: .] -h, --help Print help (see more with '--help') -V, --version Print version
SeeMilestones.
The current benchmarks are taken from v8's benchmark that you can findhere. You can also view the results of nightly benchmark runs comparing Boa with other JavaScript engineshere.
If you wish to run the benchmarks locally, then run Boa in release using thecombined.js
script which contains all the sub-benchmarks in thebench-v8
directory.
cargo run --release -p boa_cli -- bench-v8/combined.js
Tip
If you'd like to run only a subset of the benchmarks, you can modify theMakefile
located in thebench-v8
directory.Comment out the benchmarks you don't want to include, then runmake
. After that, you can run Boa using the same command as above.
SeeProfiling.
SeeCHANGELOG.md.
Feel free to contact us onMatrix if you have any questions.Contributor discussions take place on the same Matrix Space if you're interested in contributing.We also have aDiscord for any questions or issues.
This project is licensed under theUnlicense orMIT licenses, at your option.
About
Boa is an embeddable Javascript engine written in Rust.
Topics
Resources
License
MIT, Unlicense licenses found
Licenses found
Code of conduct
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.