Changelog

Welcome to the changelog section of Freemius, here you'll find our weekly technical update notes. You can subscribe to all posts via Newsletter or follow us on Twitter to stay updated.

New Coupon Type for Migrated Customers and Other Coupon-Related Bug Fixes

At Freemius, we support migrations from platforms like EDD, WooCommerce, Envato, and more. To help you maximize the benefits of the Freemius platform—such as tax compliance and subscription recovery—we recommend encouraging your buyers to update their licenses through Freemius.

To make this easier, we’ve introduced a new coupon type called “Migrated Customers”. This option allows you to target customers with a migrated license who have never purchased your product through Freemius, providing an incentive while minimizing the risk of misuse.

This feature was inspired by feedback from our community of makers. Thank you for your valuable suggestions! If you have more feedback or ideas to help us enhance our platform, please share them on our feature board.

Other coupon related bug fixes

Exit intent popup bug fix

We identified an issue where the exit intent coupon modal would display even if the coupon configuration did not match the current pricing, currency, or billing cycle. This has now been resolved.

Issues with renewing migrated licenses

We also addressed several edge-case bugs related to renewing migrated licenses with coupons and applying renewal discounts to migrated subscriptions. The following improvements have been made:

  • The system now extends the license with the full coupon discount if the migrated subscription is inactive.
  • If the migrated subscription is active, it will be canceled with a prorated discount and the appropriate coupon discount.

Additionally, the UI will now display a detailed breakdown of coupon discounts to avoid any confusion.

If you want to migrate your product from any platform to Freemius, please get in touch with our support.

Developer Dashboard bug fixes

We identified a bug in the Developer Dashboard where the “Create new product” form wasn’t functioning properly when accessed from a bundle’s view.

This issue has been resolved.

Additionally, we noticed a conflict between the Help Scout beacon icon and toast messages, which has also been fixed.

API Documentation update and bug fix

We’ve added more endpoint documentation to our website, available here.

Please note that the documentation site is a “work in progress.” We’ll continue to publish updates as development progresses. The documentation follows the OpenAPI schema to ensure standardized usage.

Bug fixes & improvements

  • We identified a bug in the /products/{product_id}/tags/latest.json endpoint, where the returned downloadable URL was invalid. This issue has now been fixed.
  • The bundle endpoint /bundles/{bundle_id}/plugins.json now supports a DELETE request to remove a product’s association with a bundle. We will add the documentation soon.

Legal agreements update

We’ve introduced Terms & Conditions of Sale, a legal agreement for SaaS products, which is now part of the checkout experience.

If you’re using Freemius integration with your SaaS products, the Terms & Conditions of Sale page is available at the following link:

https://freemius.com/product/<productID>/<productSlug>/legal/terms-of-sale

The productID and productSlug can be found on the Settings page in the Developer Dashboard.


Additionally, we discovered that the affiliate email mistakenly linked to the EULA instead of the Affiliate Agreement. This has now been corrected. We thank our maker for reporting this issue.

Fixed UI bug in proration discount for migrated licenses

Freemius supports both proration discounts and migrations from various other platforms.

Freemius proration applying 100% first-time discount on a migrated license

Additionally, Freemius automatically offers a proration discount to your customers when they upgrade an existing license to renew through Freemius. This helps with transferring your subscription from the old platform to Freemius, where we handle taxes, disputes, and many other details.

Recently, we identified an edge case bug where the UI incorrectly displayed a proration discount for some migrated licenses that shouldn’t have received one. Although the final payment did not apply the discount, the UI caused confusion for both buyers and makers. We have now fixed this issue.

Exporting payment refund reason

Freemius allows you to issue full or partial refunds to your customers. When issuing a refund, you can also add a Refund reason for your team members to see.

Now, when exporting payments, if you select the “Refunds” filter from the UI, the exported CSV will include the refund reason.

This update is designed to help our makers perform custom analytics with all the necessary information.

Design refresh of the EULA page

We have updated the design of Freemius products’ EULA page to feature a modern, user-friendly appearance.

Example EULA page of a Freemius product

You can access the End User License Agreement (EULA) for your product at the following URL:

  • https://freemius.com/product/<productID>/<productSlug>/legal/eula/

Please replace <productID> and <slug> with the relevant values, which can be found under the “Settings” page of your product in the Developer Dashboard.

The EULA page is used during checkout, by affiliates, and in other related processes.

Enhanced Language Support and UI Updates for Freemius Checkout Translation

Following our release of Checkout Translation, we have made additional updates to the UI.

We now always display the language selector dropdown in the footer, with the default language set to ‘English.’ If you want to automatically select a supported language based on the buyer’s location, you can pass language: 'auto' to the JavaScript SDK.

const handler = new FS.Checkout({
  plugin_id: 'x',
  public_key: '...',
  language: 'auto',
});

Additionally,

  1. We have renamed the language labels to their native names (e.g., ‘Español’ instead of ‘Spanish’) to help users select the correct language.
  2. We have also added flag icons to better represent each language’s locale.
  3. The German translation has been updated to fix a few minor UI glitches.

Stay tuned for more product updates.

Various bug fixes

This week’s deployment includes the following bug fixes:

  • In the Developer Dashboard and our WordPress SDK, when changing a user’s email address (transferring assets), we noticed that whitelisted sites were not being transferred. This issue has been resolved.
  • We fixed an issue on the Analytics page of the Developer Dashboard where the filtering UI would not appear in certain cases.
  • The Customer Portal would incorrectly redirect when embedded and loaded in Safari. This has now been fixed.
  • We noticed a bug where team members with the ‘developer’ role could modify coupons but not coupon notes. This issue has now been resolved.

Freemius Checkout translations out of beta

Great news! The Freemius Checkout now fully supports the following languages out of the box.

  • Spanish
  • German
  • French
  • Italian
  • Dutch
Freemius Checkout in Italian

Loading the checkout page in a buyer’s native language significantly improves conversion rates. That’s why we’ve prioritized translating the Checkout into the most popular languages.

To display the Checkout in a specific language, you can use the language parameter when configuring the Checkout JavaScript SDK. For example:

const handler = new FS.Checkout({
  plugin_id: 'x',
  public_key: '...',
  language: 'de_DE',
});

The example above will load the Checkout in German. Alternatively, you can use the value 'auto', which automatically determines the buyer’s location and loads the Checkout in their supported language. For more information please see our documentation here.

New JavaScript SDK for Freemius Checkout – Calling for testers

We have released a new beta version of our JS SDK for our Checkout. This version aims to:

  1. Remove jQuery from the dependencies.
  2. Provide better Developer Experience (DX) through type documents.
  3. Provide both CDN and npm packages for any type of consumer.

We’ve also open-sourced it under the MIT license to accept contributions from our makers. You can find the repository here on GitHub along with the usage guide.

While we aim to replace the Legacy JS SDK soon, we would like to call for testers to help with this new system. Please read below to get started quickly.

Using the new JS SDK

Instead of https://checkout.freemius.com/checkout.min.js, please use the new CDN under https://checkout.freemius.com/js/v1/. Here’s a quick code example:

<select id="licenses">
    <option value="1" selected="selected">Single Site License</option>
    <option value="2">2-Site License</option>
    <option value="unlimited">Unlimited Sites License</option>
</select>
<button id="purchase">Buy Button</button>

<script
    type="text/javascript"
    src="https://checkout.freemius.com/js/v1/"
></script>

<script type="text/javascript">
    const handler = new FS.Checkout({
        plugin_id: '9885',
        plan_id: '16634',
        public_key: 'pk_ccca7be7fa43aec791448b43c6266',
        image: 'https://your-plugin-site.com/logo-100x100.png',
    });

    document.querySelector('#purchase').addEventListener('click', (e) => {
        handler.open({
            name: 'My Awesome Plugin',
            licenses: document.querySelector('#licenses').value,
            // You can consume the response for after purchase logic.
            purchaseCompleted: function (response) {
                // The logic here will be executed immediately after the purchase confirmation.
                // alert(response.user.email);
            },
            success: function (response) {
                // The logic here will be executed after the customer closes the checkout, after a successful purchase.
                // alert(response.user.email);
            },
        });

        e.preventDefault();
    });
</script>

The difference with the Legacy JS SDK is:

  1. We don’t need jQuery anymore. So you can remove it if you’re not using it for anything else.
  2. Instead of accessing the singleton handler from FS.Checkout.configure, we now create a new handler with new FS.Checkout and use the instance accordingly.

You are free to create any number of instances if you’re selling multiple products from the same page. Cart recovery will also work as soon as you’ve instantiated and will only target the product the instance is responsible for.

Easy migration from the Legacy JS SDK

To make it easy to migrate without changing much of your code, we have also developed a compatibility layer.

In your code, where you do

<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://checkout.freemius.com/checkout.min.js"></script>
  1. Remove the jQuery script tag if you aren’t using jQuery.
  2. Replace the checkout script with the new one.
<script src="https://checkout.freemius.com/js/v1/legacy/"></script>

Now all your existing code should work as-is.

const handler = FS.Checkout.configure({
    plugin_id: '1234',
    plan_id: '5678',
    public_key: 'pk_ccca7be7fa43aec791448b43c6266',
    image: 'https://your-plugin-site.com/logo-100x100.png',
});

document.querySelector('#purchase').addEventListener('click', (e) => {
    handler.open({
        name: 'My Awesome Plugin',
        licenses: document.querySelector('#licenses').value,
        // You can consume the response for after purchase logic.
        purchaseCompleted: function (response) {
            // The logic here will be executed immediately after the purchase confirmation.
            // alert(response.user.email);
        },
        success: function (response) {
            // The logic here will be executed after the customer closes the checkout, after a successful purchase.
            // alert(response.user.email);
        },
    });

    e.preventDefault();
});

In the future, we will replace the Legacy JS SDK with this compatibility layer to reduce the footprint.

Please note that if you’re getting started or willing to refactor your code a little bit, kindly consider using the regular pattern instead of the legacy singleton pattern.

Performance improvements

While working on the new JS SDK, we also looked into improving performance. Here are the results:

  1. The new JS SDK loads about 60% faster than the Legacy JS SDK – Your pricing page will load faster by 1 second on average.
  2. The Checkout app itself also loads 40% faster – Once users click the buy button the checkout will appear faster than before.

We hope you’ll help us test the new JS SDK so that we can get it out in the wild as soon as possible. If you have any questions, please don’t hesitate to write to our support.

Misc. Customer Portal bug fixes

In this week’s release, we have fixed the following couple of bugs we discovered in our Customer Portal.

Both of them are related to the contact form we show in the app.

  1. We discovered the contact form wrongly showed the developer’s email address instead of the store’s support address. We have fixed it.
  2. We also noticed a typo in a word. We have fixed it as well.

Misc Developer Dashboard bug fixes and improvements

This week’s release brings the following bug fixes and enhancements to the Developer Dashboard.

Mailchimp integration improvement

Following up on the Mailchimp integration improvement – When unlinking a connection, the connection will be deleted from our server if it is not used by any other products.

This helps clean up any leftover connection data that is not in use anymore.

Plan deletion bug fix

When deleting plans we will now show a notice if there are active licenses associated with the plan. If you want to deprecate some plan, we recommend hiding it instead of deleting it. We will come up with more follow-up updates to ease the deprecation of plans with active usage.

Right now, deleting a plan with active licenses can create issues for existing customers. Hence we have disabled this for the time being.

Composer integration

We added a notice in the “Deployment” page of WordPress products to use a proper semantic version to support composer integration.

Data export now available for Subscriptions

Following up on our data liberation project, we are glad to announce the immediate availability of subscription exports from the Developer Dashboard.

Previously we worked on improving the User Export and also introduced the Payment Export.

With this week’s release exporting Subscriptions is now possible. Go to the “Subscription” page under your Developer Dashboard and click the “Download” button to start.

We are not done with the data liberation project yet. Please stay tuned for more updates.

Load more