Compatibility
jsass 6 has no native code of its own. What runs where is decided by the JVM and by the engine you pick: the Javet native library you put on the classpath, GraalJS, which is pure Java, or the native dart-sass executable you install for the embedded engine.
Java
Java 8 / 11 / 17 unsupported
Java 21 supported — the compile target
Java 25 supported — the full test suite runs on it in CI
Still on Java 8 or 11? jsass 5 remains available for maintenance.
Platforms
Javet engines (V8 and Node)
Pick the artifact that matches the engine you chose and the platform you deploy to. All of them
are com.caoccao.javet:<artifact>:6.0.2 on Maven Central — the same version as the javet jar
jsass depends on. A native library from a different Javet release does not fit the Java side.
| Platform | V8 engine | Node engine |
|---|---|---|
| Linux x86_64 | javet-v8-linux-x86_64 |
javet-node-linux-x86_64 |
| Linux arm64 | javet-v8-linux-arm64 |
javet-node-linux-arm64 |
| macOS Apple Silicon | javet-v8-macos-arm64 |
javet-node-macos-arm64 |
| macOS Intel | javet-v8-macos-x86_64 |
javet-node-macos-x86_64 |
| Windows x86_64 | javet-v8-windows-x86_64 |
javet-node-windows-x86_64 |
| Android | javet-v8-android |
javet-node-android |
Javet 6.0.2 ships V8 15.5 and Node.js 26.10. The legacy javet-linux-arm64 / javet-macos /
javet-android-* coordinates were retired upstream after 4.0.0; use the
javet-{v8,node}-<platform> ones above.
i18n variants
Each artifact also exists with an -i18n suffix. Those carry the full ICU data set, which
matters for locale-aware JavaScript APIs. dart-sass does not need it, so the plain artifact is
the smaller and correct default.
There is nothing to unpack or install: Javet extracts the native library from the JAR at startup. Declaring several platform artifacts side by side is fine — only the matching one is loaded.
Java modules
Javet's native jars declare an Automatic-Module-Name that is not a legal module name. On the
module path they need a renamed one — see Java modules.
GraalJS engine
GraalJS needs no platform-specific jar: add org.graalvm.polyglot:js-community (UPL) or
org.graalvm.polyglot:js (GraalVM Free Terms and Conditions) at runtime. jsass is built against
the Polyglot API 25.4.4.1.1.
| Platform | GraalJS engine |
|---|---|
| Linux | |
| macOS | |
| Windows |
GraalJS runs on any Java 21+ JDK, but it is JIT-compiled only on a GraalVM JDK whose Graal
version matches js-community. On every other JDK — Temurin, for instance — it runs in its
interpreter: correct, fine for small stylesheets, but about 55× slower than V8 on a
Bootstrap-sized one. The engines page has the numbers.
Embedded engine
The embedded engine runs wherever the JVM can start the dart-sass executable. dart-sass publishes releases for Linux, macOS and Windows. jsass's own tests run on Linux and macOS; Windows is untested.
| Requirement | Value |
|---|---|
| dart-sass | 1.79.1 or newer (Embedded Sass Protocol 3.x); tested on 1.104.0 |
| What to install | a dart-sass release, not the npm package sass |
| Java dependencies | protobuf-java (transitive), SLF4J |
dart-sass 1.78.0 and older speak protocol 2 and are rejected with a message naming the version.
dart-sass
jsass does not ship dart-sass. It runs whichever copy you provide, so the supported Sass feature set is the one of that version. The embedded engine runs the native executable described above. The JavaScript engines load dart-sass's JavaScript build from one of two sources, and both work with every JavaScript engine:
- A WebJar — the
org.webjars.npm:sassWebJar on the classpath, read byWebjarModuleResolver. jsass is developed and tested against 1.104.0. This is the usual source for V8 and GraalJS. node_modules/sass— installed bynpm install sassoryarn add sass, read byNodeModulesResolver. No WebJar involved and no upper bound from jsass's side. This is the usual source for the Node engine.
jsass's own tests run every engine on dart-sass 1.104.0: the WebJar and the native release are
pinned to it, and the npm package is ^1.104.0. jsass's minimum dart-sass did not change in
6.0.0-alpha.6, but one feature needs more on the JavaScript engines:
| Feature | V8, Node, GraalJS | Embedded |
|---|---|---|
A custom function returning a calculation that contains an operation, such as calc(100% - 2rem) |
dart-sass 1.98.0 or newer; older releases fail inside dart-sass | no extra requirement beyond 1.79.1 |
The Node engine leaves the working directory alone
Up to 6.0.0-alpha.5, the Javet Node engine with NodeModulesResolver moved the JVM
process's working directory into node_modules/sass and left it there. Since
6.0.0-alpha.6 it does not (#101); the old
behaviour is an opt-in.
Sass language features
Everything dart-sass supports, because dart-sass is the compiler here: the modern module system
(@use, @forward), @mixin / @include, all built-in modules, and the full modern color API
including LAB, LCH, OKLAB, OKLCH and the wide-gamut spaces.
Two things behave differently from jsass 5, both inherited from dart-sass:
- The
NESTEDandCOMPACToutput styles no longer exist. UseEXPANDED(details). @importis deprecated upstream in favour of@use. It still works, and jsass exposessilenceDeprecationsif the warnings get in the way.