PHPackages                             shippercli/contracts - 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. shippercli/contracts

ActiveLibrary

shippercli/contracts
====================

Contracts and interfaces for Shipper CLI providers

v1.0.0(yesterday)069↑2639.1%2MITPHPPHP ^8.3CI passing

Since Jul 27Pushed todayCompare

[ Source](https://github.com/shippercli/contracts)[ Packagist](https://packagist.org/packages/shippercli/contracts)[ RSS](/packages/shippercli-contracts/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (2)Used By (2)

Shipper CLI Contracts
=====================

[](#shipper-cli-contracts)

[![Shipper Banner](https://raw.githubusercontent.com/shippercli/assets/main/banner.png)](https://raw.githubusercontent.com/shippercli/assets/main/banner.png)

Contracts and interfaces for Shipper CLI providers.

Packages
--------

[](#packages)

- `shippercli/contracts` - Shared interfaces for provider plugins
- `shippercli/provider-ploi` - Ploi provider plugin
- `shippercli/provider-forge` - Laravel Forge provider plugin

Interfaces
----------

[](#interfaces)

- `DeploymentProviderInterface` - Main provider interface
- `AliasManagerInterface` - Domain alias management
- `DeployScriptManagerInterface` - Deployment script management
- `EnvironmentManagerInterface` - Environment variable management
- `SslManagerInterface` - SSL certificate management
- `ShipperPluginInterface` - Plugin entry point

Provider contracts accept Shipper configuration objects as `object` so provider packages do not depend on the CLI's internal DTO namespace. Providers should use the documented configuration accessors (`name()`, `path()`, `repository()`, `profiles()`, `get()`, and related feature accessors) and feature-detect optional accessors with `method_exists()`.

Creating a Provider
-------------------

[](#creating-a-provider)

1. Create a new repository: `shippercli/provider-{name}`
2. Add `composer.json` with `"type": "shipper-plugin"`
3. Implement `DeploymentProviderInterface`
4. Implement `ShipperPluginInterface` and return a provider-name-to-class map
5. Add `extra.shipper-plugin` pointing to your plugin class

```
public function providers(): array
{
    return [
        'example' => ExampleProvider::class,
    ];
}
```

License
-------

[](#license)

MIT

###  Health Score

45

—

FairBetter than 91% of packages

Maintenance100

Actively maintained with recent releases

Popularity13

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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

Unknown

Total

1

Last Release

1d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9d02cdb7563da13d24667b14025c67a4e2fc52a104becc8bfe384da21d056768?d=identicon)[marktopper](/maintainers/marktopper)

---

Top Contributors

[![marktopper](https://avatars.githubusercontent.com/u/2232539?v=4)](https://github.com/marktopper "marktopper (7 commits)")

### Embed Badge

![Health badge](/badges/shippercli-contracts/health.svg)

```
[![Health](https://phpackages.com/badges/shippercli-contracts/health.svg)](https://phpackages.com/packages/shippercli-contracts)
```

PHPackages © 2026

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