Skip to content

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 ✅ supported
macOS ✅ supported
Windows ✅ supported since 6.0.0-alpha.6 (#102); a CI job runs the GraalJS tests on GitLab's Windows runners

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:sass WebJar on the classpath, read by WebjarModuleResolver. jsass is developed and tested against 1.104.0. This is the usual source for V8 and GraalJS.
  • node_modules/sass — installed by npm install sass or yarn add sass, read by NodeModulesResolver. 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 NESTED and COMPACT output styles no longer exist. Use EXPANDED (details).
  • @import is deprecated upstream in favour of @use. It still works, and jsass exposes silenceDeprecations if the warnings get in the way.