stellarwp / harbor
A library that integrates a WordPress product with the Liquid Web licensing system.
Requires
- php: >=7.4
- ext-json: *
- nyholm/psr7: ^1.0
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- psr/http-message: ^1.1
- stellarwp/container-contract: ^1.0
- stellarwp/licensing-api-client-wordpress: ^0.10
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: ^1
- dpanta94/phpstan-containers: ^0
- exussum12/coverage-checker: ^1.1
- lucatume/codeception-snapshot-assertions: *
- lucatume/di52: ^3
- lucatume/wp-browser: *
- php-stubs/wp-cli-stubs: ^2
- phpcompatibility/phpcompatibility-wp: ^2
- phpspec/prophecy: *
- phpspec/prophecy-phpunit: *
- phpstan/phpstan: ^2
- phpunit/phpunit: *
- stellarwp/coding-standards: ^2
- szepeviktor/phpstan-wordpress: >=1.0
- wp-cli/wp-cli: ^2
- dev-main
- dev-fix/legacy-licensed-features
- dev-feature/update-toast-with-reload-page
- dev-fix/toast-accessibility
- dev-feature/refresh-license
- dev-SCON-604/activation-notice
- dev-refactor/feature-logos
- dev-fix/catalog-tier-slug
- dev-SCON-597/license-key-input-visibility
- dev-chore/improve-product-logo-accessibility
- dev-chore/update-brand-colors
- dev-fix/scon-602
- dev-base/SCON-598/remove-catalog-error-when-license-is-not-entered
- dev-base/SCON-595/add-services-to-ui
- dev-SCON-600/service-strategy
- dev-fix/catalog-kadence-pro
- dev-base/SCON-599/switch-to-modal-for-errors
- dev-SCON-581/downlo_url
- dev-bump-licensing-to-0-9-4
- dev-SCON-543/refresh-license-button
- dev-emdash/scon-597-6xn
This package is auto-updated.
Last update: 2026-04-10 21:57:31 UTC
README
Installation
It's recommended that you install Harbor as a project dependency via Composer:
composer require stellarwp/harbor
We actually recommend that this library gets included in your project using Strauss.
Luckily, adding Strauss to your
composer.jsonis only slightly more complicated than adding a typical dependency, so checkout our strauss docs.
Initialize the library
Initializing the Harbor library should be done within the plugins_loaded action, preferably at priority 0.
use LiquidWeb\Harbor\Harbor; add_action( 'plugins_loaded', function() { /** * Configure the container. * * The container must be compatible with stellarwp/container-contract. * See here: https://github.com/stellarwp/container-contract#usage. * * If you do not have a container, we recommend https://github.com/lucatume/di52 * and the corresponding wrapper: * https://github.com/stellarwp/container-contract/blob/main/examples/di52/Container.php */ $container = new Container(); Config::set_container( $container ); Harbor::init(); }, 0 );
Translation
Package is using __( 'Invalid request: nonce field is expired. Please try again.', '%TEXTDOMAIN%' ) function for translation. In order to change domain placeholder '%TEXTDOMAIN%' to your plugin translation domain run
./bin/stellar-harbor domain=<your-plugin-domain>
or
./bin/stellar-harbor
and prompt the plugin domain You can also add lines below to your composer file in order to run command automatically
"scripts": { "stellar-harbor": [ "vendor/bin/stellar-harbor domain=<your-plugin-domain>" ], "post-install-cmd": [ "@stellar-harbor" ], "post-update-cmd": [ "@stellar-harbor" ] }
Registering a plugin
Harbor discovers your plugin's embedded key automatically by scanning active plugins for a file named LWSW_KEY.php in the plugin root. No filter registration is required. See the Harbor Integration Guide for more details.
Changelog
This project uses @stellarwp/changelogger to manage its changelog. All notable changes are tracked via changelog entry files in the changelog/ directory.
To add a new changelog entry:
bunx @stellarwp/changelogger add
To compile changelog entries into changelog.txt:
bunx @stellarwp/changelogger write --overwrite-version <version>
Documentation
Start with Harbor Overview for the full architecture.
Subsystems
- Licensing — Key discovery, API responses, validation workflows, caching.
- Catalog — Product families, tiers, features, the Commerce Portal API.
- Features — Feature types, resolution, strategies, Manager API.
- Cron — Scheduled refresh of catalog and licensing data.
- Frontend — React app, @wordpress/data store, component hierarchy, CSS scoping.
- Notices — Admin notices, legacy license warnings, persistent dismissal.
Architecture
- Unified License Key — Key model, seat mechanics, system boundaries.
- Fat Leader / Thin Instance — Leader election, cross-instance hooks.
- Conventions — Naming conventions for namespaces, packages, identifiers.
API Reference
- REST: License — License endpoints.
- REST: Catalog — Catalog endpoints.
- REST: Features — Feature endpoints.
- REST: Legacy Licenses — Legacy license endpoints.
- Liquid Web Licensing v1 — External licensing API consumed by Harbor.
Guides
- Integration Guide — How to integrate your plugin with Harbor.
- CLI Commands — WP-CLI commands for feature management.
- Testing — Running automated tests with Codeception and
slic.