PBJ License Manager Changelog (v1.3.0): Rebuilt Admin, Written in Plain English
Version 1.5.0 — releasing without a browser
Putting out an update used to mean signing in, uploading the zip on the Packages screen, and clicking “Send this one to buyers” — a person, in a browser, every single time. There is now a password-protected route that an authorised tool can use to do exactly those things.
- List what you sell and what packages are stored, upload a package, make one the current release, remove an old one, and read back what this site is really serving.
- The same rules as the screen: the filename is still forced to match the product and version, making something current still moves the file and the version number together, and deleting whatever is currently being sent is still refused.
- An upload can carry a checksum, and a file that arrives damaged is thrown away instead of published — a half-transferred zip going out as a release is worse than no release.
- Every change is recorded in a small audit trail you can read back.
- It uses the checkout password already on your Settings screen. If that has never been set, the whole route refuses — it fails closed, not open. It cannot read or change keys, buyers, or anything outside your uploaded files, and it runs no code.
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.3.0 — rebuilt admin, written in plain English
A quality-of-life release. Nothing about how licensing works changed — not one option, database table, endpoint or form handler. What changed is everything you look at.
- The menu now follows the job. One page with six tabs became a menu that opens on Start here and then goes in the order you actually work: 1. What you sell → 2. Upload the file → 3. Give out keys → Settings → Feedback.
- Start here is a real walkthrough. Eight sections: how the whole thing works, one per numbered step, what your buyer sees at their end, putting out a new version (including how to charge for a major upgrade), what to check when something goes wrong, and a developer section holding the SDK and REST reference.
- Every screen rewritten for a person, not a developer. The update manifest is now the update address, the signing secret is the download link lock, the API key is the checkout password, revoking is switching a key off, and a slug is a folder name. Renamed on screen only — nothing underneath moved.
- Warnings where they actually help. Yellow boxes on the four things that can bite you: type the version that is really in the zip, match the folder name exactly, do the two paid-upgrade steps in the right order, and remember that making a new download lock kills every link already sitting in a buyer’s inbox.
- A live checklist and a step trail. “Where you are right now” shows which of the four setup steps are done, each linking to the screen that fixes it; every numbered screen carries a trail back to Start here.
- One real fix. Uploading a file with the version box left empty used to do nothing at all — no file, no error, no explanation. It now tells you what is missing.
- Old links still work. Every pre-1.3.0 address redirects to its new screen, carrying your search, filter and page with it.
- Matching visual style with PBJ Forms & Products and PBJ CRM.
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.

Version 1.5.0 — releasing without a browser
Putting out an update used to mean signing in, uploading the zip on the Packages screen, and clicking “Send this one to buyers” — a person, in a browser, every single time. There is now a password-protected route that an authorised tool can use to do exactly those things.
- List what you sell and what packages are stored, upload a package, make one the current release, remove an old one, and read back what this site is really serving.
- The same rules as the screen: the filename is still forced to match the product and version, making something current still moves the file and the version number together, and deleting whatever is currently being sent is still refused.
- An upload can carry a checksum, and a file that arrives damaged is thrown away instead of published — a half-transferred zip going out as a release is worse than no release.
- Every change is recorded in a small audit trail you can read back.
- It uses the checkout password already on your Settings screen. If that has never been set, the whole route refuses — it fails closed, not open. It cannot read or change keys, buyers, or anything outside your uploaded files, and it runs no code.
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.3.0 — rebuilt admin, written in plain English
A quality-of-life release. Nothing about how licensing works changed — not one option, database table, endpoint or form handler. What changed is everything you look at.
- The menu now follows the job. One page with six tabs became a menu that opens on Start here and then goes in the order you actually work: 1. What you sell → 2. Upload the file → 3. Give out keys → Settings → Feedback.
- Start here is a real walkthrough. Eight sections: how the whole thing works, one per numbered step, what your buyer sees at their end, putting out a new version (including how to charge for a major upgrade), what to check when something goes wrong, and a developer section holding the SDK and REST reference.
- Every screen rewritten for a person, not a developer. The update manifest is now the update address, the signing secret is the download link lock, the API key is the checkout password, revoking is switching a key off, and a slug is a folder name. Renamed on screen only — nothing underneath moved.
- Warnings where they actually help. Yellow boxes on the four things that can bite you: type the version that is really in the zip, match the folder name exactly, do the two paid-upgrade steps in the right order, and remember that making a new download lock kills every link already sitting in a buyer’s inbox.
- A live checklist and a step trail. “Where you are right now” shows which of the four setup steps are done, each linking to the screen that fixes it; every numbered screen carries a trail back to Start here.
- One real fix. Uploading a file with the version box left empty used to do nothing at all — no file, no error, no explanation. It now tells you what is missing.
- Old links still work. Every pre-1.3.0 address redirects to its new screen, carrying your search, filter and page with it.
- Matching visual style with PBJ Forms & Products and PBJ CRM.
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.