# Boajs **Repository Path**: mirrors/Boajs ## Basic Information - **Project Name**: Boajs - **Description**: Boa 使用 Rust 编写的实验性 JavaScript 词法分析器、解析器和编译器,也是 EcmaScript 规范的 Rust 实现 - **Primary Language**: Rust - **License**: MIT - **Default Branch**: main - **Homepage**: https://www.oschina.net/p/boajs - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-10-12 - **Last Updated**: 2025-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Boa
Boa is an experimental JavaScript lexer, parser and interpreter written in Rust 🦀, it has support for **more** than 90% of the latest ECMAScript specification. We continuously improve the conformance to keep up with the ever-evolving standard. [![Build Status][build_badge]][build_link] [](https://codecov.io/gh/boa-dev/boa) [](https://crates.io/crates/boa_engine) [](https://docs.rs/boa_engine) [](https://discord.gg/tUFFk9Y) [](https://matrix.to/#/#boa:matrix.org) [build_badge]: https://github.com/boa-dev/boa/actions/workflows/rust.yml/badge.svg?event=push&branch=main [build_link]: https://github.com/boa-dev/boa/actions/workflows/rust.yml?query=event%3Apush+branch%3Amain ## ⚡️ Live Demo (WASM) Try out the engine now at the live WASM playground [here](https://boajs.dev/playground)! Prefer a CLI? Feel free to try out `boa_cli`! ## 📦 Crates Boa currently publishes and actively maintains the following crates: - **`boa_ast`** - Boa's ECMAScript Abstract Syntax Tree - **`boa_cli`** - Boa's CLI && REPL implementation - **`boa_engine`** - Boa's implementation of ECMAScript builtin objects and execution - **`boa_gc`** - Boa's garbage collector - **`boa_interner`** - Boa's string interner - **`boa_parser`** - Boa's lexer and parser - **`boa_icu_provider`** - Boa's ICU4X data provider - **`boa_runtime`** - Boa's WebAPI features - **`boa_string`** - Boa's ECMAScript string implementation. - **`tag_ptr`** - Utility library that enables a pointer to be associated with a tag of type `usize`. > [!NOTE] > > The `Boa` and `boa_unicode` crates are deprecated. ## 🚀 Example To start using Boa simply add the `boa_engine` crate to your `Cargo.toml`: ```toml [dependencies] boa_engine = "0.20.0" ``` Then in `main.rs`, copy the below: ```rust use boa_engine::{Context, Source, JsResult}; fn main() -> JsResult<()> { let js_code = r#" let two = 1 + 1; let definitely_not_four = two + "2"; definitely_not_four "#; // Instantiate the execution context let mut context = Context::default(); // Parse the source code let result = context.eval(Source::from_bytes(js_code))?; println!("{}", result.display()); Ok(()) } ``` Now, all that's left to do is `cargo run`. Congrats! You've executed your first JavaScript code using Boa! ## 🔎 Documentation For more information on Boa's API, feel free to check out our documentation. [**API Documentation**](https://docs.rs/boa_engine/latest/boa_engine/) ## 🏅 Conformance To know more details about Boa's conformance surrounding the _ECMAScript_ specification, you can check out our _ECMASCript Test262_ test suite results [here](https://boajs.dev/conformance). ## 🪚 Contributing Please, check the [CONTRIBUTING.md](CONTRIBUTING.md) file to know how to contribute in the project. You will need Rust installed and an editor. We have some configurations ready for VSCode. ### 🐛 Debugging Check [debugging.md](./docs/debugging.md) for more info on debugging. ### 🕸 Web Assembly > [!IMPORTANT] > > This only applies to `wasm32-unknown-unknown` target, > `WASI` and `Emscripten` target variants are handled automatically. - Enable the `js` feature flag. - Set `RUSTFLAGS='--cfg getrandom_backend="wasm_js"'` The `rustflags` can also be set by adding a `.cargo/config.toml` file in the project root directory: ```toml [target.wasm32-unknown-unknown] rustflags = '--cfg getrandom_backend="wasm_js"' ``` For more information see: [`getrandom` WebAssembly Support][getrandom-webassembly-support] [getrandom-webassembly-support]: https://docs.rs/getrandom/latest/getrandom/index.html#webassembly-support ## ⚙️ Usage - Clone this repo. - Run with `cargo run -- test.js` in the project root directory where `test.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 an [issue](https://github.com/boa-dev/boa/issues/)! ### Example  ### Command-line Options ```txt Usage: boa [OPTIONS] [FILE]... Arguments: [FILE]... The JavaScript file(s) to be evaluated Options: --strict Run in strict mode -a, --dump-ast [