Skip to content

@vovafeldman vovafeldman released this Jan 13, 2019 · 4 commits to master since this release

Important Bug Fixes

Fix for a Conflict with WordPress Websites Management Solutions

We optimized the logic that programmatically identifies the caller’s product main file to support environments that run services like ManageWP, which intervene in the theme/plugin’s inclusion mechanism. Previously, when a site was running a service such as ManageWP, the SDK would fetch ManageWP's agent plugin version, instead of the version of the actual plugin, which would cause conflicts with the updates mechanism. Due to that bug, if a site was running an agent plugin version that was newer than your upcoming version, the (previous) updates mechanism would "think" that a newer version of the product is already installed, and an update would, therefore, not be served via the WP Admin. On your next release email, we recommend adding the following paragraph:

ManageWP / InfiniteWP / MainWP User?
Due to a conflict found between those services and the SDK which we are using to serve updates, if you are eligible for automatic updates and you don't receive an update notice for the product in your WP Admin during the next 48 hours, you'll need to get it manually. Log in to, download the latest release, deactivate and uninstall the previous version, and then install and activate the newest release. This is a one time manual operation, and once you update to the latest release with the fixed SDK the updates will start working automatically again. Apologies for the inconvenience and we appreciate your patience.

Fix of The Multisite Networks Storage Model

We identified a bug in the SDK's storage model on multisite networks. After a bunch of testings, the fix for the bug should not break any backward compatibility. BUT, if your product is commonly used on multisite networks, kindly spend some extra efforts on testing the new SDK with your product. We would recommend releasing a beta version with the SDK update to a few multisite customers first, before releasing it to the rest of your customers.


Avoid conflicts between admin notices and the new Gutenberg editor by hiding all notices on Gutenberg-powered pages (thanks @alanef for the PR).

Reference: 8a87d38


Freemium Add-Ons

Disabled the SDK's software updates and custom readme.txt mechanism on the WP Admin's plugins and themes search pages to avoid conflicts with freemium add-ons. This change is particularly relevant when the site has a plugin/theme that has a freemium add-on with a free version on activated.

After Opt-in Redirection

The SDK now supports custom first-page/getting-started redirection after an opt-in/skip.

Caching & Updates

Due to the recent changes we made in the SDK's updates mechanism, which now supports custom readme.txt files for your paid versions, if there's no newer version than the one installed on a given site, our RESTful API endpoint returns the 404 HTTP error - not found. We spotted several environments that, for some reason, were not handling 404 errors gracefully, triggering the WordPress updates mechanism to keep checking for updates on almost every page view in the WP Admin. To tackle that, we enriched our caching layer to cache the result of requests that generated a 404 HTTP response in order to avoid slowing down the site and exhausting the API.

Reference: c725cf0

Keep-alive Mechanism

In previous releases, the SDK would send weekly updates only if there was at least one change in the tracked metrics. So, if the API didn't receive any requests from a plugin/theme for six months, it was impossible to determine whether the product is still active or if for example, the admin had deleted the product using FTP. As we strive to provide more accurate information on the sites that are using your WordPress plugins and themes, we have introduced a weekly keep-alive mechanism which will trigger an API request at least once a week, regardless of whether or not any updates occurred in the tracked metrics. Not only will this enable us to empower you with better analytics, but it also allows us to optimize different commercial and marketing mechanisms which your users and customers benefit from. For example, if a user has subscribed for your paid product and the purchased license is only activated on a site that didn't send a keep-alive for more than 30 days, then the renewal reminder notice will be different and require the customer to take action by choosing if they would like to go ahead with the renewal, or cancel. In case they don't take any action (e.g. ignore the email), the subscription will automatically be canceled one week before the renewal.

Admin Notices

The admin notices template was enriched to indicate the slug and the type of product it is associated with. For example, if your plugin's slug is awesome-product you can now target and customize all the notices that are added by the SDK using the following CSS rules:

.fs-notice.fs-slug-awesome-product.fs-type-plugin {
    // Custom CSS rules.

Reference: 516a9b2

Bug Fixes

  • Properly include static resources (JS, CSS) even when the plugins/themes folders are customized (i.e. the plugins are not in wp-content/plugins/).
  • Hide the Upgrade tab for freemium themes that only sell add-ons without having a paid plan of the theme.


  • A new translation of the SDK to Hungarian (thanks @Surbma!).
Assets 2

@vovafeldman vovafeldman released this Nov 28, 2018 · 47 commits to master since this release

Fixed a critical bug that was causing a PHP error when activating a product with SDK v2.2.1 while there was already a product with an older SDK running on the site.

Assets 2

@vovafeldman vovafeldman released this Nov 27, 2018 · 49 commits to master since this release


Please notice that if you have a freemium plugin on Freemius that has a paid version (free plugin + paid add-ons doesn't count), and like to utilize the full power of the new SDK, the integration snippet requires an update. Your updated code needs to look like that:

     * Plugin Name: My Very Awesome Plugin
     * .....

    if ( ! defined( 'ABSPATH' ) ) {

    if ( function_exists( 'my_fs' ) ) {
        my_fs()->set_basename( true, __FILE__ );
    } else {

        // ... Freemius integration snippet ...

        // ... my plugin's code ...


It has to be integrated into the plugin's main file. If you like to include it in a different file, make sure to replace the __FILE__ with the absolute path to the plugin's main file.

Premium Changelog and readme.txt

I’m pleased to share that you can now create a custom readme for your paid product version, and the new WordPress SDK will pick that data up from our API. This was on our list for quite a while and we have finally managed to prioritize it. These are great news for premium only product owners: now you can finally show your readme’s content in the WP Admin, including changelog changes.

Like with everything we do, we try to build the best mechanism to save you time and avoid duplicate work. After some brainstorming we decided to follow the same pattern of auto-generating the readme.txt files dynamically, using special Markdown-friendly syntax. If you have a premium-only product, you are all good. Just write your readme.txt as you would. If you have a freemium plugin or theme, you’ll only need to have a single readme.txt file (yep, that’s right!), it will include all of your data. For premium-only content wrap it as follows:

[//]: # fs_premium_only_begin
Whatever goes in here will be only in the premium readme
[//]: # fs_premium_only_end

For content that should appear only in the free version, wrap it as follows:

[//]: # fs_free_only_begin
Whatever goes in here will be only in the free readme
[//]: # fs_free_only_end

Content that will not be wrapped in neither of the above will simply appear both in the free and premium readme.txt files.

Please notice that it will only work for new deployments that include the new version of the SDK. You can learn about the version deployment mechanism in general, and the new premium readme.txt support here:

Custom Premium Slug / Folder-Name

Due to historical reasons, whether if you have a freemium product or a premium one, our deployment mechanism would automatically add a “-premium” suffix to the product’s folder name. This convention was essential for making the upgrade process of freemium products more user-friendly, so they could install and activate the paid product version without the need to deactivate and uninstall the free one. But this was far from optimal:

  1. Premium-only products had to have a redundant “-premium” suffix in their product’s folder name.
  2. Over the years, we learned that many freemium themes are using “-lite” as the suffix for their free slug. In those cases, the deployment mechanism would generating awkward theme folder names like “awesome-theme-lite-premium”.

You can now fully customize your premium version folder name! And also customize the “(Premium)” suffix that we add to the premium version product’s name. You can do both in the SDK INTEGRATION section in the dashboard:


If you already have customers that are using your paid version and would like to rename it, to avoid any PHP errors during the update process, you’ll have to do it incrementally by releasing 2 new versions:

  1. The 1st release should remain with the same default premium slug and will needs to include the newest SDK which comes with a special mechanism that supports folder renaming.
  2. Then, customize the premium slug and release the 2nd version (minor version). Our updates mechanism will make sure that the 2nd release will only be available for users that are already using the latest SDK, the one that supports renaming.

Terms of Service Update

We updated the URL of the “Terms of Service” link shown in the opt-in screen:

Instead of linking it to our general website’s terms, which leads to some confusion among admins, it is now linked to your product’s specific usage tracking “terms” page that detail all the information about the usage-tracking and collected data:<productID>/<productSlug>/

When running the premium version, the link label is now changed to “EULA” and its URL refers to the auto-generated EULA for the product:<productID>/<productSlug>/

Support Forum Link

The optional submenu item that links to the support forum now opens on a new page. This was a repeating request so we finally prioritized it 😉

Subscription Cancellation

From a consumer point of view, being billed for a subscription renewal unexpectedly is a real pain. Not only is it annoying, it requires the user to “work” to get their money back. Money that, in theory, shouldn’t have been taken from their account in the first place. Moreover, it drives negative emotions like anger and frustration and affecting the way a consumer perceives your business. From the business owner’s point of view, it means dealing with angry customers, which is mentally hard and not the fun part of the business. So you end up wasting time on “refund support”, that could be invested in the actual product or into helping customers that have real problems.

Therefore, we are constantly trying to come up with techniques to eliminate those unexpected charges, saving you, the seller, the time and the emotional hassle of dealing with those issues. As well as making the experience of customers that buy products through Freemius as pleasant as possible.

In the last year, we discovered two use-cases in which some customers assume that the following actions will also cancel all of their future billing:

  1. Deactivation and uninstallation of the product
  2. Deactivation of a license (without cancelling its subscription)

This assumption actually makes a lot of sense, as this is how things are working with most online services (SaaS). If you deactivate your account, the subscription will (usually) be canceled.

To avoid this confusion, when a user is about to deactivate your plugin/theme and it’s associated with an active subscription with a license that’s only been activated on that website, before showing the deactivation feedback form, the SDK will now prompt the customer and let them cancel the subscription, as part of the product deactivation sequence. This is how it looks like:

Similarly, when the user clicks on the license deactivation option from their Account page, if the subscription license has only been activated on that site, we ask the customer if they would also like to cancel the subscription, in addition to deactivating the license:

We are aware that it will most likely increase the subscriptions churn a bit, but it will save you time and hassle, as well as have a positive effect of your brand. If users will feel more confident when buying your products because you are using Freemius, that’s a win-win-win for everyone.

After Purchase Notice

The after in-dashboard purchase admin notice was enriched. Instead of immediately guiding the customer to download and install the premium code base, the logic now first checks if the premium version is already installed on the site. If it is, instead of guiding the user to download and install, simply suggest to activate it with a single click:

Translations – Dutch

The SDK was fully translated to Dutch! Huge thanks to Benny Vluggen, Mike van der Sluis, and Patrick Buntsma. The SDK is now translated to:

  • Spanish
  • Dutch
  • Italian
  • Japanese
  • Hebrew
  • Russian
  • Danish

If your native language is not English and you have a high-level of English, please join our translations efforts to help us maintain the current translations and translate it into new languages:

Freemium License Activation & Deactivation

Prior to this SDK release, when a user would upgrade a freemium plugin/theme directly within the WP Admin, our WordPress SDK would automatically take care of the license activation in the background. But, if the user would purchase the paid version from your site (outside the WP Admin) and would have already opted-in/skipped the opt-in in the free version before, they would have to activate the license by clicking on the “Activate License” link, either on their Account page (if they ever opted-in), or on the plugins/themes page. Basically, there was no clear path or instructions for the customer on how to activate the license, which usually generated a support ticket.

So now, after installing and activating a paid version of a freemium product, even if the user had already opted-in/skipped the opt-in on the free version before, the SDK will now automatically prompt the customer with the license activation screen.

Also, if a user deactivates their license they will also be redirected and prompted with the license key screen.When the product is freemium, they do have an option to just continue using the free version without activating a license.

WooCommerce Extensions Compatibility

WooCommerce has a custom plugin header to confirm compatibility with the latest versions:


Due to the execution order of the Freemius WordPress SDK and WP core’s caching, the headers data wasn’t getting retrieved, which resulted the following errors:


Bug Fixes

  • Fixed a UI layout bug of the in-dashboard contact, pricing, and checkout pages for iPhones.
  • Fixed a bug when an add-on’s license was activated before the parent plugin was opted-in/skipped.

Official release notes:

Assets 2

@vovafeldman vovafeldman released this Sep 2, 2018 · 172 commits to master since this release

Multisite Network

  • Since all plugin/theme updates are done on a network level, allow updating a plugin/theme in a network environment even if the license is activated on a single sub-site.
  • Fixed the Last updated value shown in the product's information when clicking the View details link.
  • Added several new subdomains to count as staging sites.
  • Fixed an edge case that was throwing the following PHP exception on a network admin:
    Fatal error: Uncaught TypeError: Argument 1 passed to Freemius::get_api_user_scope_by_user() must be an instance of FS_User
  • Also, added a new button the debugging page to force a data-type migration, for networks that face the issue mentioned above.

Usage Tracking

  • Fixed some of the event tracking related to the automatic install process when upgrading within the WP Admin (relevant for freemium products).

PHP7 Compatibility

  • Minor fix of clone usage that is no longer allowed in PHP7 (82cdedd)
Assets 2

@vovafeldman vovafeldman released this Jul 15, 2018 · 189 commits to master since this release

Translations 🇮🇹 🇬🇧 🇯🇵

Since the auto-generated premium product version by Freemius has a -premium suffix at the folder name, translations will not be loaded. Therefore, we've enriched the SDK for freemium plugins and themes that have a free version hosted on to seamlessly download and use the proper translations from the repo.

Add-Ons Visibility 🔌 🧙

You can now control which add-ons will be visible in the in-dashboard Add-Ons page in the WP Admin. You can either control it from the ADD-ONS section of the parent plugin:


Or directly in the SETTINGS page of an add-on:


Notable Bug Fixes 🐞

  • Major: Fixed the logic that fetches the new GDPR marketing flag in the premium version during license activation.
  • Hide the license activation and upgrade/purchase buttons from the Account page for add-ons that don't have paid plans.
  • The in-dashboard pricing and checkout pages are now properly rendered on iPhones (Safari iframe related CSS bug).
Assets 2

@vovafeldman vovafeldman released this Jun 1, 2018 · 224 commits to master since this release

While this is a minor release, some of its bug fixes are essential, and you should update all your plugins and themes to this new version. We resolved several bug fixes that were introduced after the GDPR release, as well as other fixes that are resolving previously pending issues.

  • Fixed the generated link for downloading the latest version of a premium add-on.
  • Fixed the generated link for downloading the latest premium plugin/theme version, when executed from the free version of the product.
  • Fixed a bug that was causing a PHP error when a user was opting in (or activating a license) of an add-on, before opting-in (or skipping) with the parent plugin/theme.
  • Fixed a PHP warning that was shown once after network-activating a plugin.
  • Fixed a redirects loop issue that was happening when activating a child theme that is running the latest version of the Freemius SDK through the parent theme.
  • Fixed an issue that was showing the JSON response of a license activation error instead of showing a user-friendly error message.
  • Fixed the expiration label on the Account page to show Expired {{ period }} ago instead of Expires in {{ period }} for expired licenses.
Assets 2

@vovafeldman vovafeldman released this May 25, 2018 · 240 commits to master since this release

GDPR Compliance

To help you comply with the GDPR, this version incorporates key updates to the SDK helping you to collect a proper marketing consent from EU users. Please update your plugin/theme with the newest SDK version asap. Like always, make sure that you test it thoroughly before the release.

A New Opt-In Message for EU Users

The default opt-in message was adjusted for EU users, making it clearer that they are also opting-in to potential marketing and offers via email. Once you upgrade to the new SDK, the marketing flag will be automatically set to ‘yes’ for all new users that opt-in.

Here’s the phrasing we use for new EU users:

Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with

IMPORTANT: If you’re overriding the default opt-in message with a custom one, please make sure to adjust it for EU users, making it clear that they are also opting-in to promotional emails. To help you identify EU users, we’ve introduced a helper method, which you can use in your opt-in message filter:


Marketing Consent During License Activation

The license activation is now a 2-step mechanism. Once a user types in a license key, the 1st thing that will happen is an AJAX call that will ping our API to check if the marketing flag has already been set for the owner of that license. If not, an opt-in radio button will appear and the user will have to indicate if they wish to opt-in to marketing or not:

Marketing Consent Admin Notice for Opted-in EU Users

A new friendly admin notice will be shown to EU users that already opted-in before and their marketing flag is not set (or set to null), to encourage them to opt-in to marketing emails.

  • To avoid a flood of admin notices, if the logged in EU admin opted-in to multiple plugins and themes on the same WordPress install, the SDK will only show a single collective message for all the products and the decision taken by the user will affect their marketing flag for all those products.
  • If the admin chooses to dismiss the message it will reappear every 30-days until a decision is taken (yes or no), or if the marketing flag will be updated via one of the other mechanisms.

IMPORTANT: The admin notice consent collection is off by default since we didn’t want to force you to use it. To activate it, add the following filter handler right after your integration snippet:

    my_freemius()->add_filter( 'handle_gdpr_admin_notice', '__return_true');

We’ve created a gist to help you customize this GDPR message:

my_freemius()->override_i18n( array(
    // Single product GDPR opt-in.
    'thank-you-for-using-product-and-its-addons'  => 'Thank you so much for using %s and its add-ons!',
    'thank-you-for-using-product'                 => 'Thank you so much for using %s!',
    'already-opted-in-to-product-usage-tracking'  => "You've already opted-in to our usage-tracking, which helps us keep improving the %s.",
    // Multi-product GDPR opt-in.
    'thank-you-for-using-products'                => 'Thank you so much for using our products!',
    'already-opted-in-to-products-usage-tracking' => "You've already opted-in to our usage-tracking, which helps us keep improving them.",
    'product-and-its-addons'                      => '%s and its add-ons',
    // GDPR explanation.
    'due-to-gdpr-compliance-requirements'         => 'Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard ',
    'contact-for-updates'                         => "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:",
    // Opt-in action.
    'yes'                                         => 'Yes',
    'send-updates'                                => 'send me security & feature updates, educational content and offers.',
    // Opt-out action.
    'no'                                          => 'No',
    'do-not-send-updates'                         => 'do %sNOT%s send me security & feature updates, educational content and offers.',
) );


Official GDPR announcement:

Demo Mode

We've incorporated a special Demo Mode for those of you who spin off WP environments with your product to demo its paid features. This mode will hide the following pages:

  • The debugging page
  • The Account page
  • The pricing/upgrade page

To activate the demo mode all you need to do is add the following flag to the wp-config.php file in the demo environment:

define( 'WP_FS__DEMO_MODE', true );

Premium Products Update Fix

We received a report from one of our sellers that it's possible to update a premium product version without a valid license. Moreover, the automatic update installs the free product version and deactivates the premium one, which can cause an unexpected behavior. After investigating the issue, we've found out that this issue was happening when users were updating a premium plugin/theme in the WordPress main Updates page in the WP Admin.
To avoid that issue, when a user tries to check the bulk update box of a premium product without having a valid, non-expired license for that product, they will be prompted with the following dialog box:

Also, the checkbox will not be selected by default, so it's a good reminder to the customer that it's about time to renew their license if they want to get the update.

Localization / Translations

The SDK is now fully translated into English, Dutch, French, Italian, Spanish and Japanese. Special thanks to everyone who help us with the translation efforts! If you know any other languages besides English, please join our translation team:

Assets 2

@vovafeldman vovafeldman released this Apr 4, 2018 · 361 commits to master since this release

Today we’re excited to release version 2.0.1. The reason for the major version bump is that we spend about 4 of the last months on integrating the SDK with WordPress multisite networks. We had to make major design changes of the storage model to offer a seamless experience in multi-site environments.

Multisite Network-Level Integration

Just to clarify, the WordPress SDK was working fine with multi-sites before, but the UX wasn’t optimized. Your users had to opt-in or skip the activation for each site, and your customers had to activate their license key for every sub-site in the network. For instance, when a super-admin with a 20 sites network purchased a 25-site license for your product, they had to activate the license 20 times. Not very user-friendly :) Even frustrating.

With the new integration, super-admins can now opt-in/skip/activate-license on the network level, making the UX way better. I can confidently say that this is the best multisite network-level integration on the market today! We made an elegant and seamless UX, while also very flexible when needed (keeping agencies in mind).

The special integration will only work for network activated plugins.

Network Level Opt-In

When a user activates your plugin on a multisite network they will see the following opt-in screen:


There are 2 new elements:

  1. The “Apply on all sites in the network” checkbox.
  2. The “Delegate to Site Admins” action link.

You’re probably asking yourself “what is the site-admins delegation option?” So let’s start with that. One of the use-cases for running a multisite network is hosting (e.g. is actually the largest WordPress multisite network). Consider the following scenario where a hosting provider would like to activate an “essential” plugin across their entire network, but doesn’t want to make the decision regarding the usage-tracking or licensing for the hosted sites. Robert Abela, who is a new Freemius partner (plugin seller), started to sell WP Security Audit Log with Freemius and is an excellent example of that use-case. They offer a plugin for audit log tracking, which is quite an essential product for every website to have. So when a small hosting company wishes to offer Robert’s plugin to their entire network they can easily do that, while delegating the management of the plugin to the site admins, without taking any actions in their behalf.

Now that we’re clear on the delegation part, let’s explore the new checkbox. When the checkbox is selected, the action that the super-admin will take will affect all of the sites on the network (including new ones that will be created). In case the super-admin would like to take different actions for different subsites they can uncheck the box and easily choose which action to take, per site:


Network-Level License Activation

In a very similar manner, super-admins can activate a license across their entire network, delegate the license activation to site admins, or handpick which subsites to activate the license for:


Network-Level Management

Super admins that didn’t delegate the activation to the site admins will now have an Account page on the network Admin, allowing them to manage the plugin on the network-level without the need to open the Account for every subsite:


Additionally, the Account page will not be shown on the site level at all.

How to Activate The Multisite Network Integration?

To activate the network-level integration you’ll need to update to the new SDK, but also make a small adjustment to the integration code. Go to your SDK INTEGRATION page in the Freemius Dashboard, where you’ll notice a new checkbox which will activate the network integration:


Add-Ons Enhancements

If you’re selling freemium add-ons with a free version, the add-ons information dialog box now shows a new button to install the free add-on version:


A small but important addition is a new license activation button next to the installed add-ons on the Account page, allowing an easy way to activate a license:


Bug Fixes

  • The new SDK comes with a bunch of fixes related to the “__clone exception” when cloning environments (staging/production). The SDK is now bulletproof against filesystem changes (changes in folder names) and symlink changes.
  • Also, we add a recovery mechanism for cases when the user’s data disappears from the local storage. This is a major enhancement that should eliminate data corruption edge-cases.
  • All paths are now stored as relative paths and not absolute, making sure migrations between environments work smoothly without triggering any “file not found” exceptions.
  • Since shifting to SSLv3 we noticed that some outdated environments with old cURL and/or OpenSSL versions fail to properly handshake with our API server. Since it will take a while until all hosting providers will be ready for SSLv3 we added a fallback mechanism to HTTP for those outdated environments.
Assets 2

@vovafeldman vovafeldman released this Jan 17, 2018 · 791 commits to master since this release

If you are only using Freemius for analytics via Freemius Insights, please ignore this version.

If you are monetizing with Freemius and have enabled the affiliation form in our latest WordPress SDK (v1.2.3), unfortunately, it comes with a significant bug that will trigger an API request almost every pageview, which will most likely slow down the site. This version fixes that bug so please make sure to update.

Assets 2
You can’t perform that action at this time.