GitHub - stellarwp/harbor: License Manager for Software Plugins

LiquidWeb Harbor

PHP Compatibility PHP Tests PHPStan

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.json is 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

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

API Reference

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.