Rhino is an implementation of JavaScript in Java.
Rhino is licensed under the MPL 2.0.
The current release is Rhino 1.7.14. Please see the Release Notes.
Releases
Rhino 1.7.14 | January 6, 2022 |
Rhino 1.7.13 | September 2, 2020 |
Rhino 1.7.12 | January 13, 2020 |
Rhino 1.7.11 | May 30, 2019 |
Rhino 1.7.10 | April 9, 2018 |
Rhino 1.7.9 | March 15, 2018 |
Rhino 1.7.8 | January 22, 2018 |
Rhino 1.7.7.2 | August 24, 2017 |
Rhino 1.7.7.1 | February 2, 2016 |
Rhino 1.7.7 | June 17, 2015 |
Rhino 1.7.6 | April 15, 2015 |
Rhino 1.7R5 | January 29, 2015 |
Compatibility table which shows which advanced JavaScript features from ES6, and ES2016+ are implemented in Rhino.
Information for script builders and embedders:
JavaDoc for all the APIs:
https://javadoc.io/doc/org.mozilla/rhino
Rhino builds with Gradle
. Here are some useful tasks:
./gradlew jar
Build and create Rhino
jar in the buildGradle/libs
directory.
git submodule init
git submodule update
./gradlew test
Build and run all the tests, including the official ECMAScript Test Suite. See Running tests for more detailed info about running tests.
./gradlew testBenchmark
Build and run benchmark tests.
- Ensure all tests are passing
- Remove
-SNAPSHOT
from version ingradle.properties
in project root folder - Create file
gradle.properties
in$HOME/.gradle
folder with following properties. Populate them with maven repo credentials and repo location.
mavenUser=
mavenPassword=
mavenSnapshotRepo=
mavenReleaseRepo=
- Run
Gradle
task to publish artifacts to Maven Central.
./gradlew publish
- Increase version and add
-SNAPSHOT
to it ingradle.properties
in project root folder. - Push
gradle.properties
toGitHub
Rhino can run as a stand-alone interpreter from the command line:
java -jar buildGradle/libs/rhino-1.7.12.jar -debug -version 200
Rhino 1.7.9 2018 03 15
js> print('Hello, World!');
Hello, World!
js>
There is also a "rhino" package for many Linux distributions as well as Homebrew for the Mac.
You can also embed it, as most people do. See below for more docs.
If you are using a modular JDK that disallows the reflective access to
non-public fields (16 and later), you may need to configure the JVM with the
--add-opens
option to authorize the packages that your scripts shall use, for example:
--add-opens java.desktop/javax.swing.table=ALL-UNNAMED
Most issues are managed on GitHub:
https://github.com/mozilla/rhino/issues
To submit a new PR, please use the following process:
- Ensure that your entire build passes "./gradlew check". This will include code formatting and style checks and runs the tests.
- Please write tests for what you fixed, unless you can show us that existing tests cover the changes. Use existing tests, such as those in "testsrc/org/mozilla/javascript/tests", as a guide.
- If you fixed ECMAScript spec compatibility, take a look at test262.properties and see if you can un-disable some tests.
- Push your change to GitHub and open a pull request.
- Please be patient as Rhino is only maintained by volunteers and we may need some time to get back to you.
- Thank you for contributing!
Code formatting was introduced in 2021. The "spotless" plugin will fail your build if you have changed any files that have not yet been reformatted. Please use "spotlessApply" to reformat the necessary files.
If you are the first person to touch a big file that spotless wants to make hundreds of lines of changes to, please try to put the reformatting changes alone into a single Git commit so that we can separate reformatting changes from more substantive changes.
Warning: If you build with Java 16 or later, you need to apply a workaround for a "spotless" issue. Otherwise, the task will be disabled and your PR may fail.
The following must be added to your
gradle.properties
.org.gradle.jvmargs=--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
For more details, see diffplug/spotless#834 (comment)
The Google group is the best place to go with questions: