{"id":48441513,"url":"https://github.com/stellarwp/harbor","last_synced_at":"2026-05-14T02:01:19.009Z","repository":{"id":345971332,"uuid":"1187352328","full_name":"stellarwp/harbor","owner":"stellarwp","description":"License Manager for Software Plugins","archived":false,"fork":false,"pushed_at":"2026-03-31T20:13:11.000Z","size":6332,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-31T20:36:24.086Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stellarwp.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.txt","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-20T16:18:33.000Z","updated_at":"2026-03-31T20:13:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stellarwp/harbor","commit_stats":null,"previous_names":["stellarwp/license-manager","stellarwp/harbor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stellarwp/harbor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stellarwp%2Fharbor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stellarwp%2Fharbor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stellarwp%2Fharbor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stellarwp%2Fharbor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stellarwp","download_url":"https://codeload.github.com/stellarwp/harbor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stellarwp%2Fharbor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31477943,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T14:34:32.243Z","status":"ssl_error","status_checked_at":"2026-04-06T14:34:31.723Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-06T15:31:20.473Z","updated_at":"2026-05-14T02:01:19.003Z","avatar_url":"https://github.com/stellarwp.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Harbor\n\nBundled library that handles licensing, updates, and feature gating for WordPress plugins and themes.\n\n[![PHP Compatibility](https://github.com/stellarwp/harbor/actions/workflows/compatibility.yml/badge.svg)](https://github.com/stellarwp/harbor/actions/workflows/compatibility.yml)\n[![PHP Tests](https://github.com/stellarwp/harbor/actions/workflows/tests-php.yml/badge.svg)](https://github.com/stellarwp/harbor/actions/workflows/tests-php.yml)\n[![PHPStan](https://github.com/stellarwp/harbor/actions/workflows/static-analysis.yml/badge.svg)](https://github.com/stellarwp/harbor/actions/workflows/static-analysis.yml)\n[![E2E Tests](https://github.com/stellarwp/harbor/actions/workflows/tests-e2e.yml/badge.svg)](https://github.com/stellarwp/harbor/actions/workflows/tests-e2e.yml)\n\n## Installation\n\nIt's recommended that you install Harbor as a project dependency via [Composer](https://getcomposer.org/):\n\n```bash\ncomposer require stellarwp/harbor\n```\n\n\u003e We _actually_ recommend that this library gets included in your project using [Strauss](https://github.com/BrianHenryIE/strauss).\n\u003e\n\u003e Luckily, adding Strauss to your `composer.json` is only slightly more complicated than adding a typical dependency, so checkout our [strauss docs](https://github.com/stellarwp/global-docs/blob/main/docs/strauss-setup.md).\n\n## Initialize the library\n\nInitializing the Harbor library should be done within the `plugins_loaded` action, preferably at priority `0`.\n\n```php\nuse LiquidWeb\\Harbor\\Config;\nuse LiquidWeb\\Harbor\\Harbor;\n\nadd_action( 'plugins_loaded', function() {\n /**\n  * Configure the container.\n  *\n  * The container must be compatible with stellarwp/container-contract.\n  * See here: https://github.com/stellarwp/container-contract#usage.\n  *\n  * If you do not have a container, we recommend https://github.com/lucatume/di52\n  * and the corresponding wrapper:\n  * https://github.com/stellarwp/container-contract/blob/main/examples/di52/Container.php\n  */\n $container = new Container();\n // Use a plugin basename constant defined in your main plugin file,\n // e.g. define( 'MY_PLUGIN_BASENAME', plugin_basename( __FILE__ ) )\n Config::set_plugin_basename( MY_PLUGIN_BASENAME );\n Config::set_container( $container );\n Harbor::init();\n}, 0 );\n```\n\n## Translation\n\nPackage 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\n\n```bash\n./bin/stellar-harbor domain=\u003cyour-plugin-domain\u003e\n```\n\nor\n\n```bash\n./bin/stellar-harbor\n```\n\nand prompt the plugin domain\nYou can also add lines below to your composer file in order to run command automatically\n\n```json\n\"scripts\": {\n \"stellar-harbor\": [\n   \"vendor/bin/stellar-harbor domain=\u003cyour-plugin-domain\u003e\"\n ],\n \"post-install-cmd\": [\n   \"@stellar-harbor\"\n ],\n \"post-update-cmd\": [\n   \"@stellar-harbor\"\n ]\n  }\n```\n\n## Registering a plugin\n\nHarbor 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](/docs/guides/integration.md) for more details.\n\n## Changelog\n\nThis project uses [@stellarwp/changelogger](https://github.com/stellarwp/changelogger) to manage its changelog. All notable changes are tracked via changelog entry files in the `changelog/` directory.\n\nTo add a new changelog entry:\n\n```bash\nbunx @stellarwp/changelogger add\n```\n\nTo compile changelog entries into `changelog.txt`:\n\n```bash\nbunx @stellarwp/changelogger write --overwrite-version \u003cversion\u003e\n```\n\n## Releasing\n\n1. Run the **Release Prep** workflow (`Actions → Release Prep → Run workflow`). Supply the target branch, version (e.g. `1.2.0`), and the release date (e.g. `2026-04-29`). The workflow bumps the `VERSION` constant, compiles the changelog, and opens a PR automatically.\n2. Review and merge the PR.\n3. Create a GitHub Release with a new tag in the format `vX.X.X` targeting the merge commit.\n\n## Documentation\n\nStart with [Harbor Overview](/docs/harbor.md) for the full architecture.\n\n### Subsystems\n\n- [Licensing](/docs/subsystems/licensing.md) — Key discovery, API responses, validation workflows, caching.\n- [Catalog](/docs/subsystems/catalog.md) — Product families, tiers, features, the Commerce Portal API.\n- [Features](/docs/subsystems/features.md) — Feature types, resolution, strategies, Manager API.\n- [Cron](/docs/subsystems/cron.md) — Scheduled refresh of catalog and licensing data.\n- [Frontend](/docs/subsystems/frontend.md) — React app, @wordpress/data store, component hierarchy, CSS scoping.\n- [Notices](/docs/subsystems/notices.md) — Admin notices, legacy license warnings, persistent dismissal.\n\n### Architecture\n\n- [Unified License Key](/docs/architecture/unified-license-key-system-design.md) — Key model, seat mechanics, system boundaries.\n- [Fat Leader / Thin Instance](/docs/architecture/fat-leader-thin-instance.md) — Leader election, cross-instance hooks.\n- [Conventions](/docs/architecture/conventions.md) — Naming conventions for namespaces, packages, identifiers.\n\n### API Reference\n\n- [REST: License](/docs/api/rest/license.md) — License endpoints.\n- [REST: Catalog](/docs/api/rest/catalog.md) — Catalog endpoints.\n- [REST: Features](/docs/api/rest/features.md) — Feature endpoints.\n- [REST: Legacy Licenses](/docs/api/rest/legacy-licenses.md) — Legacy license endpoints.\n- [Liquid Web Licensing v1](/docs/api/liquid-web-software-licensing-v1.md) — External licensing API consumed by Harbor.\n\n### Guides\n\n- [Integration Guide](/docs/guides/integration.md) — How to integrate your plugin with Harbor.\n- [CLI Commands](/docs/guides/cli.md) — WP-CLI commands for feature management.\n- [Testing](/docs/guides/testing.md) — PHP tests with Codeception/`slic`; E2E tests with Playwright/wp-env.\n\n### Plugins with Harbor\n\n| Plugin name             | Repository                                                                                            | Distribution                                                             | Note                                                                                        |\n|-------------------------|-------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|---------------------------------------------------------------------------------------------|\n| GiveWP                  | [impress-org/givewp](https://github.com/impress-org/givewp)                                           | [wp.org](https://wordpress.org/plugins/give/)                            |                                                                                             |\n| LearnDash               | [stellarwp/learndash-core](https://github.com/stellarwp/learndash-core)                               | [Herald](https://herald.nexcess.com/admin/products/sfwd-lms)             |                                                                                             |\n| MemberDash              | [stellarwp/memberdash](https://github.com/stellarwp/memberdash)                                       | [Herald](https://herald.nexcess.com/admin/products/memberdash)           |                                                                                             |\n| The Events Calendar     | [the-events-calendar/the-events-calendar](https://github.com/the-events-calendar/the-events-calendar) | [wp.org](https://wordpress.org/plugins/the-events-calendar/)             | [tribe-common](https://github.com/the-events-calendar/tribe-common) should be updated first |\n| Event Tickets           | [the-events-calendar/event-tickets](https://github.com/the-events-calendar/event-tickets)             | [wp.org](https://wordpress.org/plugins/event-tickets/)                   | [tribe-common](https://github.com/the-events-calendar/tribe-common) should be updated first |\n| Kadence Memberships Pro | [stellarwp/restrict-content-pro](https://github.com/stellarwp/restrict-content-pro)                   | [Herald](https://herald.nexcess.com/admin/products/restrict-content-pro) |                                                                                             |\n| Kadence Blocks          | [stellarwp/kadence-blocks](https://github.com/stellarwp/kadence-blocks)                               | [wp.org](https://wordpress.org/plugins/kadence-blocks/)                  |                                                                                             |\n| Kadence Shop Kit        | [stellarwp/kadence-shop-kit](https://github.com/stellarwp/kadence-shop-kit)                           | [Herald](https://herald.nexcess.com/admin/products/kadence-shop-kit)     |                                                                                             |\n| Kadence Theme Kit Pro   | [stellarwp/kadence-pro](https://github.com/stellarwp/kadence-pro)                                     | [Herald](https://herald.nexcess.com/admin/products/kadence-theme-pro)    |                                                                                             |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstellarwp%2Fharbor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstellarwp%2Fharbor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstellarwp%2Fharbor/lists"}