The Problem

OpenRocket addresses a real gap in model rocketry: you cannot safely or affordably iterate on rocket designs through physical testing alone. Each test flight costs time, materials, and carries risk of losing hardware. OpenRocket replaces that trial-and-error loop with six-degree-of-freedom flight simulation, letting a designer validate stability, altitude, and motor selection before anything leaves the ground.

What This Does

This is a Java desktop application with two Gradle modules: core/ (974 code files) holds the simulation engine, aerodynamics calculators, and file I/O; swing/ (505 code files) is the GUI. The aerodynamic model lives in core/src/main/java/info/openrocket/core/aerodynamics/, with BarrowmanCalculator.java and BarrowmanStabilityCalculator.java implementing the classical Barrowman method for stability prediction. The core/src/main/java/info/openrocket/core/file/ package handles import/export of .ork files, RockSim, and RASAero formats.

The project is a fork of openrocket/openrocket (3,055 stars upstream) with zero stars of its own, suggesting it is a personal or experimental branch rather than a primary distribution point.

How It Is Wired

The static analysis resolved one internal module with zero import edges, so the module graph provides no map of internal control flow. The wiring has not been meaningfully mapped for this repository yet. What is clear from structure: core/src/main/java/info/openrocket/core/database/motor/ThrustCurveMotorSQLiteDatabase.java reads motor thrust curves from a bundled SQLite database at core/src/main/resources/datafiles/thrustcurves/initial_motors.db. Simulation results are written back as .ork files through core/src/main/java/info/openrocket/core/file/openrocket/OpenRocketSaver.java. The swing GUI is the only entry point; there is no CLI in the tree.

How To Use It

Setup: The repo uses Gradle, with a wrapper at core/gradlew. Clone and build:

git clone https://github.com/moses-y/openrocket
cd openrocket/core
./gradlew build

Running it: Launch the GUI from the swing module. The run configuration .idea/runConfigurations/SwingStartup.xml exists for IntelliJ; there is no documented CLI invocation.

Configuration: No environment variables or external config files are required. The bundled SQLite motor database is loaded automatically.

Real-World Use

A club designing a high-power rocket for a competition uses OpenRocket to simulate the flight envelope: they model the airframe in the GUI, select a motor from the bundled thrust-curve database, and run a 6-DOF simulation to verify the stability margin is within the 1-2 caliber range before committing to expensive hardware. The design is exported as an .ork file and shared with the build team.

Code Health & Issues

Static analysis found 486 issues (185 high, 281 medium, 20 low), dominated by one kind: deep nesting (max indentation depth 9) in AbstractAerodynamicCalculator.java and related aerodynamics files, which makes control flow hard to follow.

  • High - Third-party GitHub Actions pinned to tags, not commit SHAs - .github/workflows (e.g., gradle/actions/setup-gradle@v5). A moved tag can execute arbitrary code with your CI token.
  • High - CI never runs the test suite - .github/workflows declares no test command despite 295 test files existing.
  • High - Committed SQLite database dump - core/src/main/resources/datafiles/thrustcurves/initial_motors.db. Remove and purge from history.
  • Medium - No permissions: block on build.yml, leaving the default token scope.
  • Medium - No Dependabot/Renovate configured.
  • Medium - No dependency vulnerability scan in CI.
  • Medium - No pre-commit secret gate.
  • Medium - Three blobs over 5MB tracked in git, including a 17.8MB .afphoto file.
  • Low - No timeout-minutes on workflow jobs.

The Bottom Line

The codebase is a mature, feature-rich simulator with solid domain coverage and a real test suite that CI currently ignores. The high-severity issues—unpinned actions, a committed database dump, and a test suite that never runs—are fixable in an afternoon. This is a working fork for someone who wants OpenRocket internals; the upstream project is the safer choice for production use.