{
    "configVersion": "version string for the config format, e.g. '1.0'",
    "initialJulianDate": "initial TDB Julian Date in days",
    "offsetJulianDate": "offset TDB Julian Date in days",
    "utcDateTime": "UTC date-time string corresponding to initialJulianDate, ISO 8601 format",
    "timeScale": "speed factor for the simulation time",
    "simulationTimeStep": "fixed simulation timestep in seconds",
    "solarSystemScale": "scale factor applied to solar system body positions for rendering",
    "internalPropagatorNumSteps": "number of internal integration steps per simulation timestep",
    "propagatorType": "global PropagatorType enum (0 = default internal)",
    "frameMergeDistance": "distance threshold in km at which reference frames are merged for rendering",
    "orbitResolution": "number of simulation steps between orbit trail point samples",
    "celestialBodyRotationOffset": "Euler angle offset applied to all celestial body rotations for rendering, as '(x, y, z)' string in degrees",
    "celestialBodyRotationOffsetInWorldCoords": "same offset expressed in world coordinates",
    "celestialBodies": [{
            "id": "PlanetID enum index",
            "bodyType": "BodyType enum",
            "rotationICRFtoTIRF": "quaternion specifying the rotation from ICRF to body-fixed rotating coordinates",
            "rotationTIRFtoICRF": "quaternion specifying the rotation from body-fixed rotating coordinates to ICRF",
            "radiusMean": "mean radius of the body in meters",
            "radiusEq": "equatorial radius of the body in meters",
            "gm": "gravitational parameter in m^3/s^2",
            "flattening": "flattening of the planet ellipsoid",
            "rotationAxis": "rotation axis unit vector in body-fixed frame",
            "referenceAxis00": "primary reference axis unit vector",
            "orbitNumPoints": "number of points used to render the body's orbit trail",
            "name": "name of the celestial body",
            "mass": "mass of the celestial body in kg (used for rendering scale)",
            "solarBarycentricPosition": "solar barycentric position vector in ICRF frame in meters",
            "solarBarycentricVelocity": "solar barycentric velocity vector in ICRF frame in meters/second",
            "rootTransformF": {
                "position": "Unity world position of this body's transform '(x, y, z)'",
                "rotation": "Unity world rotation quaternion '(x, y, z, w)'",
                "localScale": "Unity local scale '(x, y, z)'"
            }
        }
    ],
    "propagatedBodies": [{
            "id": "automatically assigned id",
            "bodyType": "BodyType enum",
            "orbitalElements": { "comment": "osculating orbital elements referred to the central body",
                "specificAngularMomentum": "specific angular momentum vector in m^2/s",
                "specificEnergy": "specific mechanical energy in m^2/s^2",
                "inclination": "inclination in radians",
                "semiLatusRectum": "semi latus rectum in meters",
                "eccentricity": "eccentricity",
                "semiMinorAxis": "semi-minor axis in meters",
                "semiMajorAxis": "semi-major axis in meters",
                "apoapsis": "apoapsis distance in meters",
                "periapsis": "periapsis distance in meters",
                "orbitalPeriod": "orbital period in seconds",
                "ascendingNodeLongitude": "longitude of ascending node in radians",
                "periapsisArgument": "argument of periapsis in radians",
                "trueAnomaly": "true anomaly in radians",
                "orbitNormal": "normal unit vector of the orbital plane",
                "ascendingNodeDirection": "ascending node unit vector",
                "periapsisDirection": "periapsis unit vector",
                "latusRectumDirection": "latus rectum unit vector"
            },
            "keplerElements": { "comment": "classical Keplerian elements in standard units",
                "semiMajorAxis": "semi-major axis in meters",
                "eccentricity": "eccentricity",
                "inclination": "inclination in radians",
                "ascendingNodeLongitude": "longitude of ascending node (RAAN) in radians",
                "argumentOfPeriapsis": "argument of periapsis in radians",
                "trueAnomaly": "true anomaly in radians"
            },
            "startJulianDate": "Julian date at which propagation of this body starts (0 = use scene start)",
            "stopJulianDate": "Julian date at which propagation of this body stops (0 = no stop)",
            "localPosition": "position in local inertial coordinates of the central body (GCRF for Earth) in meters",
            "localVelocity": "velocity in local inertial coordinates of the central body (GCRF for Earth) in m/s",
            "localAcceleration": "current acceleration vector in local inertial coordinates in m/s^2",
            "lonLatAlt": "current longitude (rad), latitude (rad), altitude (m) above the central body surface",
            "localTimeAscendingNode": "local solar time at the ascending node in hours (0–24)",
            "prevLocalVelocity": "local inertial velocity at the previous simulation step in m/s",
            "stateCovariance": "Cartesian state (position, velocity) covariance matrix; currently constant",
            "orbitColor": "orbit trail color as '(R, G, B)' with 0–255 components",
            "orbitNumPoints": "number of points used to render the orbit trail",
            "mergeDistance": "distance threshold in km below which the body switches to close-proximity rendering",
            "prevRbVelocity": "rigid-body velocity at the previous step (used for rigid-body integration)",
            "inertiaTensor": "diagonal inertia tensor '(Ixx, Iyy, Izz)' in kg·m^2",
            "torque": "current torque vector in body frame in N·m",
            "thrust": "current thrust vector in body frame in N",
            "inertialTorque": "current torque vector in inertial frame in N·m",
            "inertialThrust": "current thrust vector in inertial frame in N",
            "cameraQuaternion": "attitude quaternion used for camera-relative rendering",
            "disableModel": "bool — hide the 3D model while keeping the satellite active",
            "attitudeState": { "comment": "variables describing the attitude state",
                "attitude": "attitude quaternion with respect to the inertial axes (ICRF) '(x, y, z, w)'",
                "angularVelocity": "current angular velocity vector in body frame in rad/s",
                "angularAcceleration": "current angular acceleration vector in body frame in rad/s^2",
                "angularAccelerationMagnitude": "magnitude of current angular acceleration in rad/s^2",
                "angularSpeed": "current angular speed (magnitude of angular velocity) in rad/s",
                "maxAngularSpeed": "maximum angular speed constraint for automatic pointing in rad/s",
                "maxAngularAcceleration": "maximum angular acceleration constraint for automatic pointing in rad/s^2",
                "attitudeCovariance": "4×4 attitude covariance matrix; currently just a constant matrix"
            },
            "parent": "index of parent propagated body for docked/attached configuration; -1 if independent",
            "correctionAvailable": "bool — whether a correction maneuver has been computed and is ready to apply",
            "orbitType": "OrbitType enum (0 = standard orbit)",
            "orbitRenderMode": "OrbitRenderMode enum controlling how the orbit trail is drawn",
            "orbitAvailable": "bool — whether an orbit trail can be rendered for this body",
            "spacecraftData": { "comment": "descriptions of spacecraft subsystem components",
                "structure": [ "list of structural elements",
                    {
                        "name": "name of the structural part",
                        "id": "automatically assigned id",
                        "parentID": "id of the parent part (-1 if root)",
                        "localPosition": "position vector w.r.t. the parent part in meters",
                        "localRotation": "rotation axis-angle vector w.r.t. the parent part; direction = axis, magnitude = angle in radians",
                        "size": "bounding size '(x, y, z)' in meters",
                        "mass": "mass of the structural part in kg",
                        "modelPrefabName": "name of a built-in prefab model to use",
                        "customModelGlb": "path to a custom .glb model file relative to the MDS installation"
                    }
                ],
                "solarPanels": [ "list of solar panel subsystems",
                    {
                        "structureId": "id of the structural part this panel is attached to",
                        "powerEfficiency": "solar cell efficiency as a decimal (0–1)",
                        "area": "panel area in m^2",
                        "maxPower": "maximum power output in Watts",
                        "lightAmmountReceived": "irradiance received by the panel in W/m^2",
                        "powerGenerated": "current power output in Watts"
                    }
                ],
                "batteries": [ "list of battery subsystems",
                    {
                        "structureId": "id of the structural part this battery is attached to",
                        "chargerEfficiency": "charger efficiency as a decimal (0–1)",
                        "capacityWattHours": "battery capacity in Watt-hours",
                        "chargeWattHours": "current charge level in Watt-hours",
                        "chargeFloat": "current charge as a decimal fraction (0–1)"
                    }
                ],
                "sensors": [ "list of sensor/cone subsystems",
                    {
                        "name": "label for this sensor",
                        "FoV": "[horizontal field of view in degrees, vertical field of view in degrees]",
                        "pixelOrigin": "PixelOrigin enum specifying which corner or centre is the pixel coordinate origin",
                        "PixelDimensions": "[horizontal pixel count, vertical pixel count]",
                        "range": "maximum detection range in meters",
                        "orientation": "attitude quaternion of the sensor frame relative to the spacecraft body frame",
                        "offset": "position offset of the sensor origin relative to the spacecraft centre of mass in meters '(x, y, z)'",
                        "sensorType": "SensorType enum",
                        "sensorShape": "SensorShape enum (0 = conical, 1 = pyramidal)",
                        "Ranges": "[range to each currently visible target in meters]",
                        "RangeUncertainty": "range measurement variance in m^2",
                        "LinesOfSight": "[line-of-sight unit vectors to each visible target]",
                        "AngleMeasurements": "[angle coordinates to each visible target in radians]",
                        "AngleUncertainties": "[two angle uncertainty variance values per target]",
                        "PixelCoordinates": "[pixel coordinate pair for each visible target]",
                        "lineColorR": "red component of the sensor projection line colour (0–255)",
                        "lineColorG": "green component of the sensor projection line colour (0–255)",
                        "lineColorB": "blue component of the sensor projection line colour (0–255)",
                        "lineColorA": "alpha (opacity) of the sensor projection line (0–255)",
                        "coneColorR": "red component of the sensor cone/pyramid fill colour (0–255)",
                        "coneColorG": "green component of the sensor cone/pyramid fill colour (0–255)",
                        "coneColorB": "blue component of the sensor cone/pyramid fill colour (0–255)",
                        "coneColorA": "alpha (opacity) of the sensor cone/pyramid fill (0–255)"
                    }
                ],
                "radios": [ "list of radio link subsystems; populated by add_radio / link-budget API calls" ],
                "starTrackerStates": [ "list of star tracker sensor states",
                    {
                        "cameraToSpacecraftRotationOffset": "quaternion rotating from camera frame to spacecraft body frame",
                        "maxSlewRate": "maximum slew rate of the star tracker camera in deg/s",
                        "sunExclusionAngle": "half-angle exclusion cone around the Sun in degrees",
                        "centralBodyExclusionAngle": "half-angle exclusion cone around the central body limb in degrees",
                        "fullMoonExclusionAngle": "half-angle exclusion cone around the full Moon in degrees",
                        "acquisitionModeDuration": "time spent in acquisition mode before transitioning to tracking in seconds",
                        "cameraFOV": "camera half-angle field of view in degrees",
                        "timeSpentInMode": "time spent in the current operating mode in seconds",
                        "timeSpentInPreviousMode": "time spent in the previous operating mode in seconds",
                        "sunViewAngle": "current angle from the Sun to the camera boresight in radians (NaN if outside FoV)",
                        "moonViewAngle": "current angle from the Moon to the camera boresight in radians",
                        "centralBodyViewAngle": "current angle from the central body limb to the boresight in radians",
                        "isSlewRateExceeded": "bool — true if current slew rate exceeds maxSlewRate",
                        "isBlindedBySun": "bool — true if Sun is within the sun exclusion cone",
                        "isBlindedByEarth": "bool — true if Earth limb is within the central-body exclusion cone",
                        "isBlindedByMoon": "bool — true if Moon is within the moon exclusion cone",
                        "sunOccludedByPlanet": "bool — true if the Sun is behind the central body",
                        "sunDamage": "accumulated Sun exposure damage (0–1; 1 = fully degraded)",
                        "sunDamagePerSecond": "damage accumulation rate per second of direct Sun exposure",
                        "sunDamageCooldown": "damage recovery rate per second when Sun is not in view",
                        "mode": "StarTrackerMode enum (0 = acquisition, 6 = blinded/degraded, etc.)"
                    }
                ],
                "sunSensors": [ "list of coarse Sun sensor states",
                    {
                        "cameraToSpacecraftRotationOffset": "quaternion rotating from sensor frame to spacecraft body frame",
                        "sunExclusionAngle": "half-angle field of view of the sensor in degrees",
                        "sunInView": "bool — true if the Sun is currently within the sensor FoV",
                        "angleFromSunDeg": "measured angle from the Sun to the sensor boresight in degrees (NaN if not in view)"
                    }
                ],
                "horizonSensors": [ "list of horizon sensor states",
                    {
                        "cameraToSpacecraftRotationOffset": "quaternion rotating from sensor frame to spacecraft body frame",
                        "degreesAboveHorizon": "current elevation of the central body horizon above the sensor boresight in degrees"
                    }
                ],
                "PowerConsumption": "mean power consumption of the spacecraft (excluding subsystems) in Watts"
            },
            "customModelPath": "path to a custom .glb model file; null if using the default model",
            "propagatorType": "PropagatorType enum for this body's translational propagator",
            "reentryAltitude": "altitude in km below which the spacecraft is considered to have reentered",
            "isReentered": "bool — true if the spacecraft has reentered and been removed",
            "propagator": "TUDAT propagator configuration object; null when using the internal propagator",
            "referenceArea": "aerodynamic reference area for drag calculation in m^2",
            "coefficientDrag": "drag coefficient Cd",
            "coefficientSRP": "solar radiation pressure coefficient Cr",
            "accelerationModel": "per-body acceleration model overrides (TUDAT); empty object uses defaults",
            "environmentModel": "per-body environment model overrides (TUDAT); empty object uses defaults",
            "integratorSettings": {
                "useVariableStepIntegrator": "bool — use an adaptive step-size integrator",
                "integrator": "IntegratorType enum",
                "orderToUse": "polynomial order for the integrator (0 = use integrator default)",
                "absTol": "absolute tolerance for adaptive step-size control",
                "relTol": "relative tolerance for adaptive step-size control",
                "minTimeStep": "minimum allowed timestep in seconds",
                "maxTimeStep": "maximum allowed timestep in seconds",
                "usePerElementStepSizeControl": "bool — apply step-size control per state element"
            },
            "translationalPropagatorType": "TranslationalPropagatorType enum for this body",
            "pointingMode": "PointingMode enum",
            "targetSpacecraftIndex": "index into propagatedBodies of the spacecraft used as pointing target",
            "targetGroundAssetIndex": "index into groundAssets of the ground asset used as pointing target",
            "targetCelestialBodyIndex": "index into celestialBodies of the body used as pointing target",
            "pointingTargetType": "PointingTargetType enum (0 = spacecraft, 1 = ground asset, 2 = celestial body)",
            "CustomPointingQuaternion": "quaternion specifying a fixed target attitude w.r.t. inertial axes (ICRF); used when pointingMode = CustomQuaternion",
            "thrustEventsScheduled": "number of scheduled impulsive thrust events pending",
            "maneuvers": "list of scheduled impulsive maneuver events",
            "continuousManeuverArcs": "list of continuous-thrust maneuver arc definitions",
            "lastManeuverJd": "Julian date of the most recently executed maneuver",
            "rigidBodyAttached": "bool — attach rigid-body component for attitude dynamics and collision response",
            "propagatedByOrekit": "bool — true if this body is propagated via the Orekit back-end",
            "isInFleet": "bool — true if this body belongs to an active fleet scenario",
            "originalName": "name before any runtime rename; empty string if never renamed",
            "missionTimeEvents": "list of time-triggered mission event definitions",
            "missionGeoEvents": "list of geographic-region-triggered mission event definitions",
            "missionTrueAnomalyEvents": "list of true-anomaly-triggered mission event definitions",
            "missionAltitudeEvents": "list of altitude-triggered mission event definitions",
            "SolarIrradianceReceived": "total solar irradiance incident on the spacecraft in W/m^2",
            "SolarLightFraction": "fraction of the orbit currently in sunlight (0 = eclipse, 1 = full sun)",
            "isAttachedToOtherBody": "bool — true if this body is physically docked to another propagated body",
            "relativeMeasurements": [ "list of relative state measurements w.r.t. other bodies",
                {
                    "SatA": "name of the primary spacecraft",
                    "SatB": "name of the reference spacecraft",
                    "RelPosX": "relative position X in inertial frame in meters",
                    "RelPosY": "relative position Y in inertial frame in meters",
                    "RelPosZ": "relative position Z in inertial frame in meters",
                    "RelVelX": "relative velocity X in inertial frame in m/s",
                    "RelVelY": "relative velocity Y in inertial frame in m/s",
                    "RelVelZ": "relative velocity Z in inertial frame in m/s"
                }
            ],
            "rotationParentToChild": "quaternion from parent body frame to child body frame for docked configuration",
            "localPositionParentToChild": "position offset from parent to child origin in parent body frame in meters",
            "combinedInertiaTensor": "combined diagonal inertia tensor of docked assembly '(Ixx, Iyy, Izz)' in kg·m^2",
            "combinedMass": "combined mass of docked assembly in kg",
            "labelAlwaysVisible": "bool — show satellite name label regardless of camera distance",
            "fuel": "current fuel mass in kg",
            "thruster": "thruster configuration object (set by add_thruster); null if no thruster attached",
            "groupFilters": "key-value map of group property tags assigned via satellite grouping",
            "groupName": "name of the satellite group this body belongs to; empty string if ungrouped",
            "pointingInProgress": "bool — true while an automatic pointing maneuver is being executed",
            "collisionsEnabled": "bool — enable collision response for this body's rigid-body component",
            "previousPointingMode": "PointingMode enum value from the previous simulation step",
            "previousStepLocalPosition": "local inertial position at the previous simulation step in meters",
            "previousStepRotation": "attitude quaternion at the previous simulation step",
            "orbitalMeasurementPlaneNormal": "normal to the reference plane used for orbital arc measurement",
            "orbitalMeasurementStartTimestamp": "Julian date when the current orbital arc measurement started",
            "orbitalStats": [ "per-orbit energy and timing statistics",
                {
                    "orbitNumber": "orbit counter since simulation start",
                    "orbitTimeSeconds": "elapsed time within the current orbit in seconds",
                    "orbitTimeStartJD": "Julian date at the start of this orbit",
                    "orbitTimeEndJD": "Julian date at the end of this orbit (0 if incomplete)",
                    "fractionCompleted": "fraction of the current orbit completed (0–1)",
                    "totalEnergyGenerated": "total energy generated by solar panels this orbit in Wh",
                    "totalEnergyConsumed": "total energy consumed this orbit in Wh",
                    "chargeMax": "maximum battery charge reached this orbit in Wh",
                    "chargeMin": "minimum battery charge reached this orbit in Wh"
                }
            ],
            "isDestroyed": "bool — true if spacecraft has been destroyed (e.g. collision or reentry)",
            "manualControlEnabled": "bool — true when the Satellite Control window has manual control active",
            "rotationUsesRCS": "bool — use RCS for attitude control in manual mode",
            "rotationAccel": "manual control rotation acceleration '(x, y, z)' in deg/s^2",
            "translationAccel": "manual control translation acceleration '(x, y, z)' in m/s^2",
            "MainEngineAccel": "manual control main engine acceleration magnitude in m/s^2",
            "friendlyGSList": "list of ground asset names designated as friendly/tracking stations for this satellite",
            "bodyAxisSize": "display scale of the body-axis cross in the 3D scene",
            "occludedByCentralBody": "bool — true if this body is currently behind the central body (eclipse geometry)",
            "boundingBoxCenter": "centre of the model bounding box in local model coordinates",
            "boundingBoxCorners": "array of 8 corner vectors of the model axis-aligned bounding box",
            "boundingBoxSize": "maximum extent of the bounding box (diameter of enclosing sphere) in meters",
            "modelRotation": "additional rotation quaternion applied to the 3D model for alignment",
            "dragModel": {
                "dragCoefficient": "drag coefficient used by the simplified drag model"
            },
            "name": "name of this propagated body",
            "mass": "total mass of this propagated body in kg",
            "centralBody": "index into celestialBodies array identifying the central gravitational body",
            "solarBarycentricPosition": "solar barycentric position vector in ICRF frame in meters",
            "solarBarycentricVelocity": "solar barycentric velocity vector in ICRF frame in meters/second",
            "rootTransformF": {
                "position": "Unity world position '(x, y, z)'",
                "rotation": "Unity world rotation quaternion '(x, y, z, w)'",
                "localScale": "Unity local scale '(x, y, z)'"
            }
        }
    ],
    "groundAssets": [{
            "bodyType": "BodyType enum",
            "enabled": "bool — enable or disable this ground asset",
            "assetType": "AssetType enum (1 = ground station, others = custom entity types)",
            "name": "name of the ground asset",
            "id": "automatically assigned id (ground assets use ids starting at 1001)",
            "centralBody": "index into celestialBodies array identifying the planet this asset is on",
            "rxFrequency": "receive frequency in Hz",
            "systemNoiseTemperature": "system noise temperature in Kelvin",
            "rxAntennaGain": "receive antenna gain in dBi",
            "txFrequency": "transmit frequency in Hz",
            "EIRP": "effective isotropic radiated power in dBW",
            "satsAvailable": "list of satellite names currently in contact with this asset",
            "radius": "visual display radius of the ground asset marker in km",
            "r": "red colour component of the asset marker (0–255)",
            "g": "green colour component of the asset marker (0–255)",
            "b": "blue colour component of the asset marker (0–255)",
            "customModelPath": "path to a custom .glb model; null for default icon",
            "currentWaypointIndex": "index of the current waypoint target (for mobile assets)",
            "canFly": "bool — allow this asset to move in 3D (aircraft/drone type)",
            "loopWaypoints": "bool — loop back to the first waypoint after reaching the last",
            "maxSpeed": "maximum ground speed in m/s",
            "maxAscentRate": "maximum vertical ascent rate in m/s",
            "waypoints": "list of waypoint position definitions for mobile assets",
            "speed": "current speed magnitude in m/s",
            "tSpeed": "current tangential speed component in m/s",
            "nSpeed": "current normal speed component in m/s",
            "sensors": [ "sensor/cone projections attached to this ground asset — same schema as propagatedBodies.spacecraftData.sensors" ],
            "localPlanetSurfaceNormal": "surface normal unit vector at this asset's location in the rotating (TIRF) frame",
            "globalPlanetSurfaceNormal": "surface normal unit vector at this asset's location in the inertial (ICRF) frame",
            "positionLonLatAlt": "position as '(longitude_rad, latitude_rad, altitude_m)'",
            "localPosition": "position in local inertial frame (GCRF for Earth) in meters",
            "localPositionTIRF": "position in the body-fixed rotating frame (ITRF for Earth) in meters",
            "Latitude": "geodetic latitude in degrees",
            "Longitude": "geodetic longitude in degrees",
            "Altitude": "altitude above the reference ellipsoid in meters",
            "solarBarycentricPosition": "solar barycentric position vector in ICRF frame in meters",
            "solarBarycentricVelocity": "solar barycentric velocity vector in ICRF frame in m/s (zero for stationary assets)",
            "mass": "mass of the ground asset in kg (used for collision calculations)",
            "rootTransformF": {
                "position": "Unity world position '(x, y, z)'",
                "rotation": "Unity world rotation quaternion '(x, y, z, w)'",
                "localScale": "Unity local scale '(x, y, z)'"
            }
        }
    ],
    "checkForReentry": "bool — enable altitude-based reentry detection and removal for all propagated bodies",
    "accelerationModels": "global acceleration model settings shared across all bodies (TUDAT); empty object uses defaults",
    "environmentModels": "global environment model settings (TUDAT); empty object uses defaults",
    "integrationSettings": "global integrator settings applied to bodies that do not override per-body; empty object uses defaults",
    "translationalPropagatorTypes": "global translational propagator type map; empty object uses defaults",
    "measurements": {
        "LVHLMeasurements": "list of LVLH-frame relative measurements between body pairs",
        "SingleSpacecraftMeasurements": "list of single-spacecraft state measurements"
    },
    "satelliteGroups": {
        "groups": "list of satellite group definitions; each group has a name, member list, and optional property tags"
    },
    "fleetConstraintPredictorSettings": {
        "enabled": "bool — enable the Constraint Monitor prediction engine",
        "monitorCheckInterval": "how often the constraint monitor re-evaluates constraints in seconds",
        "lookAheadWindowJD": "future prediction horizon in Julian days (e.g. 0.020833 ≈ 30 minutes)",
        "timestep": "propagation timestep used for future violation prediction in seconds",
        "propogatorType": "PropagatorType enum used for constraint prediction propagation"
    }
}
