Skip to content

How to Send Commands ​

This guide shows you how to send commands to control the simulator from your application. Commands let you toggle autopilot, control lights, deploy gear, and more.

Prerequisites ​

  • A working GameGlue connection (see Build Your First Dashboard if you're starting out)
  • The write scope enabled for your game (e.g., msfs:write or xplane:write)
  • Commands are rejected unless the write scope is present

Enable Write Access ​

When initializing the SDK, include the write scope:

javascript
const ggClient = new GameGlue({
  clientId: 'your-client-id',
  redirect_uri: 'http://localhost:3000',
  scopes: ['msfs:read', 'msfs:write']  // Add the write scope
});

If you've already authenticated with only read scope, you'll need to log out and log in again to grant the additional permission.

Send a Command ​

Use sendCommand on your listener:

javascript
const result = await listener.sendCommand('autopilot_on', true);

if (result.status === 'success') {
  console.log('Command sent');
} else {
  console.error('Failed:', result.reason);
}

The first argument is the command name, and the second is the value (usually true for toggle-style commands, or a number for set commands).

Common Commands ​

These commands work across all supported simulators. Write your code once and it works with MSFS, X-Plane, and future simulators.

Autopilot ​

javascript
await listener.sendCommand('autopilot_on', true);
await listener.sendCommand('autopilot_off', true);
await listener.sendCommand('autopilot_toggle', true);
await listener.sendCommand('autopilot_heading_hold_on', true);
await listener.sendCommand('autopilot_altitude_hold_on', true);
await listener.sendCommand('autopilot_vs_hold_on', true);
await listener.sendCommand('autopilot_nav_on', true);
await listener.sendCommand('autopilot_approach_on', true);

Autopilot Targets ​

javascript
await listener.sendCommand('set_autopilot_altitude', 35000);  // feet
await listener.sendCommand('set_autopilot_heading', 270);     // degrees
await listener.sendCommand('set_autopilot_vs', 1800);         // fpm
await listener.sendCommand('set_autopilot_speed', 250);       // knots

Gear and Flaps ​

javascript
await listener.sendCommand('gear_up', true);
await listener.sendCommand('gear_down', true);
await listener.sendCommand('gear_toggle', true);
await listener.sendCommand('flaps_up', true);
await listener.sendCommand('flaps_down', true);
await listener.sendCommand('set_flaps', 0.5);  // 0-1 ratio

Lights ​

javascript
await listener.sendCommand('landing_lights_on', true);
await listener.sendCommand('landing_lights_off', true);
await listener.sendCommand('taxi_lights_toggle', true);
await listener.sendCommand('nav_lights_toggle', true);
await listener.sendCommand('beacon_lights_toggle', true);
await listener.sendCommand('strobe_lights_toggle', true);

Other Controls ​

javascript
await listener.sendCommand('spoilers_arm', true);
await listener.sendCommand('spoilers_deploy', true);
await listener.sendCommand('spoilers_retract', true);
await listener.sendCommand('parking_brake_toggle', true);

Handle Command Results ​

Always check the result to handle failures gracefully:

javascript
async function toggleAutopilot() {
  const result = await listener.sendCommand('autopilot_on', true);

  if (result.status === 'success') {
    showNotification('Autopilot enabled');
  } else {
    showError(`Could not enable autopilot: ${result.reason}`);
  }
}

Example: Autopilot Control Panel ​

Here's a complete example of a button that toggles autopilot:

html
<button id="ap-toggle">Toggle Autopilot</button>

<script>
document.getElementById('ap-toggle').addEventListener('click', async () => {
  // Check current state from telemetry
  const isOn = currentData.autopilot_master;

  // Send the opposite command
  const command = isOn ? 'autopilot_off' : 'autopilot_on';
  const result = await listener.sendCommand(command, true);

  if (result.status !== 'success') {
    alert('Command failed: ' + result.reason);
  }
});
</script>

Full Command Reference ​

See the complete list of available commands for each simulator:

Troubleshooting ​

"Unauthorized" or permission error?

  • Make sure you included the appropriate write scope (e.g., msfs:write or xplane:write) when initializing
  • Log out and log in again to refresh permissions

Command sends but nothing happens in-game?

  • Some commands only work in certain states (e.g., gear won't retract on the ground)
  • Check that the simulator is running the simulation (not paused in menus)

"Command not found" error?

  • Command names are lowercase with underscores (e.g., autopilot_on, not AUTOPILOT_ON)
  • Check the command reference for your simulator