PBJ License Manager Changelog (v1.2.0): How Selling Works, Explained on Every Tab
PBJ License Manager turns any WordPress site into a license server for plugins and themes you sell: issue keys, track per-key site activations, serve WordPress-native update manifests to valid keys, and sign download links so package URLs can’t be shared. A bad key or an unreachable server never breaks a customer’s plugin — it only means no update is offered. Here’s the release history.
Version 1.2.0 — how selling works, explained on every tab
- Getting-started checklist on the Keys tab: products registered, current-release package uploaded, email delivery configured, first key issued — each row shows done/to-do with a link to the right tab — plus a numbered “How selling works” walkthrough of the whole pipeline.
- Every tab explained. Keys, Products, Packages and Settings each gained a plain-English intro and numbered how-to steps for every form, field and button — including what Revoke really does (blocks updates, never breaks the customer’s site) and a proper warning on signing-secret regeneration.
- No functional changes.
Version 1.1.3 — the license server licenses itself
License Manager is product #7 in our own storefront, so it now eats its own cooking: a License section in Settings where you enter your key to receive updates, using the same bundled client SDK every other PBJ plugin uses (replacing its old self-hosted updater). On the license server’s own site, no key is needed — it detects it’s home.
Version 1.1.2 — client SDK v1.1.0
The distributable client SDK — the small GPL class plugin authors bundle into the plugins they sell — grew up: a self-contained License settings section (status banner + key field + Save via a shared handler), on-own-server detection (no key needed when the plugin runs on the license server itself), an upgrade-path status for major-version upgrades, and a status() helper. Integrating licensing into a sold plugin is now a two-liner.
Version 1.1.1 — download protection self-heals
Security hardening: the packages folder’s deny-all protection (.htaccess + index.php) now self-heals on plugin activation and before every signed download is served. Previously it was only written when the Packages tab stored an upload — so package zips that arrived any other way (site sync, FTP, manual copy) were publicly downloadable at a guessable URL until an admin opened the Packages tab.
Version 1.1.0
- Packages tab. Upload, store, and delete plugin zips per product in a deny-all protected uploads folder; “Make current” updates the manifest and latest version in one step.
- Download links in key emails. A new
{download_url}placeholder puts a signed link (72-hour default, configurable) to the current release of the purchased major version right in the key email. Feature updates still flow through WordPress updates only. - “Resend email” action on each key, regenerating a fresh download link.
- New email-link-lifetime setting; schema v2 migration upgrades default email templates in place; opt-in uninstall data delete now also removes stored package files.
Version 1.0.0
- Products registry — register each plugin or theme you sell, with a per-product site-activation limit and current major version.
- Four ways to issue keys: manually from the admin, via a PHP hook, via an authenticated REST endpoint, or automatically from paid PBJ Form Builder submissions.
- Key-aware update manifests — customers with a valid key get update packages; everyone else keeps a fully working plugin but receives no downloads.
- Signed, expiring downloads — package URLs carry an HMAC token so they can’t be shared.
- Key delivery emails, per-key site activations, CSV export, a built-in User Guide and Feedback tab, and a bundled GPL client SDK to drop into the plugins you sell.

PBJ License Manager turns any WordPress site into a license server for plugins and themes you sell: issue keys, track per-key site activations, serve WordPress-native update manifests to valid keys, and sign download links so package URLs can’t be shared. A bad key or an unreachable server never breaks a customer’s plugin — it only means no update is offered. Here’s the release history.
Version 1.2.0 — how selling works, explained on every tab
- Getting-started checklist on the Keys tab: products registered, current-release package uploaded, email delivery configured, first key issued — each row shows done/to-do with a link to the right tab — plus a numbered “How selling works” walkthrough of the whole pipeline.
- Every tab explained. Keys, Products, Packages and Settings each gained a plain-English intro and numbered how-to steps for every form, field and button — including what Revoke really does (blocks updates, never breaks the customer’s site) and a proper warning on signing-secret regeneration.
- No functional changes.
Version 1.1.3 — the license server licenses itself
License Manager is product #7 in our own storefront, so it now eats its own cooking: a License section in Settings where you enter your key to receive updates, using the same bundled client SDK every other PBJ plugin uses (replacing its old self-hosted updater). On the license server’s own site, no key is needed — it detects it’s home.
Version 1.1.2 — client SDK v1.1.0
The distributable client SDK — the small GPL class plugin authors bundle into the plugins they sell — grew up: a self-contained License settings section (status banner + key field + Save via a shared handler), on-own-server detection (no key needed when the plugin runs on the license server itself), an upgrade-path status for major-version upgrades, and a status() helper. Integrating licensing into a sold plugin is now a two-liner.
Version 1.1.1 — download protection self-heals
Security hardening: the packages folder’s deny-all protection (.htaccess + index.php) now self-heals on plugin activation and before every signed download is served. Previously it was only written when the Packages tab stored an upload — so package zips that arrived any other way (site sync, FTP, manual copy) were publicly downloadable at a guessable URL until an admin opened the Packages tab.
Version 1.1.0
- Packages tab. Upload, store, and delete plugin zips per product in a deny-all protected uploads folder; “Make current” updates the manifest and latest version in one step.
- Download links in key emails. A new
{download_url}placeholder puts a signed link (72-hour default, configurable) to the current release of the purchased major version right in the key email. Feature updates still flow through WordPress updates only. - “Resend email” action on each key, regenerating a fresh download link.
- New email-link-lifetime setting; schema v2 migration upgrades default email templates in place; opt-in uninstall data delete now also removes stored package files.
Version 1.0.0
- Products registry — register each plugin or theme you sell, with a per-product site-activation limit and current major version.
- Four ways to issue keys: manually from the admin, via a PHP hook, via an authenticated REST endpoint, or automatically from paid PBJ Form Builder submissions.
- Key-aware update manifests — customers with a valid key get update packages; everyone else keeps a fully working plugin but receives no downloads.
- Signed, expiring downloads — package URLs carry an HMAC token so they can’t be shared.
- Key delivery emails, per-key site activations, CSV export, a built-in User Guide and Feedback tab, and a bundled GPL client SDK to drop into the plugins you sell.