The current release is Rhino 1.9.1 . Please see the Release Notes. Compatibility table which shows which advanced JavaScript features from ES6, and ES2016+ are implemented in Rhino. Rhino 1.7.15 and before were primarily used in a single JAR called "rhino.jar". Newer releases now organize the code using Java modules. There are four primary modules and one auxiliary module for Kotlin developers: rhino : The primary codebase necessary and sufficient to run JavaScript code. Required by everything that uses Rhino. In releases after 1.7.15, this module does not contain the "tools" or the XML implementation. rhino-tools : Contains the shell, debugger, and the "Global" object, which many tests and other Rhino-based tools use. Note that adding Global gives Rhino the ability to print to stdout, open files, and do other things that may be considered dangerous in a sensitive environment, so it only makes sense to include if you will use it. rhino-xml : Adds the implementation of the E4X XML standard. Only required if you are using that. rhino-engine : Adds the Rhino implementation of the standard Java ScriptEngine interface. Some projects use this to be able to switch between script execution engines, but for anything even moderately complex it is almost always easier and always more flexible to use Rhino's API directly. rhino-all : This creates an "all-in-one" JAR that includes rhino-runtime , rhino-tools , and rhino-xml . This is what's used if you want to run Rhino using "java jar". rhino-kotlin : Enhanced support for code written in Kotlin, see the details. tests : The tests that depend on all of Rhino and also the external tests, including the Mozilla legacy test scripts and the test262 tests. it-android : Integration tests for android, see the details. benchmarks : Runs benchmarks using JMH. examples : Surprisingly, this contains example code. All applications that embed rhino need the main "rhino" module. Many applications don't need anything else -- consider doing the same, for a few reasons: While "rhino-engine" implements the Java ScriptEngine interface, this is a strange abstraction that does not necessarily map well to Rhino. "rhino-tools" includes the Global module, which many tools use because it includes handy built-in functions like "print" and "load". However, these are not part of any formal standard, and it includes functionality to launch programs and load files that you may not necessarily want in your environment. (Note that "rhino" includes an implementation of the "console" object that you may want to use instead.) It's recommended to build Rhino using Java 25. However, it will build with Java 17 and up. The "spotless" tool, which enforces code formatting, will not run on older Java versions -- it will emit a warning. Rhino runs on Java 17 and higher. The build tools use the "--release" flag to ensure that only features from Java 17 are used in the product. The CI tools run the Rhino tests on Java 17, 21, and 25. Regardless of what version of Java you are building with, you can test on another Java version using the RHINO TEST JAVA VERSION environment variable. The "production" builds of Rhino build using Gradle, but on Linux and Mac you can also build Gradle using Bazel. Bazel caches very aggressively which saves time the more you use it You can use a hosted build service and run your build in parallell on a few, or a dozen, machines. In this way you can run the tests in only a few minutes. At the very least you will need a Java 25 JVM to bootstrap all this. Get Bazel. Build. Bazel downloads and caches all dependencies. If the JLine library is present, the Rhino shell will use it for command-line editing. The commands above will all include JLine. However, the Gradle wrapper interferes with JLine's ability to manipulate the terminal. For the best CLI experience, use either of the last two options, instead of ./gradlew run. When running the benchmarks you may find a couple of environment variables
Excerpt from the source-code README · 14,175 chars · not written by Vinony
via Wikidata · CC0
via Wikidata sitelinks · CC0
Discovered by embedding cosine similarity (sentence-transformers MiniLM, 384-dim).