shippercli / contracts
Contracts and interfaces for Shipper CLI providers
v1.1.0
2026-08-03 12:13 UTC
Requires
- php: ^8.3
README
Contracts and interfaces for Shipper CLI providers.
Packages
shippercli/contracts- Shared interfaces for provider pluginsshippercli/provider-ploi- Ploi provider pluginshippercli/provider-forge- Laravel Forge provider plugin
Interfaces
DeploymentProviderInterface- Main provider interfaceAliasManagerInterface- Domain alias managementDeployScriptManagerInterface- Deployment script managementEnvironmentManagerInterface- Environment variable managementSslManagerInterface- SSL certificate managementProviderCapabilitiesInterface- Explicit supported, partial, and unsupported capabilitiesServerLifecycleProviderInterface- Safe provider server resolution, creation, inspection, and deletionShipperPluginInterface- 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().
Providers that expose optional features should implement the matching contract interfaces rather than adding provider-specific methods to the core deployment interface. Server deletion must require proof that Shipper created the server.
Creating a Provider
- Create a new repository:
shippercli/provider-{name} - Add
composer.jsonwith"type": "shipper-plugin" - Implement
DeploymentProviderInterface - Implement
ShipperPluginInterfaceand return a provider-name-to-class map - Add
extra.shipper-pluginpointing to your plugin class
public function providers(): array { return [ 'example' => ExampleProvider::class, ]; }
License
MIT
