Selling a WordPress plugin can get expensive and messy fast when your store needs subscriptions, downloads, license keys, renewals, and updates. FluentCart brings those pieces together inside WordPress without building a stack of separate commerce extensions.
We set this up in a real-world scenario, for Pine Digital, a brand that will be offering WordPress plugins. The goal was simple: create a real store that can sell plugins, manage subscriptions, and deliver licensed updates without overcomplicating the setup and breaking the bank
The person behind InfluenceWP (Ryan) is also the person behind Pine Digital. That will hopefully make things clear as we move along.
Key Takeaways
- FluentCart lets WordPress plugin sellers manage products, payments, subscriptions, downloads, and software licenses in one store.
- Plugin sellers can offer annual, monthly, or lifetime license variations with different site activation limits.
- FluentCart connects with Stripe for test and live payments, but both environments need separate webhook configurations.
- The FluentCart licensing SDK connects a WordPress plugin to the store so customers can activate licenses and receive updates.
- Test the complete purchase, download, activation, and update process before accepting real customer orders.

Why FluentCart Makes Sense for Plugin Sellers
For years, WooCommerce has been the obvious starting point for WordPress stores. The core plugin is free, and it can do a lot. The issue is what happens once you need to sell software.
A typical WooCommerce setup for a licensed plugin can involve WooCommerce itself, a subscriptions extension, a software licensing solution, and sometimes more extensions to fill gaps. It can work, but the cost and moving parts add up quickly.
FluentCart takes a different route. Products, payments, subscriptions, downloads, and product licensing live under one roof. That matters when you are selling a plugin and don’t want your own store to turn into another complicated WordPress project that needs constant attention.
We have been using FluentCart on another business for several months, and that experience is why we chose it for Pine Digital. It has been a good fit for selling digital products without piling on separate plugins for every basic store function.
When subscriptions and licensing are part of the plan, fewer connected pieces means fewer places to troubleshoot when something goes wrong.
Starting With a Secure, Simple Store Foundation
Pine Digital is still early. At the time of this setup, it was mostly a simple landing page with a bigger plan behind it. The idea is to bring several projects under one clean umbrella, make the offering easier to understand, and gradually add products that help WordPress users build faster, easier, and better.
We are using the Ollie theme and Ollie Pro with the WordPress block editor. We did not always love the block editor (Gutenberg). Coming from page builders, it felt unfamiliar and limiting at first. But after spending more time with it, the block editor started to make more sense.
Ollie Pro helps bring the experience closer to what many people expect from a page builder while still keeping the site in the block editor. The block editor is not perfect, but it is a setup we enjoy working with these days.
Before installing anything commerce-related, we added two-factor authentication. This is one of those things that should happen on day one, especially once a website has customer data, payments, orders, downloads, or anything else of consequence attached to it.
We used the official Two Factor plugin from the WordPress repository and followed our own Easier Two-Factor Authentication for WordPress guide to get it connected with Bitwarden. The setup is quick:
- Install and activate the Two Factor plugin.
- Open the WordPress user profile for the administrator account.
- Enable an authenticator app and scan the QR code with Bitwarden.
- Verify the code and save recovery codes somewhere secure.
Having a second way into the account matters. An authenticator app can fail, a phone can be lost, and recovery codes are there for exactly that reason.
Installing FluentCart and Creating Store Pages
The next step is installing both FluentCart and FluentCart Pro. Even though they appear as two plugins in the WordPress Plugins screen, we think of them as one commerce system.
Once FluentCart is active, it asks you to set up the core pages for the store. These include the shop page, cart, checkout, account area, and other pages FluentCart needs to run properly.
The setup process lets you create those pages one at a time. It would be nice to have a single button that creates every required page at once, but creating them individually only takes a moment.
At this stage, keep the store in test mode. Nothing should be live while you are still building products, connecting payment gateways, and checking checkout behavior.
Inside Store Setup, fill in the basics:
- Store name, company name, country, currency, and address
- Store logo and receipt details
- Number and currency formatting
- Weight and dimension units, if physical products are part of the plan
- Product page settings, including image zoom and variation display options
For Pine Digital, the store is selling digital products. Weight, dimensions, shipping, and inventory are not part of this initial setup, but those options are there if you need them later.
FluentCart also includes invoicing, packing slips, PDF templates, taxes, storage settings, roles and permissions, shipping settings, and integrations. We did not need to configure every option before launching the first digital product. The core goal for this guide (and video) was getting the product, licensing, subscriptions, and Stripe connection in place.
Setting Up Checkout Fields and Subscription Billing
Checkout fields can be frustrating in WordPress commerce setups where WooCommerce is involved, which is what we’ve used up until now, so it’s what we can speak to. With FluentCart, the fields are available in the dashboard without needing a code snippet or another plugin. FluentCart makes custom checkout field management super easy!
Subscription settings are also part of FluentCart Pro. You can choose the renewal billing gateway and decide whether to allow early payments. We disabled early payments because it was not something we planned to use.
The subscription options are flexible. You can sell recurring products on a daily, weekly, monthly, quarterly, half-yearly, or annual schedule. You can also add trials, setup fees, installment payments, and compare-at pricing where it fits your offer.
That flexibility matters because plugin stores do not all sell the same way. You might offer annual licenses, lifetime licenses, monthly plans, or a mix of all three.
Connecting Stripe in Test and Live Modes
Stripe is the payment gateway we used for the store. FluentCart’s Stripe Connect flow was quick. We clicked the connection button, signed in to Stripe, selected the correct company account, and authorized the connection.
The same connection needs to happen twice, once for live credentials and once for test credentials (test mode).
Test mode is where you want to spend your time first. It lets you walk through checkout, payment behavior, licensing, product delivery, and subscription handling without touching a real card or a real customer account.
After connecting Stripe, FluentCart provides a webhook URL and a direct path to the relevant Stripe webhook screen. Copy the test webhook URL, open Stripe in test mode, add the endpoint, and select the events FluentCart requires. Then repeat the process for the live environment.
The event selection matters. FluentCart lists the Stripe events it needs, and those events need to be checked in Stripe. One example is checkout.session.completed, but do not stop at one event. Compare the full event list in FluentCart with the Stripe endpoint configuration before going live.
You can also manage active payment methods through Stripe. For this store, we preferred to keep checkout simple and use credit and debit cards only. Extra options can be useful, but they can also confuse customers who are not familiar with them.
For example, some customers may see Link or another wallet option and wonder whether it belongs to your store. It is legitimate, but fewer payment choices can mean fewer questions when a straightforward card checkout is all you need.
Adding a Digital Plugin Product
With the store’s foundation in place, it was time to add the first product: Perfmatters Enhancer.
This is an add-on utility plugin that currently improves the administration side of Perfmatters code snippets and converts snippets from other code snippet plugins so they can be imported into Perfmatters.
Inside FluentCart, create a new product, choose simple variations, and mark it as a digital product. We used simple variations because the offer is based on site limits and license terms.
For the example store, we created annual options for one site, three sites, and five sites. We also created lifetime variations alongside them. FluentCart lets you create both subscription and one-time variations within the same product.
The dummy pricing (we’ll add real pricing) looked like this:
- One site for $1 per year, three sites for $2 per year, and five sites for $3 per year.
- One site for $3 lifetime, three sites for $6 lifetime, and five sites for $15 lifetime.
A subscription variation has recurring billing toggled on. A lifetime variation does not. You can also set a compare-at price if you want to show a discounted price, limit purchases per order, add product images, choose a default variation, and assign categories or brands.
Once the product is ready, upload the plugin ZIP file under Downloadable Assets. You can attach one file to every variation or use separate files for specific variations if your product requires that.
For a small store with a single plugin, local storage may be enough. We prefer using Amazon S3 for product files when possible. Serving downloads from external storage keeps repeated ZIP downloads off the web server.
Enabling FluentCart Product Licensing
Product licensing is an add-on inside FluentCart. Turn it on under Features and Add-ons, then remember to save the settings. If you forget the save button, the License Settings tab will not appear on the product screen. Ask us how we know.
Once licensing is active, open the product and go to License Settings. This is where the store-side part of the licensing system comes together.
For each licensed variation, set the activation limit. In this case, the one-site license gets one activation, the three-site license gets three, and the five-site license gets five.
You also set the current version number, license key prefix, downloadable file, and changelog. A version such as 1.0.0 tells the licensing system what release customers should receive.
The license prefix can be whatever makes sense for your product. We used a Pine Digital and Perfmatters Enhancer-style prefix (e.g., pdpe) so keys are recognizable when looking through orders or support requests.
The plugin-specific settings also include:
- A changelog entry for the current release
- A link to the public changelog page
- A banner URL for the WordPress plugin details screen
- An icon URL for the WordPress plugins table
- Required PHP and WordPress versions
These details help your product feel like a properly distributed WordPress plugin rather than a ZIP file with no update path or product information.
The most important thing to remember is that the version number is the update trigger. If you change 1.0.0 to 1.0.1, licensed customers can see that an update is available in their WordPress plugins table.
Do not bump the version number until the new ZIP file and changelog are ready. Otherwise, customers may see an update prompt before the actual updated plugin file is in place.
You can also configure upgrade paths. A customer might move from a one-site annual license to a three-site annual license or from annual billing to lifetime. FluentCart lets you set which variations are available as upgrades, whether the price should be prorated, and whether you want to give a discount.
Adding the Licensing SDK to the Plugin
The store can generate and manage licenses, but the plugin itself still needs to know how to communicate with FluentCart. That is where the FluentCart software licensing SDK comes in.
The FluentCart GitHub repository is a useful place to understand the project’s self-hosted WordPress approach. For plugin licensing, FluentCart provides an SDK that needs to be added to the plugin codebase.
This is the part that used to be out of reach for many people who are not developers. We are not going to claim to be traditional developers. We are still learning, and we respect the people who have spent years building that skill set.
But AI has changed what is possible for people who are willing to learn the standards, use version control, test their work, and take responsibility for what they ship. There is a big difference between asking AI to make a random plugin and putting guardrails around the process.
For this work, we used Cursor connected through SSH to a development environment. Not the live store. Not the live production site. The development environment.
The initial prompt (provided below) asked Cursor to:
- Add the FluentCart licensing SDK to the Perfmatters Enhancer plugin.
- Copy the SDK updater folder into the plugin.
- Update namespaces to match the plugin namespace.
- Load the licensing PHP file from the main plugin file.
- Register the plugin version, FluentCart product ID, and licensing details.
AI Prompt to Implement Product Licensing in FluentCart
Add the FluentCart software licensing SDK to my WordPress plugin.
Use this repository: https://github.com/fluent-cart/software-licensing-sdk.
Copy the `updater` folder into my plugin, update the SDK namespace to match
my plugin namespace, include `FluentLicensing.php` from the main plugin file,
register the licensing SDK with my plugin version, FluentCart product ID,
plugin basename, FluentCart store URL, purchase URL, settings key,
activation URL, and plugin title. Also enable update checks using
`show_check_update => true`.Then we used Plan mode and asked the AI to ask questions one at a time. That prompt is worth using because it slows things down in the right way. Instead of guessing, the AI asks for the product ID, store URL, purchase URL, activation path, settings key, account URL, and licensing behavior.
For the product ID, FluentCart displays the numeric ID in the product table and product settings. The purchase URL is the public product page URL. The activation URL is the admin page inside the plugin where customers paste and activate their license key.
Creating the Plugin License Screen
The licensing SDK needs a place inside the WordPress dashboard where the site owner can add a license key. We chose a Pine Digital top-level menu rather than giving every plugin its own top-level dashboard item.
That decision matters more as you release more plugins. A separate top-level menu for every plugin can clutter the WordPress admin area fast.
The AI helped plan a structure with one Pine Digital menu and subpages for each plugin. For Perfmatters Enhancer, that included a primary plugin page and a license page.
The license page includes the license key field, an activation button, a link back to the customer account area, and a purchase link for users who do not have a license yet.
We chose to use licensing for updates only. That means the plugin can continue functioning if a license expires or is not active, but the site does not receive new updates.
Some product sellers choose full feature gating, where the plugin stops working without a valid key. Others allow the software to run and restrict updates. That is a business decision, and FluentCart can support either path when the plugin code is set up for it.
Generating a New Plugin Distribution File
We asked Cursor to generate a fresh distribution ZIP for the existing 1.0.0 version, then uploaded that new ZIP file under Downloadable Assets in FluentCart.
When you release updates later, the process is the same:
- Update the plugin code and generate a new distribution ZIP.
- Upload the new ZIP file to the FluentCart product.
- Update the changelog in License Settings.
- Change the version number only when the ZIP and changelog are ready.
- Save the product settings.
At that point, FluentCart can tell customers there is an update available and deliver the updated ZIP file through the licensing system.
Testing the Purchase and License Activation
Testing is where the pieces come together. We made the one-site annual product free for the test purchase so we could complete checkout without needing a payment method.
After placing the order, FluentCart displayed the license key and download link in the account area. We downloaded the plugin ZIP, installed it on a separate WordPress test site, activated it, and verified that the Pine Digital admin menu appeared.
Then we opened the plugin license page, pasted the license key, and activated it.
The result showed a valid active license. Because the product was free and used an offline-style test purchase, the account behavior did not fully reflect a real paid Stripe subscription. That is expected. A paid test purchase through Stripe is the next check before going live.
The customer account area is where customers can see their orders, downloads, subscriptions, and license information. The license page inside the plugin links back to that account area, which is helpful when a customer needs to manage a subscription or retrieve a key.
FluentCart also displays active licenses in the product licensing section. You can review activations, limits, versions, and related product data from the store dashboard.
A More Practical Path to Selling Plugin Licenses
FluentCart gives WordPress product creators a practical way to sell digital products, recurring subscriptions, and licensed plugins from one WordPress site. The core store setup, Stripe connection, variations, downloadable files, changelogs, and license records are all handled in the same place.
The remaining piece is the plugin-side SDK integration. AI tools can make that work more accessible, but the process still needs a development environment, testing, clean version control, and care around every release.
If you are comparing options, review the current FluentCart pricing alongside the extensions your existing store would need. The price in the video reflected an early offer, so always check the current numbers before making a decision.
For us, the big takeaway is simple: selling a licensed WordPress plugin no longer requires a pile of separate commerce tools. With the right setup, you can build the store, connect licensing, test the product, and start distributing updates without making your own business harder to run.
Frequently Asked Questions About Selling Licensed WordPress Plugins With FluentCart
Can You Sell Licensed WordPress Plugins With FluentCart?
Yes, FluentCart supports digital products, subscriptions, downloadable plugin files, and product licensing inside WordPress. You can create annual or lifetime variations, set activation limits, distribute ZIP files, and manage license information from the store dashboard.
Does FluentCart Support Subscription and Lifetime Plugin Licenses?
FluentCart lets you create recurring subscription variations and one-time lifetime variations within the same product. Subscription options can include daily, weekly, monthly, quarterly, half-yearly, and annual billing schedules.
How Does FluentCart Deliver Plugin Updates?
The plugin needs the FluentCart software licensing SDK so it can communicate with the store. When you upload a new ZIP file, update the changelog, and increase the plugin version number, customers with valid licenses can receive an update notification in the WordPress plugins table.
Do You Need Stripe to Sell Plugins With FluentCart?
Stripe is one payment gateway that can be connected to FluentCart for plugin sales and subscriptions. Test and live Stripe connections use separate credentials and webhook configurations, so both environments need to be set up and tested before launch.
What Should You Test Before Selling a Licensed WordPress Plugin?
Test the full customer process on a separate WordPress site. Place a test purchase, download the plugin ZIP file, install it, activate the license key, confirm the activation limit, and check that the plugin can detect an available update.