Gradle build system
Gradle handles compilation, testing, dependency management, and JAR creation. Key features:- Incremental builds — Gradle rebuilds only what has changed.
- Dependency management — handles both project and third-party library dependencies.
- Build caching and parallel execution — speeds up repeated builds.
Repository structure
| File | Purpose |
|---|---|
build.gradle | Root build script: tasks, plugins, dependencies. |
settings.gradle | Multi-project configuration; declares the core and swing sub-projects. |
gradle.properties | Project-wide properties (e.g. version number). |
gradlew / gradlew.bat | Gradle Wrapper scripts. Use these instead of a system-installed Gradle. |
core/ and swing/ sub-projects each have their own build.gradle and gradle.properties.
Important Gradle tasks
| Module | Task | Description |
|---|---|---|
| root | clean | Delete the build directory. |
| root | run | Run the OpenRocket application. |
| root | check | Run unit tests and Checkstyle static analysis. |
| root | build | Compile, test, and create JAR files for both modules. |
| root | dist | Create the distributable JAR at openrocket/build/libs/OpenRocket-<version>.jar. |
| core | serializeEngines | Download the latest thrust curves from ThrustCurve.org and rebuild the SQLite motor database. |
| core | serializeEnginesDist | Same as serializeEngines, but copies the database to the distribution directory. |
| core | submoduleUpdate | Update the core module’s submodule dependencies. |
Running tasks
- macOS / Linux
- Windows
Gradle in IntelliJ IDEA
Open the Gradle tool window via View > Tool Windows > Gradle. The window shows tasks grouped by module (info.openrocket, core, swing). Task groups include application, build, distribution, verification, and shadow (fat JAR).
Thrust curve motor database
The internal motor database is stored as a SQLite file atcore/src/main/resources/datafiles/thrustcurves/thrustcurves.db. At runtime, OpenRocket prefers the .db file and falls back to a legacy .ser file if no SQLite database is found.
Rebuild the database before a release:
.db files; OpenRocket validates them against the expected schema before loading.
Creating installers with install4j
install4j creates the platform-specific installers (Windows.exe, macOS .dmg, Linux .deb/.rpm) from the distributable JAR.
Only OpenRocket administrators have access to the install4j license and code signing certificates.
Code signing
| Platform | Method |
|---|---|
| Windows | Sectigo digital certificate |
| macOS | Apple Developer ID + notarization (handled by install4j) |
| Linux | No signing required |
Building installers
Open the install4j project
Open install4j and load
openrocket/install4j/<version>/openrocket-<version>.install4j.Release procedure
Update release notes
Update
ReleaseNotes.md with new features, bug fixes, and the version number and release date.Update databases
Run
./gradlew core:submoduleUpdate and ./gradlew core:serializeEngines to pull the latest component database and thrust curves.Regenerate example files
Open each example design in
core/src/main/resources/datafiles/examples/ and overwrite the saved results to keep them in sync with the latest simulation engine.Update the version number
Edit
openrocket/core/src/main/resources/build.properties. Use the format YY.MM (for example, 23.09 for September 2023).For pre-releases, append the stage:- Alpha:
23.09.alpha.01 - Beta:
23.09.beta.01 - Release candidate:
23.09.RC.01
23.09).Build and test the JAR
Run
./gradlew dist and verify that the correct version appears on the splash screen and under Help > About.Create and test installers
Build the signed installers with install4j and test them on each target platform.
Prepare the website (official releases only)
In the website repository on the
development branch:- Add the release to
assets/downloads_config.json. - Update
current_versionin_config.yml. - Add a
_whats-new/wn-<version>.mdfile. - Update the release notes include.
Publish on GitHub
Go to the releases page and click Draft a new release.
- Tag:
release-<version>(e.g.,release-23.09) - Title:
OpenRocket <version> (<YYYY-MM-DD>) - Body: content from
ReleaseNotes.md; tag contributors with@username - Attach all installers and the JAR file
- For pre-releases, tick Set as a pre-release
Push website changes
Build the
development branch locally to verify download links and release notes, then merge it to master.Send the release announcement
Post to the OpenRocket mailing list, TRF forum, Discord, and Facebook with a summary of new features and download links.
Upload to SourceForge
Upload the new installers and JAR to the SourceForge project page, which remains heavily used.
Snap package
The snap package is built automatically by Snapcraft, but thelatest/stable release channel must be promoted manually after each release.
--release=stable with candidate or beta for pre-release channels.