Plugin Directory

Changeset 3466286


Ignore:
Timestamp:
02/21/2026 07:37:06 AM (3 weeks ago)
Author:
parthinian1
Message:

Update readme.txt - comprehensive feature documentation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • licenshield/trunk/readme.txt

    r3466156 r3466286  
    1 === LicenShield ===
     1=== LicenShield — Software License Manager ===
    22Contributors: parthinian1
    33Donate link: https://licenshield.com
    4 Tags: license, software license, license manager, license key, woocommerce
     4Tags: license, license key, license manager, software license, stripe
    55Requires at least: 6.2
    66Tested up to: 6.9
     
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1111
    12 Protect your WordPress plugins and themes with powerful software license management. Generate, validate, and manage license keys with ease.
     12Sell and protect your WordPress plugins, themes, desktop apps, and SaaS tools with professional license key management, Stripe payments, piracy detection, and multi-language SDKs.
    1313
    1414== Description ==
    1515
    16 **LicenShield** is a complete software license management solution for WordPress developers. Sell your plugins and themes with confidence using secure license key validation, activation limits, and Stripe payments.
    17 
    18 = Free Features =
    19 
    20 * **Unlimited Products & Licenses** - No artificial limits
    21 * **License Key Generation** - Create secure, unique license keys automatically or manually
    22 * **Activation Management** - Control how many sites can use each license
    23 * **Expiration Dates** - Set license validity periods
    24 * **Stripe Payments** - Accept one-time payments and auto-generate licenses
    25 * **REST API** - Integrate license validation into any WordPress plugin or theme
    26 * **Email Notifications** - Automatic emails for purchases
    27 * **Rate Limiting** - Protect your API from abuse
    28 * **Setup Wizard** - Get started in minutes
    29 
    30 = Use Cases =
    31 
    32 * Sell premium WordPress plugins with license protection
    33 * Manage theme licenses with activation limits
    34 * Protect any digital product with license validation
    35 
    36 = Developer Friendly =
    37 
    38 LicenShield provides a simple REST API for license validation:
    39 
    40 `POST https://yoursite.com/wp-json/ls/v1/validate
    41 {
    42     "license_key": "LS-XXXX-XXXX-XXXX-XXXX",
    43     "site_url": "https://customer-site.com"
    44 }`
     16**LicenShield** is a complete, self-hosted software license management system built for WordPress developers. Install it on your own WordPress site, connect your own Stripe account, and start selling and protecting your plugins, themes, desktop apps, CLI tools, or any other software — with zero monthly fees, zero transaction fees beyond Stripe's standard rate, and no third-party platform owning your data.
     17
     18Whether you are a solo developer selling your first plugin or an agency managing an entire portfolio of products, LicenShield gives you a professional licensing backend without the ongoing cost of a SaaS platform. Built in the United States. Designed to be the only licensing tool you will ever need.
     19
     20[Visit licenshield.com](https://licenshield.com) | [Documentation](https://licenshield.com/docs) | [API Reference](https://licenshield.com/docs/api) | [Pricing](https://licenshield.com/pricing)
     21
     22---
     23
     24= The Premier WordPress Licensing Suite =
     25
     26LicenShield handles the complete licensing lifecycle from first purchase through renewal, update delivery, and piracy protection. Your customers pay through Stripe, receive their license key instantly by email, install your software, and get automatic updates — all without you lifting a finger after the initial setup.
     27
     28> **Up and running in minutes.** The guided setup wizard walks through Stripe connection, first product creation, and API integration step by step. No developer required beyond adding a shortcode to a page.
     29
     30---
     31
     32= Free Features — Forever Free, No Artificial Limits =
     33
     34**License Key Management**
     35
     36* Unlimited products — sell as many plugins, themes, or software products as you want
     37* Unlimited licenses — generate as many keys as your business demands, on every plan including free
     38* Cryptographically secure license key generation in a clean `PREFIX-XXXX-XXXX-XXXX-XXXX` format
     39* Customizable license key prefix — brand your keys (e.g. `MYPLUGIN-XXXX`, `ACME-XXXX`)
     40* Per-license activation limits — control exactly how many sites each key can be used on
     41* Set activation limit to 0 for unlimited activations on enterprise or agency licenses
     42* Expiration dates — set fixed validity periods per license (annual, monthly, or lifetime)
     43* License status management — active, suspended, expired, or cancelled
     44* Manual license creation with full control over product, customer name, email, activation limit, and expiry
     45* Revoke individual site activations without affecting the rest of the license
     46* Full activation history per license — site URL, IP address, user agent, and activation timestamp
     47* Search and filter licenses by status, product, customer email, or key fragment
     48* Bulk license management from the admin list view
     49
     50**Staging and Development Environment Detection**
     51
     52Your customers should never burn an activation limit testing on a staging server. LicenShield automatically detects development and staging environments and skips counting them against the activation limit — no customer support ticket required.
     53
     54Detected automatically:
     55
     56* Localhost and loopback addresses (127.0.0.1, ::1, localhost)
     57* Local TLDs — `.local`, `.test`, `.localhost`, `.dev`, `.example`, `.invalid`
     58* Staging subdomains — `staging.`, `stage.`, `dev.`, `develop.`, `test.`, `sandbox.`, `uat.`, `qa.`
     59* Inline staging patterns anywhere in the URL — `.staging.`, `.stage.`, `.dev.`, `.test.`, `.sandbox.`
     60* Private and reserved IP ranges — 192.168.x.x, 10.x.x.x, 172.16-31.x.x
     61* WP Engine staging environments — `*.wpengine.com`
     62* Kinsta staging environments — `*.kinsta.cloud`
     63* Flywheel staging environments — `*.flywheelsites.com`
     64
     65**Stripe Payments**
     66
     67* Accept credit cards, Apple Pay, Google Pay, and all Stripe-supported payment methods
     68* Stripe Checkout hosted payment page — PCI compliant, no card data ever touches your server
     69* Automatic license key generation the moment a payment is confirmed via Stripe webhook
     70* Stripe webhook endpoint with HMAC signature verification (`checkout.session.completed`)
     71* Test mode and live mode switching from the admin settings panel
     72* Separate test and live API key storage — develop safely without risking real charges
     73* Configurable success and cancellation redirect URLs after checkout
     74* Admin email notification on every new purchase
     75
     76**Automatic Software Updates**
     77
     78* Customers see "Update Available" in their WordPress dashboard and click Update — exactly like any WordPress.org plugin
     79* Store version number, changelog notes, and download URL directly in each product record
     80* REST endpoint for update checks (`/ls/v1/update-check`) — WordPress queries this automatically
     81* Secure download endpoint (`/ls/v1/download`) validates the license before serving any file
     82* Path traversal protection and file type validation on all download requests
     83
     84**Analytics Dashboard**
     85
     86* Revenue this month with month-over-month growth percentage and up/down trend indicator
     87* Revenue last month and all-time totals
     88* Active license count — all time
     89* Licenses expiring in the next 30 days — catch renewals before they lapse
     90* Recent orders list — customer name, product, and amount
     91* Recently issued licenses
     92* Top-selling products by revenue
     93* Revenue and activation trend charts over selectable time periods
     94
     95**REST API**
     96
     97LicenShield exposes a clean REST API under `ls/v1` that your plugins, themes, scripts, and applications call to manage licenses in real time. All endpoints are rate limited to 10 failed attempts per 15-minute window per IP address to block brute-force attacks.
     98
     99* `POST /ls/v1/validate` — validate a license key, returns status, expiry date, activation count, and product details
     100* `POST /ls/v1/activate` — activate a license on a new site, respects limits and staging detection
     101* `POST /ls/v1/deactivate` — remove a site activation from a license
     102* `POST /ls/v1/check` — lightweight status check that does not require a site URL
     103* `POST /ls/v1/update-check` — check for available software updates, used by WordPress's built-in update system
     104* `GET /ls/v1/download` — securely serve a plugin or theme ZIP after validating the license
     105
     106All responses return JSON with a `success` boolean, a human-readable `message`, and relevant license data.
     107
     108**Shortcodes**
     109
     110Embed your entire purchasing flow on any WordPress page with three built-in shortcodes:
     111
     112* `[licenshield_buy_button product="your-slug" text="Buy Now"]` — renders a styled purchase button linked to Stripe Checkout for the specified product. Accepts numeric product ID or slug.
     113* `[licenshield_pricing_table products="1,2,3"]` — renders a complete pricing table for one or more products with name, price, billing cycle, and a customizable feature list per product.
     114* `[licenshield_license_success]` — renders the post-purchase confirmation page displaying the customer's license key after a completed Stripe payment.
     115
     116**Customer Email Notifications**
     117
     118* Branded purchase confirmation email sent immediately after payment with no delay
     119* Email includes the license key displayed prominently, product name, activation limit, expiry date, download button (if a URL is configured), and step-by-step activation instructions
     120* Configurable company name, support email address, and reply-to for all outgoing emails
     121* Admin notification email on every purchase so you never miss a sale
     122
     123**Setup, Onboarding and Usability**
     124
     125* Guided setup wizard covering Stripe connection, first product creation, and API integration — with auto-detection of completed steps and a visual progress sidebar
     126* Context-sensitive tooltips on every admin field across Dashboard, Licenses, Products, Orders, and Settings — hover any field to see an explanation
     127* First-use guided tours on each admin page — replay at any time via the Take Tour button
     128* Copy-to-clipboard buttons on webhook URLs, API endpoint URLs, and code snippets throughout the admin
     129* Suggestions page — submit and vote on feature ideas directly from your admin panel
     130
     131---
    45132
    46133= LicenShield Pro =
    47134
    48 Take your license business to the next level with Pro features:
    49 
    50 * **Subscription Billing** - Monthly and yearly recurring payments
    51 * **Discount Codes** - Create coupons for promotions and sales
    52 * **Slack Notifications** - Get instant alerts for sales and activations
    53 * **Piracy Detection** - Monitor and protect against unauthorized use
    54 * **Advanced Analytics** - Revenue charts, trends, and insights
    55 * **Webhook Integrations** - Connect to Zapier, CRMs, and more
    56 * **Priority Support** - Get help when you need it
    57 
    58 Visit [licenshield.com](https://licenshield.com/pricing) for Pro pricing and details.
    59 
    60 == Installation ==
    61 
    62 1. Upload the `licenshield` folder to the `/wp-content/plugins/` directory
    63 2. Activate the plugin through the 'Plugins' menu in WordPress
    64 3. Go to **LicenShield → Settings** to configure your options
    65 4. Create your first product under **LicenShield → Products**
    66 5. Start generating licenses under **LicenShield → Licenses**
    67 
    68 = Stripe Setup =
    69 
    70 1. Go to **LicenShield → Settings → Stripe**
    71 2. Enter your Stripe API keys (test or live mode)
    72 3. Configure your webhook endpoint in your Stripe dashboard
    73 4. Payments will automatically generate licenses
    74 
    75 == Frequently Asked Questions ==
    76 
    77 = How do I validate licenses in my plugin? =
    78 
    79 Use the REST API endpoint to validate licenses. Example PHP code:
    80 
    81 `$response = wp_remote_post('https://yoursite.com/wp-json/ls/v1/validate', [
     135Upgrade to [LicenShield Pro](https://licenshield.com/pricing) for subscription billing, piracy protection, real-time Slack alerts, outbound webhooks, expiration reminders, and multi-language SDKs. **All paid plans include a 30-day money-back guarantee — no questions asked.**
     136
     137Paid plans are billed annually. Upgrade at any time and pay only the prorated difference for the remainder of your year. Downgrade at renewal if your needs change.
     138
     139---
     140
     141**Subscription Billing — Starter, Pro and Agency**
     142
     143The fastest way to build predictable, recurring revenue from your plugins and software:
     144
     145* Accept monthly and yearly recurring payments through Stripe Subscriptions
     146* Stripe handles the entire subscription lifecycle — creation, renewal, failed payment retries, and cancellation
     147* License expiry date extended automatically on every successful renewal payment
     148* License suspended automatically when a subscription is cancelled or a payment permanently fails
     149* Customers can choose monthly or yearly depending on the billing options you configure per product
     150
     151**Discount Codes — Starter, Pro and Agency**
     152
     153* Create percent-off (e.g. SUMMER25 = 25% off) or fixed-amount discount codes
     154* Set per-code usage limits — e.g. valid for the first 100 customers only
     155* Set expiry dates on individual codes for time-limited promotions
     156* Restrict a code to specific products or leave it open for all products
     157* Real-time discount validation at checkout via the `/ls/v1/discount/validate` REST endpoint
     158* Full usage tracking in the admin panel — see redemption count and remaining uses at a glance
     159
     160**Slack Notifications — Starter, Pro and Agency**
     161
     162Get instant Slack messages for every business event that matters. No more checking dashboards throughout the day:
     163
     164* New sale — product name, customer email, and amount paid
     165* License activation — which key was activated and on which site URL
     166* Subscription renewal — when a recurring payment succeeds
     167* License expiry — configurable, off by default
     168* Piracy alert — fires with severity level and a direct link to the alert panel
     169* Individual toggle for each event type — enable only the notifications your team needs
     170* Test button in settings — verify your Slack webhook URL works before going live
     171
     172**Outbound Webhooks — Starter, Pro and Agency**
     173
     174Connect LicenShield to Zapier, Make, HubSpot, Salesforce, your own API, or any external service:
     175
     176Seven supported events:
     177
     178* `license.created` — a new license was issued after purchase
     179* `license.activated` — a license was activated on a site
     180* `license.deactivated` — an activation was removed from a site
     181* `license.renewed` — a subscription successfully renewed and the license was extended
     182* `license.expired` — a license reached its expiry date
     183* `license.suspended` — a license was suspended, manually or by piracy detection
     184* `order.completed` — a Stripe payment was successfully completed
     185
     186Every outgoing webhook POST includes an `X-LicenShield-Sig` header containing an HMAC-SHA256 signature of the request body using your webhook secret. Your receiving endpoint can verify this header to confirm the request is genuine and has not been tampered with.
     187
     188* Subscribe each endpoint to only the specific events it needs
     189* Auto-generated webhook secret if you leave the field blank
     190* Webhook delivery log for debugging and confirming successful deliveries
     191* Add multiple webhook endpoints — connect different URLs to different services simultaneously
     192
     193**Expiration Reminder Emails — Starter, Pro and Agency**
     194
     195* Automatically emails customers at 30 days, 14 days, and 7 days before their license expires
     196* Each email includes the license key, product name, expiry date, and a renewal link
     197* Deduplication logic prevents sending the same reminder twice to the same customer
     198* Daily background cron job automatically expires licenses past their expiry date and updates their status
     199
     200**Piracy Detection — Starter, Pro and Agency**
     201
     202LicenShield Pro monitors every API call in real time and runs three detection algorithms silently in the background. Alerts fire the moment suspicious activity is detected — giving you time to act before significant damage is done. Detects nulled software distribution, multi-domain key abuse, and brute-force validation attempts.
     203
     204Algorithm 1 — Activation Overflow (High Severity)
     205
     206Fires when a license key attempts to register on a new site after already reaching its activation limit. The clearest signal that a key is being shared between multiple users. Example: a single-site license suddenly appearing across three different production domains.
     207
     208Algorithm 2 — Domain Spread (Medium Severity)
     209
     210Fires when a single license key has been validated from an abnormally high number of distinct domains within a rolling 30-day window. The threshold is set dynamically to 3 times the activation limit with a minimum of 8 domains, preventing false positives on legitimate high-traffic or multi-site setups. Catches keys posted to forums or shared in Facebook groups and Discord servers.
     211
     212Algorithm 3 — IP Flood (High Severity)
     213
     214Fires when a license key hits the validation API from 10 or more unique IP addresses within a single hour. The clearest signal of automated key distribution — bots downloading nulled software using a shared key at scale.
     215
     216Each alert in the Piracy Alerts admin panel includes:
     217
     218* Severity badge — High or Medium
     219* Plain-English description of what triggered the alert
     220* The license key, product name, customer email, and the raw triggering data
     221* One-click action buttons — Mark Resolved, Dismiss, or Suspend License immediately
     222* Slack notification option so your team knows the moment an alert fires
     223* 7-day deduplication cooldown — the same alert type for the same license is suppressed to prevent flooding
     224
     225---
     226
     227**Multi-Language SDKs — Pro and Agency**
     228
     229LicenShield Pro and Agency include official SDKs that connect to your existing LicenShield installation. License any type of software from the same WordPress admin dashboard you already use — one backend for your entire product portfolio.
     230
     231* JavaScript SDK — validate licenses in Node.js services, Electron desktop apps, browser extensions, Chrome extensions, CLI tools, and web backends. Install via npm.
     232* Python SDK — protect Python scripts, automation tools, data pipelines, FastAPI and Django applications, and desktop apps. Install via pip.
     233* .NET SDK — integrate license validation into C# Windows apps, WPF and WinForms applications, .NET web services, and Visual Studio extensions. Available via NuGet.
     234* Go SDK — embed license checks in Go binaries, CLI utilities, microservices, and server-side tools. Install via go get.
     235* REST Client SDK — a universal reference client with complete code samples for any language or platform not listed above, including Ruby, Rust, Swift, PHP, shell scripts, and more.
     236
     237All SDKs include a 24-hour local validation cache and a 7-day offline grace period. Your customers' software continues working without an internet connection — no false "license invalid" errors on flights, in remote locations, or during temporary server outages.
     238
     239Use cases unlocked by the SDKs:
     240
     241* WordPress plugins and themes (also work without an SDK via the REST API directly)
     242* Chrome and browser extensions
     243* Windows desktop apps and WPF or WinForms applications
     244* Unity games and Unity editor tools
     245* Electron apps including VS Code extensions and Obsidian plugins
     246* Node.js CLI tools and npm packages
     247* Python data science tools, Jupyter notebooks, and automation scripts
     248* C#/.NET utilities and enterprise applications
     249* Go microservices, binary utilities, and DevOps tools
     250* SaaS backends and API-first products
     251
     252---
     253
     254= How It Works =
     255
     2561. Install — upload LicenShield to your WordPress site, activate it, and open the setup wizard
     2572. Connect Stripe — paste your Stripe API keys and copy the webhook URL into your Stripe dashboard
     2583. Create Products — add your plugin, theme, or software with a price, activation limit, billing cycle, version number, and download URL
     2594. Sell — embed a buy button or pricing table shortcode on any WordPress page
     2605. Automatic — Stripe processes the payment, LicenShield generates and emails the license key, and your customer is running immediately
     261
     262No complicated server setup. No monthly SaaS subscription. Your data stays on your server.
     263
     264---
     265
     266= REST API Quick Reference =
     267
     268Validate a license in your WordPress plugin:
     269
     270`$response = wp_remote_post( 'https://yoursite.com/wp-json/ls/v1/validate', [
    82271    'body' => [
    83272        'license_key' => $license_key,
    84         'site_url' => home_url()
    85     ]
    86 ]);`
    87 
    88 = Can I migrate from other license managers? =
    89 
    90 Yes, you can import licenses via CSV or create them manually in the dashboard.
    91 
    92 = Does it work with WooCommerce? =
    93 
    94 LicenShield works alongside WooCommerce but uses Stripe directly for payments. WooCommerce integration is planned for a future release.
    95 
    96 = How are license keys generated? =
    97 
    98 Keys use a secure format: `LS-XXXX-XXXX-XXXX-XXXX` with cryptographically random characters.
    99 
    100 = Can customers manage their own licenses? =
    101 
    102 Customers receive their license key by email after purchase. They can share the key with you to manage activations from the admin dashboard.
     273        'site_url'    => home_url(),
     274    ],
     275] );
     276$data = json_decode( wp_remote_retrieve_body( $response ) );
     277if ( $data->success ) {
     278    // License is valid — proceed
     279}`
     280
     281Activate on first use:
     282
     283`$response = wp_remote_post( 'https://yoursite.com/wp-json/ls/v1/activate', [
     284    'body' => [
     285        'license_key' => $license_key,
     286        'site_url'    => home_url(),
     287        'site_name'   => get_bloginfo( 'name' ),
     288    ],
     289] );`
     290
     291Check for software updates (used by the WordPress update system):
     292
     293`$response = wp_remote_post( 'https://yoursite.com/wp-json/ls/v1/update-check', [
     294    'body' => [
     295        'license_key'     => $license_key,
     296        'site_url'        => home_url(),
     297        'current_version' => MY_PLUGIN_VERSION,
     298        'plugin_slug'     => 'my-plugin/my-plugin.php',
     299    ],
     300] );`
     301
     302Full integration guides and SDK documentation are at [licenshield.com/docs](https://licenshield.com/docs).
     303
     304---
     305
     306== Installation ==
     307
     3081. Upload the `licenshield` folder to `/wp-content/plugins/` or install via the WordPress plugin uploader
     3092. Activate through the Plugins menu in WordPress
     3103. Go to **LicenShield → Setup Wizard** for a guided configuration walkthrough, or configure manually:
     3114. Go to **LicenShield → Settings → Stripe** — enter your Stripe API keys (test or live)
     3125. Copy the webhook URL shown and add it as a new endpoint in your Stripe Dashboard under Developers → Webhooks. Select `checkout.session.completed` for one-time purchases. Add `invoice.payment_succeeded` and `customer.subscription.deleted` if using Pro subscription billing.
     3136. Go to **LicenShield → Products → Add New** — create your first product with a name, slug, price, activation limit, billing cycle, and optional download URL
     3147. Add `[licenshield_buy_button product="your-product-slug"]` to any WordPress page
     3158. Create a success page with the `[licenshield_license_success]` shortcode and set its URL in **Settings → General → Success Redirect**
     3169. Run a test purchase in Stripe test mode, confirm the license key is generated and emailed, then switch to live mode
     317
     318== Frequently Asked Questions ==
     319
     320= Is the free version really unlimited? =
     321
     322Yes. The free version has no limits on the number of products or licenses you can create, no expiry date on the free plan, and no paywalls on core functionality. You only need a paid plan when you want features like subscription billing, piracy detection, Slack notifications, webhooks, expiration reminder emails, or multi-language SDKs.
     323
     324= What is the main reason to upgrade to Starter? =
     325
     326Subscription billing — it is the fastest way to build predictable, recurring revenue from your plugins. Instead of one-time sales, customers pay monthly or yearly and their license renews automatically through Stripe. Starter also adds discount codes, Slack notifications, webhooks, piracy detection, and automated expiration reminder emails.
     327
     328= How do customers receive their license key? =
     329
     330Immediately after a successful Stripe payment, LicenShield automatically sends a branded confirmation email containing the license key, product name, activation limit, expiry date if applicable, a download button if a download URL is configured, and step-by-step activation instructions. No manual work on your end.
     331
     332= Does LicenShield charge transaction fees? =
     333
     334No. LicenShield charges no platform fee or per-transaction fee of any kind. You pay your annual plan fee and Stripe's standard payment processing rate. Every dollar beyond that goes directly to you.
     335
     336= How does billing work for paid plans? =
     337
     338Paid plans are billed annually. You can upgrade at any time and pay only the prorated difference for the remaining portion of your billing year. If your needs change, you can downgrade at renewal.
     339
     340= Is there a money-back guarantee? =
     341
     342Yes. All paid plans include a 30-day money-back guarantee. If you are not satisfied for any reason within 30 days of purchase, contact support for a full refund — no questions asked.
     343
     344= What payment methods does Stripe support? =
     345
     346LicenShield's Stripe Checkout supports credit and debit cards, Apple Pay, Google Pay, and all other payment methods enabled in your Stripe account. Customers complete payment on a secure Stripe-hosted page.
     347
     348= What is staging detection and why does it matter? =
     349
     350When a customer develops or tests their site on a staging URL, LicenShield detects it automatically and does not count that activation against their limit. Customers can freely develop on staging and push to production without burning activations or contacting you for help. LicenShield detects over a dozen staging environments out of the box, including WP Engine, Kinsta, and Flywheel.
     351
     352= How does piracy detection work? =
     353
     354LicenShield Pro monitors every API call and silently runs three algorithms. An alert is created when: a license tries to activate on a new site after hitting its limit (catching key sharing), a license is validated from an abnormally high number of distinct domains in 30 days (catching publicly posted keys), or a license hits the API from 10 or more unique IPs in one hour (catching automated distribution). Each alert includes the triggering data and a one-click Suspend License button.
     355
     356= Do webhooks support request signature verification? =
     357
     358Yes. Every outgoing webhook POST includes an `X-LicenShield-Sig` header containing an HMAC-SHA256 signature of the request body, computed using your webhook secret key. Your receiving endpoint verifies this header to confirm the request came from your LicenShield installation and has not been modified in transit.
     359
     360= What are the SDKs and what do they actually do? =
     361
     362The SDKs are official client libraries for JavaScript, Python, .NET, and Go that call the same LicenShield REST API your WordPress plugins already use. They handle license validation, activation, a 24-hour local validation cache, and a 7-day offline grace period automatically. This lets you protect a Windows app, a Python tool, a Chrome extension, or a Node.js CLI from the same admin dashboard where you manage your WordPress plugin licenses — one platform for everything.
     363
     364= Can I use LicenShield for non-WordPress software? =
     365
     366Yes, with a Pro or Agency plan. The JavaScript, Python, .NET, Go, and REST Client SDKs let you protect any software — desktop apps, CLI tools, browser extensions, Electron apps, Unity editor tools, SaaS backends, and more — all managed from a single LicenShield WordPress installation.
     367
     368= Can I migrate licenses from another license manager? =
     369
     370You can create licenses manually with any custom details through the admin panel. Bulk CSV import is on the public roadmap — vote for it via the Suggestions page inside your LicenShield admin.
     371
     372= Does it work alongside WooCommerce? =
     373
     374Yes. LicenShield uses Stripe directly for payments and runs independently of WooCommerce. Both plugins can be active on the same site. Native WooCommerce integration is planned for a future release.
     375
     376= What happens to my data if I cancel a paid plan? =
     377
     378All your licenses, products, orders, customers, and settings remain intact in your WordPress database. You keep full access to all free features. Only the paid features become inactive until you renew.
     379
     380= Is my customer data private and secure? =
     381
     382LicenShield is 100% self-hosted. All license data, customer data, and order records live in your own WordPress database on your own server. Nothing is sent to external servers except Stripe for payment processing and your optionally configured Slack and webhook endpoints. You own your data completely.
     383
     384= Can I customize the license key format? =
     385
     386Yes. Set a custom prefix up to 10 characters in **Settings → General → License Key Prefix**. All new keys are then generated as `YOURPREFIX-XXXX-XXXX-XXXX-XXXX`. The key body is always cryptographically random regardless of prefix.
     387
     388= How do automatic plugin updates work for my customers? =
     389
     390Set a version number, changelog, and download URL in your product settings. LicenShield's update-check endpoint integrates with WordPress's built-in update system. When you upload a new version and increment the version number, customers with your plugin installed see a standard "Update Available" notice in their WordPress dashboard and can update with one click — exactly like a WordPress.org plugin.
    103391
    104392== Screenshots ==
    105393
    106 1. Dashboard overview showing license statistics
    107 2. License management with search and filtering
    108 3. Product configuration with activation limits
    109 4. Settings page with Stripe integration
    110 5. License activation in your protected plugin
    111 6. Customer email notification
     3941. Dashboard — real-time revenue stats, month-over-month growth trend, active license counts, licenses expiring soon, recent orders, and top products
     3952. License management — searchable list view with status badges, activation counts, expiry dates, and a per-license action menu
     3963. Product configuration — name, slug, price, billing cycle (monthly, yearly, or lifetime), activation limit, version number, changelog, and download URL
     3974. Stripe settings — test and live mode toggle, separate API key fields for each mode, and an auto-generated webhook URL with a one-click copy button
     3985. Piracy Detection alerts — severity badges, alert type descriptions, triggering data, and one-click Resolve, Dismiss, or Suspend License actions
     3996. Orders — full transaction history with customer name, product, amount paid, payment status, and a direct link to the associated license
    112400
    113401== Changelog ==
     
    115403= 1.7.14 =
    116404* Fix: Removed auto-install Pro feature — users install Pro manually per WordPress.org guidelines
    117 * Fix: Renamed all PHP prefixes from ls_ to licenshield_ for WordPress.org compliance
    118 * Fix: Renamed class prefixes from LS_ to LICENSHIELD_ for WordPress.org compliance
    119 * Fix: Download handler now correctly serves files from absolute server paths
     405* Fix: Renamed all PHP function prefixes from ls_ to licenshield_ for WordPress.org compliance
     406* Fix: Renamed all class name prefixes from LS_ to LICENSHIELD_ for WordPress.org compliance
     407* Fix: Download handler now correctly serves files using absolute server paths
    120408
    121409= 1.7.7 =
    122 * Fix: [ls_buy_button] now accepts product slug (e.g. product="licenshield-pro") in addition to numeric ID
     410* Fix: [licenshield_buy_button] shortcode now accepts a product slug in addition to a numeric product ID
    123411
    124412= 1.7.6 =
    125 * Fix: Pro tab now correctly shows the Pro settings panel (license status, Slack config) after Pro is activated, instead of the installer form
    126 * Fix: LS_Admin no longer double-initializes when LicenShield Pro is active
     413* Fix: Pro settings tab now correctly displays the Pro panel after Pro is activated instead of the installer form
     414* Fix: Admin class no longer double-initializes when LicenShield Pro is active
    127415
    128416= 1.7.3 =
    129 * Fix: Removed "expiration reminders" from feature list — not yet implemented
    130 * Fix: Corrected REST API namespace in FAQ example from licenshield/v1 to ls/v1
    131 * Fix: Removed inaccurate customer portal claim from FAQ
     417* Fix: Corrected REST API namespace in all documentation examples — ls/v1, not licenshield/v1
     418* Fix: Removed inaccurate customer portal reference from FAQ
    132419
    133420= 1.7.2 =
    134 * Fix: Resolved 3 PHPCS errors — unescaped $upgrade_url outputs in class-ls-upsell.php now use esc_url()
    135 * Fix: Resolved UnescapedDBParameter warnings in class-ls-tier.php — table names now passed via wpdb->prepare() with %i placeholder
    136 * Fix: Added phpcs:ignore with justification comments to unavoidable direct DB queries in class-ls-stripe.php and class-ls-api.php (webhook handlers and transactional inserts have no WP API equivalent)
    137 * Fix: Added file-level phpcs:disable in class-ls-analytics.php — all queries are real-time aggregations where caching would produce stale reports
     421* Fix: Resolved 3 PHPCS errors — unescaped $upgrade_url outputs in upsell class now use esc_url()
     422* Fix: Resolved UnescapedDBParameter warnings — table names now pass through wpdb->prepare() using the %i placeholder
     423* Fix: Added justified phpcs:ignore comments to unavoidable direct DB queries in webhook handlers and transactional inserts where WordPress has no equivalent API
    138424
    139425= 1.7.1 =
    140 * Fix: Dashboard revenue and license charts now render correctly (scripts were not enqueued)
    141 * Fix: Removed stale "LicenShield API (Optional)" section from readme — self-licensing was removed in 1.7.0
    142 * Fix: Removed orphan discount database table that had no corresponding UI or code
    143 * Fix: Removed duplicate /checkout/create REST endpoint (use /checkout instead)
    144 * Fix: Removed stale license_key_input tooltip referencing removed license tab
    145 * Improved: REST API endpoints now have inline comments explaining why __return_true is intentional
    146 * Improved: Get Pro button on dashboard now shows what Pro features include
     426* Fix: Dashboard revenue and license charts now render correctly — missing scripts added to enqueue
     427* Fix: Removed duplicate /checkout/create REST endpoint
     428* Fix: Removed stale tooltip referencing the removed license activation tab
     429* Improved: REST API endpoints now include inline justification comments for intentional __return_true permission callbacks
     430* Improved: Get Pro button on dashboard lists the features included in each Pro tier
    147431
    148432= 1.7.0 =
    149 * Redesign: Pro features now displayed as WPForms-style muted cards — clearly visible but not functional in the free version
    150 * Removed: Self-licensing system (LS_Self_License) — no longer gating any features behind a license key
    151 * Removed: License settings tab with key activation form
    152 * Removed: Upsell modal and all JavaScript gating
    153 * Added: Dedicated "Pro Features" settings tab showing all Pro capabilities with links to licenshield.com
    154 * Simplified: LS_Tier is now a pure display helper with no feature blocking
    155 * Free plan: Unlimited products and licenses — no artificial limits
     433* Redesign: Pro features now displayed as muted cards in the free plugin — clearly visible but not active
     434* Removed: Self-licensing system and the license key activation tab — no longer required
     435* Removed: Upsell modal and all JavaScript feature gating
     436* Added: Dedicated Pro Features settings tab with descriptions and links to licenshield.com
     437* Free plan: Unlimited products and licenses with zero artificial caps of any kind
    156438
    157439= 1.6.1 =
    158 * Fix: Removed subscription billing restriction — all billing cycles now available to all users
    159 * Fix: Added missing LS_Tier helper methods (format_limit, get_usage_percentage, can_activate)
    160 * Fix: Updated constant prefix to LICENSHIELD_ for WordPress.org compliance
    161 * Fix: Replaced locked UI elements with plain Pro feature callouts
    162 * Fix: Slack settings tab now links to licenshield.com/pricing instead of opening a modal
     440* Fix: Removed subscription billing restriction — all billing cycles available with Pro
     441* Fix: Added missing Tier helper methods including format_limit, get_usage_percentage, and can_activate
     442* Fix: Updated all constant prefixes to LICENSHIELD_ for WordPress.org compliance
     443* Fix: Replaced locked UI elements with plain Pro feature callout links
    163444
    164445= 1.5.1 =
    165 * Fixed: Version constant mismatch issue
    166 * Fixed: SQL injection vulnerabilities in analytics queries
    167 * Fixed: Path traversal security vulnerability in download endpoint
    168 * Improved: Rate limiting now enforced on all validation endpoints
    169 * Improved: Download endpoint security with file type validation
    170 * Improved: Added security headers to download responses
    171 * Security: Enhanced input validation and sanitization
     446* Security: Fixed SQL injection vulnerabilities in analytics queries
     447* Security: Fixed path traversal vulnerability in the download endpoint
     448* Security: Enhanced input sanitization and validation across all API endpoints
     449* Improved: IP-based rate limiting enforced on all validate, activate, and deactivate endpoints
     450* Improved: Download endpoint validates file type before serving any file
    172451
    173452= 1.4.3 =
    174 * New: Hover tooltips on all admin pages
    175 * New: Guided tour system for first-time users
    176 * Tooltips explain field labels, stats, table columns, and settings
    177 * Tours auto-start on first visit, can be replayed via "Take Tour" button
    178 * Dashboard, Licenses, Products, Orders, and Settings pages all supported
     453* New: Context-sensitive hover tooltips on every field, stat, and setting across all admin pages
     454* New: Guided tour system for first-time users with step-by-step walkthroughs on each page
     455* Tours auto-start on first visit and can be replayed at any time via the Take Tour button
    179456
    180457= 1.4.2 =
    181 * New: Setup Wizard for easy onboarding
    182 * Wizard guides through Stripe setup, product creation, and SDK integration
    183 * Auto-detection of completed setup steps
    184 * Progress tracking sidebar
    185 * Copy-to-clipboard for API URLs and code snippets
     458* New: Setup Wizard for streamlined onboarding
     459* Wizard guides through Stripe connection, first product creation, and REST API integration
     460* Auto-detection of completed steps and visual progress tracking sidebar
     461* Copy-to-clipboard for all API URLs and integration code snippets
    186462
    187463= 1.4.1 =
    188464* Added self-licensing capability
    189 * Improved license verification UI
    190 * Enhanced plan limits display
    191 * Security improvements
     465* Improved license verification UI and plan limits display
     466* Security hardening
    192467
    193468= 1.4.0 =
    194 * Stripe Payment Sheet integration
    195 * HTML email templates
    196 * Rate limiting for API endpoints
    197 * Contact form on website
     469* Stripe Payment Sheet checkout integration
     470* Branded HTML email templates for purchase confirmations
     471* IP-based rate limiting on all public API endpoints
    198472
    199473= 1.3.0 =
    200 * REST API for license validation
    201 * Webhook support
    202 * Improved dashboard UI
    203 
    204 = 1.2.0 =
    205 * Email notifications for purchases and expirations
    206 * Customer portal improvements
    207 * Bug fixes
    208 
    209 = 1.1.0 =
    210 * Stripe integration
    211 * Automatic license generation on purchase
    212 * Expiration date management
    213 
    214 = 1.0.0 =
    215 * Initial release
    216 * License key generation
    217 * Activation management
    218 * Basic dashboard
     474* REST API for license validation, activation, and deactivation
     475* Automatic license key generation on confirmed Stripe payment
     476* Admin dashboard with revenue statistics and license counts
     477
     478== Privacy Policy ==
     479
     480LicenShield stores license keys, customer email addresses, customer names, and activated site URLs in your WordPress database for the purpose of license validation and management. This data is not shared with any third party except Stripe for payment processing and your optionally configured Slack and webhook endpoints.
     481
     482For full details, visit [licenshield.com/privacy](https://licenshield.com/privacy).
     483
     484== External Services ==
     485
     486LicenShield connects to the following third-party service to provide payment functionality:
     487
     488= Stripe =
     489
     490LicenShield integrates with [Stripe](https://stripe.com) for payment processing. When a customer purchases a license through your site:
     491
     492* **What is sent:** Customer email address, purchase amount, product details, and payment information (card data is handled directly by Stripe — it is never stored on your server or passed through WordPress)
     493* **When it is sent:** During checkout when a customer initiates a purchase, and when Stripe sends webhook events to confirm order fulfillment
     494* **Why it is needed:** To process payments securely and automatically generate and deliver a license key upon successful payment
     495
     496Stripe is a PCI-compliant payment processor. All payment data is handled entirely by Stripe's servers. By using LicenShield with Stripe payments enabled, your customers are subject to [Stripe's Privacy Policy](https://stripe.com/privacy) and [Stripe's Terms of Service](https://stripe.com/legal).
     497
     498No other external service connections are made by the free plugin. Pro features that send data externally — Slack notifications and outbound webhooks — only transmit data to endpoints you explicitly configure in the plugin settings.
    219499
    220500== Upgrade Notice ==
    221501
    222 = 1.4.2 =
    223 New Setup Wizard for easy onboarding! Guides you through Stripe, products, and SDK integration step by step.
    224 
    225 = 1.4.1 =
    226 This version adds self-licensing capability and improved UI. Recommended for all users.
    227 
    228 == Privacy Policy ==
    229 
    230 LicenShield stores license keys, customer emails, and site URLs for license validation purposes. This data is stored in your WordPress database and is not shared with third parties except for payment processing via Stripe.
    231 
    232 For more information, visit [licenshield.com/privacy](https://licenshield.com/privacy).
    233 
    234 == External Services ==
    235 
    236 This plugin connects to third-party services to provide payment functionality:
    237 
    238 = Stripe =
    239 
    240 LicenShield integrates with [Stripe](https://stripe.com) for payment processing. When a customer purchases a license through your site:
    241 
    242 * **What is sent:** Customer email, purchase amount, product details, and payment card information (handled directly by Stripe, never stored locally)
    243 * **When it is sent:** During checkout when a customer initiates a purchase, and when processing webhooks for order fulfillment
    244 * **Why it is needed:** To process credit card payments and automatically generate license keys upon successful payment
    245 
    246 Stripe is a PCI-compliant payment processor. All payment data is handled securely by Stripe's servers.
    247 
    248 * [Stripe Terms of Service](https://stripe.com/legal)
    249 * [Stripe Privacy Policy](https://stripe.com/privacy)
    250 
    251 
     502= 1.7.14 =
     503WordPress.org compliance release. All PHP prefixes updated from ls_ to licenshield_ and all class prefixes from LS_ to LICENSHIELD_. Update recommended for all users.
Note: See TracChangeset for help on using the changeset viewer.