PHPackages                             srwiez/starlink-client - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. srwiez/starlink-client

ActiveLibrary[HTTP &amp; Networking](/categories/http)

srwiez/starlink-client
======================

Starlink PHP Client using local gRPC communication

v2.1.1(3mo ago)4961MITPHPPHP ^8.3CI passing

Since Nov 26Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/SRWieZ/php-starlink-client)[ Packagist](https://packagist.org/packages/srwiez/starlink-client)[ GitHub Sponsors](https://github.com/SRWieZ)[ RSS](/packages/srwiez-starlink-client/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (10)Dependencies (20)Versions (24)Used By (0)

Starlink PHP Client
===================

[](#starlink-php-client)

[![Latest Stable Version](https://camo.githubusercontent.com/c925c3b4865002e49980598d081a9302bbc20b812ff3e663f6d47af505f476ae/68747470733a2f2f706f7365722e707567782e6f72672f73727769657a2f737461726c696e6b2d636c69656e742f76)](https://packagist.org/packages/srwiez/starlink-client)[![Total Downloads](https://camo.githubusercontent.com/37f43a70b1bfd1542399de1614067ff35f7070f373f69351443eb0cf36f9e757/68747470733a2f2f706f7365722e707567782e6f72672f73727769657a2f737461726c696e6b2d636c69656e742f646f776e6c6f616473)](https://packagist.org/packages/srwiez/starlink-client)[![License](https://camo.githubusercontent.com/d1e9e8762acd404007a5c99ae996dcaf9192846bbe82ec44e0878797ff9f3145/68747470733a2f2f706f7365722e707567782e6f72672f73727769657a2f737461726c696e6b2d636c69656e742f6c6963656e7365)](https://packagist.org/packages/srwiez/starlink-client)[![PHP Version Require](https://camo.githubusercontent.com/7397361b8b04758b8f11e499aa63016d02521db345cdef1d37202ca075921bf8/68747470733a2f2f706f7365722e707567782e6f72672f73727769657a2f737461726c696e6b2d636c69656e742f726571756972652f706870)](https://packagist.org/packages/srwiez/starlink-client)[![GitHub Workflow Status (with event)](https://camo.githubusercontent.com/45cace5e05f9cb4ae197bcbbc8d7373028f47b55419d64daf4603be130fbcad7/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f73727769657a2f7068702d737461726c696e6b2d636c69656e742f746573742e796d6c3f6c6162656c3d5465737473)](https://github.com/srwiez/php-starlink-client/actions/workflows/test.yml)

PHP client to monitor and control your Starlink dish via the local gRPC API.

This client uses the gRPC API of your Starlink device. API classes are generated based on the protoset file extracted from the reflection service of the Starlink device.

This client is not affiliated with SpaceX or Starlink.

It also comes with an obstruction map generator to visualize the obstruction map of the dish.

[![Obstruction map grayscale](assets/obstruction_map_grayscale.png)](assets/obstruction_map_grayscale.png)[![Obstruction map](assets/obstruction_map.png)](assets/obstruction_map.png)

🚀 Installation
--------------

[](#-installation)

This package can be installed via composer, be aware that you need to have the `grpc` extension installed on your system.

```
composer require srwiez/starlink-client
```

📚 Usage
-------

[](#-usage)

You can use the `SRWieZ\StarlinkClient\Dishy` class to interact with your Starlink device.

### Getting the status

[](#getting-the-status)

Get all the information about the device.

```
use SRWieZ\StarlinkClient\Dishy;

$dishy = new Dishy('192.168.100.1:9200');
$infos = $dishy->getStatus();
```

Get the sleep/powersave configuration

```
$sleepConfig = $dishy->getSleepModeConfig();
```

Get history of the following statistics:

- Ping drop rate
- Ping Latency
- Download speed
- Upload speed
- Power usage

```
$statistics = $dishy->getStatsHistory();
```

If enabled in the settings of the mobile app, you can get the location of the dish.

```
$location = $dishy->getLocation();
```

### Generate the obstruction map

[](#generate-the-obstruction-map)

You can obtain the obstruction map of the dish. For more information about the representation of each pixel in the data, refer to [this link](https://github.com/sparky8512/starlink-grpc-tools/blob/main/dish_obstruction_map.py).

```
use SRWieZ\StarlinkClient\Dishy;

$dishy = new Dishy('192.168.100.1:9200');

// Get the obstruction map
$data = $dishy->getObstructionMap();

// Colored image
(new ObstructionMapGenerator($data))
    ->transparent()
    ->generate()
    ->asFile('assets/obstruction_map.png');

(new ObstructionMapGenerator($data))
    ->transparent(false)
    ->grayscale()
    ->opacity(0.95)
    ->generate()
    ->asFile('assets/obstruction_map_grayscale.png');
```

See result in the [assets](assets) folder or the images above.

### Send a command

[](#send-a-command)

Using the local gRPC API, you can send a limited set of commands to the user terminal. These commands are all listed below.

```
use SRWieZ\StarlinkClient\Dishy;

$dishy = new Dishy('192.168.100.1:9200');

// Reboot the dish
$dishy->reboot();

// Stow the dish
$dishy->stow();

// Unstow the dish
$dishy->unstow();

// Reset obstruction map
$dishy->resetObstructionMap();

// Enable power save mode
$dishy->setSleepModeConfig(
    start: 60, // 01:00
    duration: 120, // 03:00
);

// Disable power save mode
$dishy->disableSleepMode();
```

### Advanced usage

[](#advanced-usage)

If you prefer to use the gRPC client directly, you can use the generated `DeviceClient` class.

```
use SpaceX\API\Device\DeviceClient;
use Grpc\ChannelCredentials;
use SpaceX\API\Device\GetStatusRequest;

$client = new DeviceClient('192.168.100.1:9200', [
    'credentials' => ChannelCredentials::createInsecure(),
]);

[$response, $status] = $client->Handle(
    new Request(['get_status' => new GetStatusRequest()])
)->wait();
```

📋 TODO
------

[](#-todo)

Contributions are welcome!

- Finish CLI tool / examples
- Add more tests
- Create a script to generate proper enums and parse the values in the response to return those enums.
- Implement the authentication web API used by the mobile app to gain more control over the dish (e.g., snow melt mode, etc.).

🧑‍🔧 Building the client
-----------------------

[](#‍-building-the-client)

If you have a starlink in your local network, you can update the client by running the following command.

Before running the command, make sure you have the `grpcurl`, `protoc` and `grpc_php_plugin` installed on your system.

```
./update_client.sh
```

🤝 Contributing
--------------

[](#-contributing)

Clone the project and run `composer update` to install the dependencies.

Before pushing your changes, run `composer qa`.

This will run [pint](http://github.com/laravel/pint) (code style), [phpstan](http://github.com/phpstan/phpstan) (static analysis), and [pest](http://github.com/pestphp/pest) (tests).

Additionally, if you have a Starlink dish on your local network, you can update the gRPC client by running `./update_client.sh`. This command will update everything under the `SpaceX` namespace. After that, run `composer qa` to ensure everything is still functioning properly. If everything is fine and new functionality has been published by the gRPC reflection service, you can submit a pull request for your changes.

👥 Credits
---------

[](#-credits)

Starlink PHP Client was created by Eser DENIZ.

The following projects inspired this library and served as a reference:

-
-
-

📝 License
---------

[](#-license)

Starlink PHP Client is licensed under the MIT License. See LICENSE for more information.

###  Health Score

47

—

FairBetter than 93% of packages

Maintenance87

Actively maintained with recent releases

Popularity16

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor1

Top contributor holds 95.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~44 days

Recently: every ~126 days

Total

13

Last Release

93d ago

Major Versions

v1.6.0 → v2.0.02025-06-08

### Community

Maintainers

![](https://www.gravatar.com/avatar/735894a4f6e39aa85e3d136abc9cf0be92da593d88731382384185293cbfe965?d=identicon)[SRWieZ](/maintainers/SRWieZ)

---

Top Contributors

[![SRWieZ](https://avatars.githubusercontent.com/u/1408020?v=4)](https://github.com/SRWieZ "SRWieZ (46 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")

---

Tags

grpcphpspacexstarlink

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/srwiez-starlink-client/health.svg)

```
[![Health](https://phpackages.com/badges/srwiez-starlink-client/health.svg)](https://phpackages.com/packages/srwiez-starlink-client)
```

###  Alternatives

[api-platform/core

Build a fully-featured hypermedia or GraphQL API in minutes!

2.6k52.2M381](/packages/api-platform-core)[api-platform/symfony

Symfony API Platform integration

385.0M152](/packages/api-platform-symfony)[api-platform/serializer

API Platform core Serializer

295.3M101](/packages/api-platform-serializer)[craftcms/cms

Craft CMS

3.6k3.7M3.4k](/packages/craftcms-cms)[api-platform/openapi

Models to build and serialize an OpenAPI specification.

425.3M110](/packages/api-platform-openapi)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.8M674](/packages/shopware-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
