Rust port of Browserslist, forked from browserslist-rs.
The original crate did not meet the criteria of oxc, the following changes are made:
- reduced compilation speed from one minute to a few seconds
- improved some runtime performance, e.g. improve sort method, precompute versions
- removed all unnecessary, heavy or slow dependencies:
nom,time,ahash,chrono,either,indexmap,itertools,once_cell,string_cache,serde_json - reduced binary size through data compression and removal of config file support. 717K (this crate) vs 3.2M (original crate).
The following features are not supported, to align with Vite:
- Config file loading (
.browserslistrc,package.jsonbrowserslistfield) - Environment variables (
BROWSERSLIST,BROWSERSLIST_CONFIG,BROWSERSLIST_ENV) extendsquery (e.g.extends browserslist-config-google)- Custom usage (
> 0.5% in my statsorcover 99.5% in my stats)
Inspect query result by running the example:
cargo run --example inspect -- <query>You can also specify additional options, for example:
cargo run --example inspect -- --mobile-to-desktop 'last 2 versions, not dead'cargo testProperty-based tests generate random queries and compare results with the npm browserslist CLI.
# Install npm browserslist first
pnpm install
# Run property-based tests
cargo test --test proptestFuzzing tests use libFuzzer to find edge cases.
# Install cargo-fuzz
cargo install cargo-fuzz
# Run the fuzzer
cd fuzz
cargo +nightly fuzz run fuzz_resolve