Skip to main content

Frequently asked questions

Java is a powerful, mature language still widely used in industry. Rewriting the entire codebase in another language would require more time than the volunteer developer team can afford. The current Java codebase is stable and has been tested extensively by the community over many years.That said, maintaining a Java application does present challenges — particularly ensuring it runs correctly across all platforms and hardware configurations, and sustaining the Swing GUI and 3D view. Java also cannot run on mobile platforms such as iOS. If you are interested in helping with a future migration effort, contact the OpenRocket developers.
See the Development setup guide for step-by-step instructions covering Java, Gradle, Git, and IDE configuration.
After setting up your development environment, run OpenRocket using Gradle:
./gradlew run
Alternatively, run the main method in your IDE from either:
  • swing/src/main/java/info/openrocket/swing/startup/SwingStartup.java
  • swing/src/main/java/info/openrocket/swing/startup/OpenRocket.java
See the Development guidelines for the full contribution process, including branch strategy, commit etiquette, and pull request format. Key points:
  • Comment on an issue before starting work to avoid duplicate effort.
  • Use atomic commits — one fix or feature per commit.
  • Name commits in the format [#<issue>] Brief description.
  • Structure pull request descriptions as: problem, root cause, fix.
See the API documentation page for an overview of key packages and classes. You can also generate full Javadoc locally:
./gradlew javadoc
The output is written to core/build/docs/javadoc/.
See Testing and debugging for full instructions. Quick reference:
# All tests
./gradlew test

# Core module only
./gradlew core:test

# A specific test class
./gradlew core:test --tests "info.openrocket.core.util.MathUtilTest"

Build issues

Your Java environment is likely misconfigured. OpenRocket requires Java 17.
# Check the installed Java version
java -version

# Verify JAVA_HOME points to a Java 17 installation
echo $JAVA_HOME
If java -version shows a version below 17, install a Java 17 JDK and update your JAVA_HOME environment variable.
Clean the Gradle cache and rebuild:
./gradlew clean
./gradlew build
If the issue persists, delete the local Gradle cache at ~/.gradle/caches/ and try again.
The core module enforces a minimum of 60% test coverage. If JAR packaging fails with a coverage error, run the coverage report to identify what is missing:
./gradlew test jacocoRootReport
Open core/build/reports/jacoco/index.html to see which classes and methods are not covered.

Runtime issues

The 3D view uses JOGL (Java OpenGL), which can fail on some graphics drivers or virtual machines. Disable it at launch:
java -Dopenrocket.3d.disable -jar OpenRocket.jar
This bypasses the 3D renderer and falls back to a 2D view.
You are calling an OpenRocket API before initializing the core module. Always call OpenRocketCore.initialize() before using any other OpenRocket classes:
OpenRocketCore.initialize();
// Now safe to use OpenRocket APIs
The database files must be accessible on the classpath. During development, you can skip database loading to speed up startup:
System.setProperty("openrocket.bypass.motors", "true");
System.setProperty("openrocket.bypass.presets", "true");
OpenRocketCore.initialize();

Getting help

If the issue is not covered above:

GitHub Issues

Search existing issues or open a new one.

Discord

Chat with the OpenRocket community in real time.

Rocketry Forum

Post in the electronics and software section of TRF.

GitHub Discussions

Start a broader conversation or ask a question.