OpenRocket Headless Simulation
Quick Start — rocket-sim CLI
The rocket-sim CLI at ~/broomva/experiments/rocket-tools/ wraps OpenRocket's headless core. All output is structured JSON.
# Prerequisites: Java 17
export JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
ROCKET="~/broomva/experiments/openrocket/core/src/main/resources/datafiles/examples/A simple model rocket.ork"
# Inspect rocket design
rocket-sim info "$ROCKET"
# Run simulation → JSON with altitude, velocity, mach, events
rocket-sim run "$ROCKET"
# Parameter sweep (rod_angle, rod_length, launch_altitude, wind_speed, time_step)
rocket-sim sweep "$ROCKET" wind_speed 0,2,5,8,10
# Flight event timeline
rocket-sim events "$ROCKET"
Validated results (A simple model rocket, A8-3 motor):
- Max altitude: 50.7m | Max velocity: 29.3 m/s | Mach: 0.086 | Flight time: 15.9s
- Events: Launch→Ignition→Liftoff→Burnout→Apogee→Ejection→Parachute→Ground
Two stage high power rocket (multi-branch):
- Max altitude: 677.6m | Max velocity: 159.1 m/s | Mach: 0.469 | Flight time: 64.0s
AI Optimizer
At ~/broomva/experiments/rocket-ai/optimizer.py. Iterative loop: Claude analyzes simulation results, proposes parameter sweeps, evaluates trade-offs, converges.
export ANTHROPIC_API_KEY=sk-...
cd ~/broomva/experiments/rocket-ai
python3 optimizer.py "path/to/rocket.ork" \
--goal "Maximize altitude while keeping ground hit velocity under 10 m/s" \
--iterations 5
Loop: baseline sim → Claude analysis → sweep proposal → run sweep → feed results back → refine → converge.
Repository Layout
~/broomva/experiments/
├── openrocket/ # OpenRocket source (github.com/openrocket/openrocket)
│ ├── core/ # Headless simulation engine (Java 17, Gradle)
│ └── swing/ # GUI (optional)
├── rocket-tools/ # rocket-sim CLI (Gradle project, depends on core shadow JAR)
│ ├── rocket-sim # Shell wrapper
│ └── src/main/java/rocket/cli/RocketCLI.java
└── rocket-ai/ # AI optimizer (Python + Anthropic SDK)
└── optimizer.py
Build from Scratch
export JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
export PATH="$JAVA_HOME/bin:$PATH"
# 1. Build OpenRocket core + shadow JAR
cd ~/broomva/experiments/openrocket
./gradlew build -x test && ./gradlew shadowJar
# 2. Build rocket-sim CLI
cd ~/broomva/experiments/rocket-tools
./gradlew jar
# 3. Install AI optimizer deps
cd ~/broomva/experiments/rocket-ai
pip install -r requirements.txt
Headless Java API
For programmatic use without the CLI, use OpenRocketCore.initialize():
import info.openrocket.core.startup.OpenRocketCore;
// One-line bootstrap (headless, no GUI)
OpenRocketCore.initialize();
// Load and simulate
var loader = new GeneralRocketLoader(new File("rocket.ork"));
var doc = loader.load();
var sim = doc.getSimulation(0);
sim.simulate();
FlightData data = sim.getSimulatedData();
data.getMaxAltitude(); // meters
data.getMaxVelocity(); // m/s
data.getFlightTime(); // seconds
System properties for faster startup:
System.setProperty("openrocket.bypass.presets", "true"); // skip component DB
System.setProperty("openrocket.bypass.motors", "true"); // skip motor DB
References
- API Reference — Components, SimulationOptions, FlightData, optimization framework, scripting
- Compounding Strategies — CLI, web API, AI optimization, design language, manufacturing pipeline, SaaS
Example .ork Files
At openrocket/core/src/main/resources/datafiles/examples/:
A simple model rocket.ork— single stage, 5 motor configsTwo stage high power rocket.ork— multi-stage, multi-branch simClustered motors.ork— parallel motor clustersSimulation extensions.ork— GraalVM JS scripting demoDual parachute deployment.ork— recovery system demoParallel booster staging.ork— side booster staging