A KSP plugin that exposes live telemetry data over HTTP and WebSocket, letting you build external dashboards, flight instruments, and ground control applications for your vessels.
HTTP REST + WebSocket API on port 8085 — poll or stream any telemetry value in real time
Camera streaming — capture in-game camera views as JPEG snapshots over HTTP
Built-in web UI — flight controls, navigation, orbital data, map, console, SmartASS, and more, accessible from any browser on your network
Flight control — throttle, staging, SAS modes, RCS, action groups, and fly-by-wire attitude control
Delta-V readouts — per-stage and total delta-V, TWR, ISP, burn time, and mass breakdown
Maneuver node management — create, update, and delete maneuver nodes via the API
Target tracking — set targets, read distance/relative velocity, docking alignment angles
MechJeb integration — command SmartASS autopilot modes (requires MechJeb)
Alarm clock integration — read KSP alarm clock entries
Antenna parts — three antenna models (Blade, Fustek, Yagi) with configurable up/downlink rates; also runs "partless" if needed
Resource & sensor monitoring — query any resource or sensor by name
Plugin API — other mods can register custom telemetry handlers
Download the latest GameData.zip from the Releases page.
Extract and merge the GameData/ folder into your KSP installation directory.
Launch KSP. The Telemachus server starts automatically when a vessel with a Telemachus antenna is active, or when running in partless mode.
Open a browser and navigate to http://localhost:8085/ to access the built-in UI.
The default port is 8085 and binds to 0.0.0.0 (all interfaces). Both can be changed in the plugin configuration file.
Endpoint
Protocol
Purpose
/telemachus/datalink
HTTP GET/POST
Poll telemetry values
/datalink
WebSocket
Stream telemetry in real time
/telemachus/cameras
HTTP GET
List available cameras
/telemachus/cameras/<name>
HTTP GET
Capture a camera frame (JPEG)
/telemachus/*
HTTP GET
Built-in web UI (static files)
Query parameters use key=value format, where the key is an arbitrary label and the value is the API string:
GET /telemachus/datalink?alt=v.altitude&lat=v.lat&lon=v.long
{ "alt" : 12345.6 , "lat" : -0.0974 , "lon" : 285.4 }
Multiple values in a single request:
GET /telemachus/datalink?alt=v.altitude&pe=o.PeA&ap=o.ApA&throttle=f.throttle
You can also POST a JSON body instead of query parameters:
POST /telemachus/datalink
Content-Type: application/json
{ "alt" : " v.altitude" , "pe" : " o.PeA" , "ap" : " o.ApA" }
Actions (throttle, staging, SAS, etc.) are invoked the same way — the server executes them on the next game tick:
GET /telemachus/datalink?x=f.setThrottle[0.5]&y=f.stage
Connect to ws://<host>:8085/datalink and send JSON commands:
{ "+" : [" v.altitude" , " o.PeA" , " f.throttle" ], "rate" : 500 }
The server pushes a JSON object with current values at the requested interval (milliseconds).
Command
Description
"+"
Subscribe to API keys (array)
"-"
Unsubscribe from API keys (array)
"run"
One-shot evaluation — included in the next update only (array)
"rate"
Set update interval in milliseconds (integer, default 500)
"binary"
Subscribe to binary stream — values sent as big-endian float32 (array)
Binary packet format: byte 0 is 0x01 (marker), followed by 4-byte IEEE 754 big-endian floats in subscription order. Sent alongside the JSON text frame each tick.
Unknown API keys are returned in an "unknown" array. Exceptions are returned in an "errors" object:
{
"alt" : 12345.6 ,
"unknown" : [" v.bogus" ],
"errors" : { "v.broken" : " System.NullReferenceException: ..." }
}
Some API keys accept parameters in bracket notation:
r.resource[ElectricCharge] — resource by name
b.name[3] — celestial body by index
o.orbitalSpeedAt[1200.0] — speed at orbit time
mj.surface[90,45] — MechJeb heading + pitch
v.setPitchYawRollXYZ[0,0,0,1,0,0] — FBW attitude + translation
Position & altitude
Key
Description
Unit
v.altitude
Altitude above sea level
m
v.heightFromTerrain
Height above terrain
m
v.heightFromSurface
Height above surface
m
v.terrainHeight
Terrain altitude
m
v.pqsAltitude
PQS terrain altitude
m
v.lat
Latitude
deg
v.long
Longitude (normalized -180 to 180)
deg
Velocity
Key
Description
Unit
v.surfaceVelocity
Surface velocity magnitude
m/s
v.surfaceVelocityx
Surface velocity X
m/s
v.surfaceVelocityy
Surface velocity Y
m/s
v.surfaceVelocityz
Surface velocity Z
m/s
v.orbitalVelocity
Orbital velocity magnitude
m/s
v.orbitalVelocityx
Orbital velocity X
m/s
v.orbitalVelocityy
Orbital velocity Y
m/s
v.orbitalVelocityz
Orbital velocity Z
m/s
v.surfaceSpeed
Horizontal surface speed
m/s
v.verticalSpeed
Vertical speed
m/s
v.speed
Total speed
m/s
v.srfSpeed
Surface speed (direct)
m/s
v.obtSpeed
Orbital speed (direct)
m/s
v.angularVelocity
Angular velocity magnitude
rad/s
v.angularVelocityx/y/z
Angular velocity components
rad/s
Acceleration & forces
Key
Description
Unit
v.geeForce
G-force (averaged)
G
v.geeForceImmediate
G-force (instantaneous)
G
v.acceleration
Total acceleration magnitude
m/s^2
v.accelerationx/y/z
Acceleration components
m/s^2
v.specificAcceleration
Thrust / mass
m/s^2
v.perturbation
Orbital perturbation magnitude
m/s^2
v.perturbationx/y/z
Perturbation components
m/s^2
Mass & inertia
Key
Description
Unit
v.mass
Total vessel mass
kg
v.angularMomentum
Angular momentum magnitude
—
v.angularMomentumx/y/z
Angular momentum components
—
v.momentOfInertia
Moment of inertia
Vector3d
v.CoM
Center of mass position
Vector3d
Atmosphere & environment
Key
Description
Unit
v.atmosphericDensity
Air density
kg/m^3
v.dynamicPressurekPa
Dynamic pressure
kPa
v.dynamicPressure
Dynamic pressure
Pa
v.staticPressurekPa
Static pressure
kPa
v.staticPressure
Static pressure (FlightGlobals)
kPa
v.atmosphericPressurePa
Atmospheric pressure
Pa
v.atmosphericPressure
Atmospheric pressure
atm
v.atmosphericTemperature
Air temperature
K
v.externalTemperature
External temperature
K
v.mach
Mach number
—
v.speedOfSound
Speed of sound
m/s
v.indicatedAirSpeed
Indicated airspeed
m/s
v.directSunlight
In direct sunlight
bool
v.distanceToSun
Distance to sun
m
v.solarFlux
Solar flux
—
Situation & state
Key
Description
Type
v.name
Vessel name
string
v.body
Celestial body name
string
v.situation
Situation enum
string
v.situationString
Human-readable situation
string
v.vesselType
Vessel type
string
v.landed
Is landed
bool
v.splashed
Is splashed
bool
v.landedOrSplashed
Is landed or splashed
bool
v.landedAt
Biome / location name
string
v.isEVA
Is EVA
bool
v.isActiveVessel
Is active vessel
bool
v.isControllable
Is controllable
bool
v.isCommandable
Is commandable
bool
v.loaded
Vessel is loaded
bool
v.packed
Vessel is on rails
bool
v.currentStage
Current stage number
int
v.missionTime
Mission elapsed time
s
v.missionTimeString
Formatted MET
string
v.launchTime
Launch time (UT)
s
v.crewCount
Number of crew
int
v.crewCapacity
Crew capacity
int
v.crew
List of crew names
string[]
v.angleToPrograde
Angle to orbital prograde
deg
Action group state (read)
Key
Description
v.sasValue
SAS state
v.rcsValue
RCS state
v.lightValue
Lights state
v.brakeValue
Brakes state
v.gearValue
Gear state
v.abortValue
Abort state
v.precisionControlValue
Precision mode state
v.ag1Value … v.ag10Value
Custom action group states
Keplerian elements & apsides
Key
Description
Unit
o.ApA
Apoapsis altitude
m
o.PeA
Periapsis altitude
m
o.ApR
Apoapsis radius
m
o.PeR
Periapsis radius
m
o.timeToAp
Time to apoapsis
s
o.timeToPe
Time to periapsis
s
o.sma
Semi-major axis
m
o.semiMinorAxis
Semi-minor axis
m
o.semiLatusRectum
Semi-latus rectum
m
o.eccentricity
Eccentricity
—
o.inclination
Inclination
deg
o.lan
Longitude of ascending node
deg
o.argumentOfPeriapsis
Argument of periapsis
deg
o.period
Orbital period
s
o.epoch
Epoch
—
o.referenceBody
Reference body name
string
Anomalies
Key
Description
Unit
o.trueAnomaly
True anomaly
deg
o.meanAnomaly
Mean anomaly
deg
o.eccentricAnomaly
Eccentric anomaly
deg
o.maae
Mean anomaly at epoch
—
o.timeOfPeriapsisPassage
Time of periapsis passage (UT)
s
o.orbitPercent
Orbit completion percentage
—
Velocity, position & energy
Key
Description
Unit
o.relativeVelocity
Relative velocity magnitude
m/s
o.orbitalSpeed
Orbital speed
m/s
o.vel
Orbital velocity vector
Vector3d
o.radius
Orbital radius
m
o.pos
Orbital position vector
Vector3d
o.orbitalEnergy
Specific orbital energy
—
o.orbitNormal
Orbit normal vector
Vector3d
o.eccVec
Eccentricity vector
Vector3d
o.anVec
Ascending node vector
Vector3d
o.h
Specific angular momentum
Vector3d
Parameterized queries
Key
Description
o.orbitalSpeedAt[time]
Speed at orbit time (m/s)
o.orbitalSpeedAtDistance[dist]
Speed at distance (m/s)
o.radiusAtTrueAnomaly[deg]
Radius at true anomaly (m)
o.trueAnomalyAtRadius[m]
True anomaly at radius (deg)
Orbit patches & transitions
Key
Description
o.orbitPatches
All orbit patches (complex object)
o.timeToTransition1
Time to patch transition 1 (s)
o.timeToTransition2
Time to patch transition 2 (s)
o.patchStartTransition
Patch start transition type
o.patchEndTransition
Patch end transition type
o.StartUT / o.EndUT
Patch start/end UT
o.UTsoi
UT of SOI transition
o.closestEncounterBody
Closest encounter body name
o.closestTgtApprUT
Closest target approach UT
o.trueAnomalyAtUTForOrbitPatch[patch,ut]
True anomaly for patch at UT
o.UTForTrueAnomalyForOrbitPatch[patch,deg]
UT for true anomaly in patch
o.relativePositionAtTrueAnomalyForOrbitPatch[patch,deg]
Position at anomaly
o.relativePositionAtUTForOrbitPatch[patch,ut]
Position at UT
Maneuver nodes
Key
Description
o.maneuverNodes
All maneuver nodes (complex object)
o.maneuverNodes.count
Number of maneuver nodes
o.maneuverNodes.deltaV[id]
Delta-V vector (Vector3d)
o.maneuverNodes.deltaVMagnitude[id]
Delta-V magnitude (m/s)
o.maneuverNodes.UT[id]
Maneuver UT
o.maneuverNodes.timeTo[id]
Time until maneuver (s)
o.maneuverNodes.burnVector[id]
Burn vector in world space (Vector3d)
o.maneuverNodes.orbitPatches[id]
Orbit patches after maneuver
o.addManeuverNode[ut,x,y,z]
Action: add maneuver node
o.updateManeuverNode[id,ut,x,y,z]
Action: update maneuver node
o.removeManeuverNode[id]
Action: remove maneuver node
n.* — Navigation / navball
Key
Description
Unit
n.heading / n.pitch / n.roll
From root part
deg
n.rawheading / n.rawpitch / n.rawroll
Raw from root part
deg
n.heading2 / n.pitch2 / n.roll2
From center of mass
deg
n.rawheading2 / n.rawpitch2 / n.rawroll2
Raw from center of mass
deg
Throttle
Key
Description
f.throttle
Current throttle (0–1)
f.setThrottle[float]
Action: set throttle
f.throttleUp
Action: increase 10%
f.throttleDown
Action: decrease 10%
f.throttleZero
Action: set to 0
f.throttleFull
Action: set to 1
Control inputs (read)
Key
Description
Range
f.pitchInput / f.yawInput / f.rollInput
Rotation axes
-1 to 1
f.xInput / f.yInput / f.zInput
RCS translation axes
-1 to 1
f.pitchTrim / f.yawTrim / f.rollTrim
Trim values
—
f.isNeutral
All controls neutral
bool
f.killRot
SAS kill rotation active
bool
Trim (set)
Key
Description
f.setPitchTrim[float]
Action: set pitch trim
f.setYawTrim[float]
Action: set yaw trim
f.setRollTrim[float]
Action: set roll trim
SAS & autopilot
Key
Description
f.sasEnabled
SAS autopilot enabled
f.sasMode
Current SAS mode (string)
f.setSASMode[mode]
Action: set SAS mode
f.precisionControl
Precision mode enabled
SAS modes: StabilityAssist, Prograde, Retrograde, Normal, Antinormal, RadialIn, RadialOut, Target, AntiTarget, Maneuver
Action groups
Key
Description
f.sas
Action: toggle SAS (optional [bool])
f.rcs
Action: toggle RCS
f.light
Action: toggle lights
f.gear
Action: toggle landing gear
f.brake
Action: toggle brakes
f.abort
Action: trigger abort
f.ag1 … f.ag10
Action: custom action groups
f.stage
Action: activate next stage
Fly-by-wire (FBW)
Key
Description
v.setFbW[1]
Action: enable FBW (0 to disable)
v.setPitch[float]
Action: set pitch (-1 to 1)
v.setYaw[float]
Action: set yaw (-1 to 1)
v.setRoll[float]
Action: set roll (-1 to 1)
v.setAttitude[pitch,yaw,roll]
Action: set rotation
v.setTranslation[x,y,z]
Action: set RCS translation
v.setPitchYawRollXYZ[p,y,r,x,y,z]
Action: set all axes at once
Key
Description
t.universalTime
Current UT (seconds)
t.deltaTime
Frame delta time
t.currentRate
Current warp rate multiplier
t.currentRateIndex
Current warp rate index
t.warpMode
HIGH or LOW
t.maxPhysicsRate
Max physics warp rate
t.isPaused
Game is paused
t.timeWarp[index]
Action: set time warp rate
t.pause
Action: pause game
t.unpause
Action: unpause game
Target info
Key
Description
tar.name
Target name
tar.type
Target type
tar.distance
Distance to target (m)
tar.o.relativeVelocity
Relative velocity (m/s)
tar.o.velocity
Target velocity (m/s)
tar.o.PeA / tar.o.ApA
Target apsides (m)
tar.o.inclination
Target inclination (deg)
tar.o.eccentricity
Target eccentricity
tar.o.period
Target period (s)
tar.o.sma / tar.o.lan
Target SMA / LAN
tar.o.trueAnomaly
Target true anomaly (deg)
tar.o.orbitingBody
Target reference body
tar.o.orbitPatches
Target orbit patches
tar.setTargetBody[index]
Action: set target to body
tar.setTargetVessel[index]
Action: set target to vessel
tar.clearTarget
Action: clear target
dock.* — Docking alignment
Key
Description
Unit
dock.ax
Docking X angle
deg
dock.ay
Docking Y angle / relative pitch
deg
dock.az
Docking Z angle
deg
dock.x
Target X distance
m
dock.y
Target Y distance
m
Totals
Key
Description
dv.ready
Calculator is ready
dv.totalDVVac
Total delta-V vacuum (m/s)
dv.totalDVASL
Total delta-V at sea level (m/s)
dv.totalDVActual
Total delta-V current atmosphere (m/s)
dv.totalBurnTime
Total burn time (s)
dv.stageCount
Number of stages
dv.stages
All stages (complex object)
Per-stage (indexed by stage number)
Key
Description
dv.stageDVVac[n]
Stage delta-V vacuum (m/s)
dv.stageDVASL[n]
Stage delta-V ASL (m/s)
dv.stageDVActual[n]
Stage delta-V actual (m/s)
dv.stageTWRVac[n]
Stage TWR vacuum
dv.stageTWRASL[n]
Stage TWR ASL
dv.stageTWRActual[n]
Stage TWR actual
dv.stageISPVac[n]
Stage ISP vacuum (s)
dv.stageISPASL[n]
Stage ISP ASL (s)
dv.stageISPActual[n]
Stage ISP actual (s)
dv.stageThrustVac[n]
Stage thrust vacuum (kN)
dv.stageThrustASL[n]
Stage thrust ASL (kN)
dv.stageThrustActual[n]
Stage thrust actual (kN)
dv.stageBurnTime[n]
Stage burn time (s)
dv.stageMass[n]
Stage total mass (kg)
dv.stageDryMass[n]
Stage dry mass (kg)
dv.stageFuelMass[n]
Stage fuel mass (kg)
dv.stageStartMass[n]
Stage start mass (kg)
dv.stageEndMass[n]
Stage end mass (kg)
All body queries take a body index parameter: b.name[0] (Kerbol), b.name[1] (Kerbin), etc.
Properties
Key
Description
b.number
Total number of bodies
b.name[i]
Body name
b.description[i]
Body description
b.radius[i]
Radius (m)
b.mass[i]
Mass (kg)
b.geeASL[i]
Surface gravity (G)
b.soi[i]
Sphere of influence (m)
b.hillSphere[i]
Hill sphere radius (m)
b.rotationPeriod[i]
Rotation period (s)
b.rotationAngle[i]
Current rotation angle (deg)
b.tidallyLocked[i]
Tidally locked (bool)
b.atmosphere[i]
Has atmosphere (bool)
b.maxAtmosphere[i]
Atmosphere depth (m)
b.atmosphereContainsOxygen[i]
Has oxygen (bool)
b.ocean[i]
Has ocean (bool)
b.referenceBody[i]
Reference body name
b.orbitingBodies[i]
Names of orbiting bodies
Body orbital parameters
Key
Description
b.o.gravParameter[i]
Gravitational parameter
b.o.PeA[i] / b.o.ApA[i]
Apsides (m)
b.o.inclination[i]
Inclination (deg)
b.o.eccentricity[i]
Eccentricity
b.o.period[i]
Orbital period (s)
b.o.sma[i] / b.o.lan[i]
SMA / LAN
b.o.trueAnomaly[i]
True anomaly (deg)
b.o.phaseAngle[i]
Phase angle to vessel (deg)
b.o.truePositionAtUT[i,ut]
Position at UT (Vector3d)
Key
Description
r.resource[name]
Resource amount across all parts
r.resourceMax[name]
Resource max capacity
r.resourceCurrent[name]
Resource amount in current stage
r.resourceCurrentMax[name]
Resource max in current stage
r.resourceNameList
List of all resource names
Example: r.resource[ElectricCharge], r.resource[LiquidFuel], r.resource[Oxidizer]
Key
Description
s.sensor[type]
Sensor data by type
s.sensor.temp
Temperature sensors
s.sensor.pres
Pressure sensors
s.sensor.grav
Gravity sensors
s.sensor.acc
Acceleration sensors
Key
Description
alarm.count
Number of active alarms
alarm.list
All alarms (complex object)
alarm.nextAlarm
Next alarm to trigger
alarm.timeToNext
Time until next alarm (s)
Key
Description
m.mapIsEnabled
Map view is active
m.toggleMapView
Action: toggle map view
m.enterMapView
Action: enter map view
m.exitMapView
Action: exit map view
mj.* — MechJeb (requires MechJeb)
Key
Description
mj.smartassoff
Action: disable SmartASS
mj.node
Action: point to maneuver node
mj.prograde / mj.retrograde
Action: orbital prograde/retrograde
mj.normalplus / mj.normalminus
Action: normal/anti-normal
mj.radialplus / mj.radialminus
Action: radial in/out
mj.targetplus / mj.targetminus
Action: toward/away from target
mj.relativeplus / mj.relativeminus
Action: along/against relative velocity
mj.parallelplus / mj.parallelminus
Action: parallel/anti-parallel to target
mj.surface[heading,pitch]
Action: surface orientation
mj.surface2[heading,pitch,roll]
Action: surface with roll
mj.stagingInfo
Staging simulation data
Key
Value
Meaning
p.paused
0
Flight scene OK
1
Paused
2
No power
3
Off
4
Antenna not found
5
Not in flight scene
Key
Description
a.version
Telemachus version string
a.ip
Server IP addresses
a.api
Full API listing
a.apiSubSet[key1,key2,...]
Subset of API listing
Returns a JSON array of available cameras:
[
{ "name" : " FlightCamera" , "type" : " Flight" , "url" : " /telemachus/cameras/FlightCamera" }
]
Fetch a JPEG snapshot:
GET /telemachus/cameras/FlightCamera
Returns image/jpeg. Returns 503 if the camera hasn't rendered yet, 404 if the camera name is unknown.
Dependencies (Unity and KSP DLLs) are pre-committed to references/. No KSP installation is required to build.
nix develop
msbuild Telemachus.sln /p:Configuration=Release
The post-build script stages the output to publish/GameData/ and downloads the Houston and mkon companion apps automatically.
Install Mono (which includes MSBuild), then:
msbuild Telemachus.sln /p:Configuration=Release
Contributions are welcome — see CONTRIBUTORS.md for the full list of people who have helped build this.
Bug reports and feature requests: open an issue
Chat: Discord server
Pull requests: please follow the conventional commits format (feat:, fix:, docs:, etc.). A commit-msg hook is installed automatically when you enter the Nix dev shell.
Please follow the Code of Conduct .
See LICENSE and Licences/ for third-party licenses.