GraalJS ScriptEngine implementation based on JSR-223 providing JavaScript execution capabilities through the javax.script.ScriptEngine API.
npx @tessl/cli install tessl/maven-org-graalvm-js--js-scriptengine@24.2.0GraalJS ScriptEngine provides a JSR-223 compliant implementation for executing JavaScript code in Java applications using the high-performance GraalJS runtime. This library bridges Java and JavaScript environments through the standard javax.script.ScriptEngine API, enabling seamless integration of JavaScript scripting capabilities with full ECMAScript compliance and excellent performance.
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>24.2.1</version>
</dependency>
<dependency>
<groupId>org.graalvm.polyglot</groupId>
<artifactId>js</artifactId>
<version>24.2.1</version>
<type>pom</type>
</dependency>import javax.script.*;
import com.oracle.truffle.js.scriptengine.GraalJSScriptEngine;
import com.oracle.truffle.js.scriptengine.GraalJSEngineFactory;
import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Engine;// Standard JSR-223 approach
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
// Execute JavaScript code
Object result = engine.eval("Math.max(10, 20)");
System.out.println(result); // 20
// Set variables in JavaScript scope
engine.put("name", "World");
String greeting = (String) engine.eval("'Hello, ' + name + '!'");
System.out.println(greeting); // Hello, World!
// Direct GraalJS creation with default settings
GraalJSScriptEngine graalEngine = GraalJSScriptEngine.create();
Object value = graalEngine.eval("42 * 2");
System.out.println(value); // 84GraalJS ScriptEngine is built around several key components:
Main JavaScript execution functionality through the JSR-223 compliant ScriptEngine interface. Provides script evaluation, compilation, and variable binding capabilities.
// Main execution methods
Object eval(String script) throws ScriptException;
Object eval(Reader reader) throws ScriptException;
Object eval(String script, ScriptContext context) throws ScriptException;
Object eval(Reader reader, ScriptContext context) throws ScriptException;
// Variable management
Object get(String key);
void put(String key, Object value);
Bindings getBindings(int scope);
void setBindings(Bindings bindings, int scope);
Bindings createBindings();ScriptEngineFactory implementation for service discovery and engine creation with metadata about supported languages, MIME types, and file extensions.
ScriptEngine getScriptEngine();
String getEngineName(); // Returns "Graal.js"
String getEngineVersion();
List<String> getNames(); // JavaScript engine aliases
List<String> getMimeTypes(); // Supported MIME types
List<String> getExtensions(); // ["js", "mjs"]
String getLanguageName(); // "ECMAScript"
String getLanguageVersion(); // "ECMAScript 262 Edition 11"Advanced configuration capabilities through magic bindings, system properties, and direct polyglot context builders for fine-grained control over security and performance settings.
// Direct creation with custom configuration
static GraalJSScriptEngine create();
static GraalJSScriptEngine create(Engine engine, Context.Builder contextConfig);
// Polyglot context access
Context getPolyglotContext();
Context getPolyglotContext(ScriptContext scriptContext);
Engine getPolyglotEngine();
// Resource management
void close(); // AutoCloseable implementationConfiguration & Context Management
By default, GraalJS ScriptEngine runs in a sandboxed environment with limited access to host resources. Access can be granted through configuration:
Always configure security settings appropriately for your use case to maintain application security.