shubo / module-shipping-core
Carrier-agnostic shipping orchestration framework for Magento 2 marketplaces and multi-vendor stores
Package info
github.com/nshubitidze/module-shipping-core
Type:magento2-module
pkg:composer/shubo/module-shipping-core
Requires
- php: >=8.1
- magento/framework: ^103.0
- magento/module-quote: ^101.2
- magento/module-sales: ^103.0
- magento/module-shipping: ^100.4
- magento/module-store: ^101.1
- phpoffice/phpspreadsheet: ^2.0 || ^3.0
Requires (Dev)
- bitexpert/phpstan-magento: ^0.32
- magento/magento-coding-standard: ^37.0
- phpstan/phpstan: ^1.12
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.10
README
Carrier-agnostic shipping orchestration framework for Magento 2 marketplaces and multi-vendor stores.
Shubo_ShippingCore is the foundation module that provides common abstractions — a pluggable carrier-adapter interface, shipment orchestration, resilience primitives (circuit breaker, retry, rate limiting, idempotency), a polling scheduler for carriers without webhooks, a webhook dispatcher for carriers that have them, and an invoice reconciliation framework.
Per-carrier adapters (e.g. Shubo_ShippingTrackings, Shubo_ShippingWoltDrive, Shubo_ShippingDelivo) are shipped as separate modules that plug into Core.
Development
The module ships a standalone composer setup so the three quality gates can run outside of a full Magento install. From a clean checkout:
composer install composer phpunit # or vendor/bin/phpunit composer phpstan # or vendor/bin/phpstan analyse composer phpcs # or vendor/bin/phpcs
composer install pulls magento/framework from the open-source
Mage-OS mirror — no Adobe Commerce
credentials required. PHP is pinned to 8.4.0 via config.platform.php
to match the runtime; the CI matrix exercises 8.1 through 8.4.
Status
Early development. APIs are not yet stable. This README will be fleshed out in the v1.0.0 release. See docs/design/shipping-core.md in the downstream integration project for the current design document.
Installation
composer require shubo/module-shipping-core bin/magento module:enable Shubo_ShippingCore bin/magento setup:upgrade bin/magento setup:di:compile
Requirements
- Magento 2.4.8 or later
- PHP 8.1 or later
phpoffice/phpspreadsheet^2.0 or ^3.0 (for carrier invoice import)
Architecture overview
┌────────────────────────────────────┐
│ Shubo_ShippingCore │
│ │
│ CarrierRegistry │
│ ShipmentOrchestrator │
│ TrackingPoller WebhookDispatcher│
│ RateQuoteService ReconciliationSvc│
│ CircuitBreaker RetryPolicy │
│ RateLimiter IdempotencyStore│
└───────┬────────────────────────────┘
│ CarrierGatewayInterface
│ CarrierCapabilitiesInterface
│ WebhookHandlerInterface
│ InvoiceImporterInterface
│
┌────────────┼────────────┬──────────────┐
▼ ▼ ▼ ▼
TrackingsAdapter WoltDrive DelivoAdapter (your adapter)
Writing a carrier adapter
A carrier adapter module implements:
CarrierGatewayInterface—quote,createShipment,cancelShipment,getShipmentStatus,fetchLabel,listCities,listPudosCarrierCapabilitiesInterface— declares what the carrier supports (webhooks, sandbox, COD reconciliation API, PUDO, express, etc.)- Optional
WebhookHandlerInterface— if the carrier pushes status updates - Optional
InvoiceImporterInterface— if the carrier settles fees/COD via downloadable invoices
A full adapter-authoring guide ships with v1.0.0.
Available adapters
| Module | Status | Scope | Link |
|---|---|---|---|
shubo/module-shipping-shippo |
Live (first real adapter) | International — aggregates USPS, UPS, FedEx, DHL, and regional carriers through the Shippo API. Rate quote, label purchase, webhook signature verification, poller fallback. Test-mode is the default. | repo |
shubo/module-shipping-wolt-drive |
Deferred | Tbilisi same-day + on-demand delivery via Wolt Drive. Blocked on Wolt sales-led credential signup (3–10 days); no shipping-core changes needed when the adapter lands. | — |
shubo/module-shipping-trackings |
Planned | Georgia-domestic courier aggregator; poll-only (no webhooks). | — |
License
Apache-2.0 — see LICENSE and NOTICE.
Author
Nikoloz Shubitidze (Shubo)