This package is not affiliated with or acting on behalf of Starlink™️
npm install @gibme/starlink
or
yarn add @gibme/starlink
Communicate directly with Starlink hardware on your local network via gRPC.
fetch_diagnostics() - Detailed diagnostics including alerts, tests, and locationfetch_status() - Current device statusfetch_history() - Connection history datafetch_location() - GPS location (requires location enabled in dish settings)fetch_obstruction_map() - Obstruction map datareboot() - Issue a reboot commandstow() / unstow() - Stow or deploy the dishfetch_diagnostics() - Router diagnostics and network informationFull enterprise account management via the Starlink REST API.
The package provides focused entry points for tree-shaking or targeted imports:
| Import Path | Description |
|---|---|
@gibme/starlink |
Full API (enterprise + local devices + utilities) |
@gibme/starlink/enterprise |
Enterprise API only |
@gibme/starlink/dishy |
Local Dishy device API only |
@gibme/starlink/wifirouter |
Local WiFi Router device API only |
gpsTimeToUTC(gpsTimeS) - Convert GPS time (seconds since 1980-01-06 UTC) to a UTC timestampgpsTimeToUTCDate(gpsTimeS) - Convert GPS time to a Date object in UTCThe package build process generates TypeScript code from *.proto definitions into ./src/protobuf/spacex
protoc binary is required to build the TypeScript files
apt install protobuf-compilerbrew install protobufchoco install protocyarn build:protobuf to generate the protobuf codeThe Device API calls listed above were tested as working against the following software versions; for all other versions, your mileage may vary:
186897dc-8910-40f9-bb84-c53a5e8404c9.uterm_manifest.releasehttps://gibme-npm.github.io/starlink/
import { Dishy } from '@gibme/starlink/dishy';
const dishy = new Dishy();
const diagnostics = await dishy.fetch_diagnostics();
console.log(diagnostics);
import { WiFiRouter } from '@gibme/starlink/wifirouter';
const router = new WiFiRouter();
const diagnostics = await router.fetch_diagnostics();
console.log(diagnostics);
Both Dishy and WiFiRouter take a single options object. Supply tls to talk to a TLS-terminating reverse proxy, and headers to attach any extra headers (e.g., an API key) to every gRPC call:
import { Dishy } from '@gibme/starlink/dishy';
const dishy = new Dishy({
host: 'dishy.example.com',
port: 443,
timeout: 5000,
tls: true,
headers: { 'x-api-key': process.env.DISHY_API_KEY! }
});
tls: true uses the system trust store with strict hostname verification. For private CAs or self-signed development proxies, pass an object instead:
import { readFileSync } from 'node:fs';
const dishy = new Dishy({
host: 'dishy.lan',
port: 9443,
tls: {
rootCerts: readFileSync('/etc/ssl/private-ca.pem'),
rejectUnauthorized: true
},
headers: { 'x-api-key': 'secret' }
});
Setting rejectUnauthorized: false skips certificate verification entirely; only use that for trusted local development environments.
import { StarlinkAPI } from '@gibme/starlink/enterprise';
const api = new StarlinkAPI('<client_id>', '<client_secret>');
const accounts = await api.fetch_accounts();
const data = await accounts[0].fetch_realtime_data_tracking();
console.log(data);
import { StarlinkAPI } from '@gibme/starlink/enterprise';
const api = new StarlinkAPI('<client_id>', '<client_secret>');
const accounts = await api.fetch_accounts();
const telemetry = await accounts[0].telemetry();
console.log(telemetry);
Many thanks go to starlink-rs for the older version of the base Protocol Buffers definitions for the gRPC server.