Skip to content

Telemetry Schemas & Normalization

GameGlue uses a schema system to normalize telemetry data across different simulators. This means you can write code that works with any supported sim without worrying about their different field names.

The Problem

Different simulators use different names for the same data:

DataMSFSX-Plane
Headingheading_gyrohdg_mag
Airspeedindicated_airspeedias
Altitudeindicated_altitudealt_msl

Without normalization, you'd need to write different code for each simulator:

javascript
// Without normalization - simulator-specific code
if (game === 'msfs') {
  altitude = data.indicated_altitude;
} else if (game === 'xplane') {
  altitude = data.alt_msl;
}

The Solution: Standard Fields

GameGlue normalizes all telemetry to standard field names that work across all simulators:

javascript
// With normalization - works with any sim
const altitude = data.altitude;
const airspeed = data.indicated_airspeed;
const heading = data.heading;

Available Fields

Position

  • latitude - Aircraft latitude (degrees)
  • longitude - Aircraft longitude (degrees)
  • altitude - Altitude above sea level (ft)
  • altitude_agl - Altitude above ground (ft)
  • on_ground - Whether aircraft is on ground

Velocity

  • indicated_airspeed - Indicated airspeed (kts)
  • true_airspeed - True airspeed (kts)
  • ground_speed - Ground speed (kts)
  • vertical_speed - Vertical speed (ft/min)
  • mach - Mach number

Attitude

  • heading - Magnetic heading (degrees)
  • pitch - Pitch angle (degrees)
  • roll - Bank angle (degrees)

Autopilot

  • autopilot_master - AP master engaged
  • autopilot_altitude_hold - Altitude hold active
  • autopilot_heading_hold - Heading hold active
  • autopilot_altitude_target - Target altitude (ft)
  • autopilot_heading_target - Target heading (degrees)

Controls

  • gear_down - Landing gear extended
  • flaps - Flaps position (%)
  • spoilers - Spoilers position (%)
  • parking_brake - Parking brake engaged

Lights

  • light_landing - Landing lights on
  • light_taxi - Taxi lights on
  • light_beacon - Beacon lights on
  • light_nav - Navigation lights on
  • light_strobe - Strobe lights on

Commands

Commands also use standard names, so you can control any simulator with the same code:

javascript
// Works with MSFS, X-Plane, or any supported sim
await listener.sendCommand('gear_up');
await listener.sendCommand('autopilot_on');
await listener.sendCommand('set_autopilot_altitude', 35000);

Available Commands

CommandDescription
autopilot_onEngage autopilot
autopilot_offDisengage autopilot
gear_upRetract landing gear
gear_downExtend landing gear
flaps_upRetract flaps one notch
flaps_downExtend flaps one notch
landing_lights_toggleToggle landing lights
set_autopilot_altitudeSet AP altitude (with value)
set_autopilot_headingSet AP heading (with value)

How It Works

  1. Game sends raw telemetry with game-specific field names
  2. GameGlue Desktop receives the raw data from the simulator
  3. Schema mapping converts raw fields to standard names
  4. Your app receives normalized data via the SDK
MSFS: { heading_gyro: 180 }  →  Normalization  →  { heading: 180 }
X-Plane: { hdg_mag: 180 }    →  Normalization  →  { heading: 180 }

Benefits

  • Write once, run anywhere - Your code works with any supported simulator
  • Consistent API - Always use the same field names regardless of game
  • Type safety - Predictable data structure for TypeScript users
  • Future-proof - New simulator support doesn't require code changes

Adding New Simulator Support

When GameGlue adds support for a new simulator, the schema system handles the mapping. Your existing code will work automatically with the new sim.