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.

Fixed bug in Developer Dashboard’s new product form

We noticed a bug where creating a new SaaS from the Developer Dashboard would incorrectly show the business model option, asking whether to create a Free plan.

Freemius Developer Dashboard New Product Form for SaaS

In this deployment, we removed the choice, since it was not intended.

Checkout Reskinning phase2 production rollout

Following up on last week’s announcement, today we are marking the checkout phase2 as production-ready.

Freemius Checkout Phase2 - Release Candidate

The deployment comes with a few improvements too.

  • We have optimized various UI and UX as it has gone through many QA tests.
  • We identified a bug where some strings were not translated and have fixed them.
  • The form focus and validation experience have also been improved.

Rollout Strategy

While the new checkout is production-ready, we have not yet made it the default. The old checkout will still show up unless you have specifically opted into the new system with checkout_style: 'phase2' JS parameter. For more information, please read our announcement post here.

Bug fixes for the old checkout

We noticed a bug in the old checkout where the form could not handle some errors in rare cases. We have deployed a fix for the same.

Checkout Reskinning: Preparing the phase2 version for production rollout

It has been a couple of weeks since we pushed updates to the new phase2 checkout and this week, we are starting to push it for production. Like before, we will do it gradually, without breaking any custom CSS you might be using. Please read below to learn more.

Freemius Checkout Phase2 - Release Candidate

Recap: Beta releases so far

We first released the phase2 checkout on May 20, 2024. Since then there have been a few iterations and improvements.

Today with a few more bug fixes we are finally marking the checkout as release-candidate and preparing for the production switch.

Gradual rollout

  • On August 4th, 2024 we will make the phase2 checkout the default in production. However, if you have a custom checkout CSS for the phase1 checkout but not for the phase2 checkout, we will keep on showing the phase1 checkout for you. Only when you clear the Custom CSS from the legacy section, the new Checkout will show up by default.
  • On August 18th, 2024 two weeks after the production rollout, we will enable it for everyone. However, you will still have the option of using checkout_style=legacy to force load the phase1 checkout.
  • On September 29th, 2024 we will completely remove the legacy phase1 checkout.

Until the rollout

  1. You can switch to the new checkout by using the configuration checkout_style=phase2 in the URL parameter or JS snippet. More on it later in.
  2. You now have two different CSS configurations, one for the existing checkout and one for the new phase2 checkout.

Custom CSS migration

Starting today, you will notice that your existing checkout CSS style (if any) has been moved to the “(Legacy) Custom Checkout CSS file” under the plans page of the Developer Dashboard. The first input field is now empty.

CSS migration guide for Freemius Checkout phase 2

To migrate your CSS for the new version, simply put the stylesheet URL in the first input field and you are good to go. Please read our documentation to learn about CSS customization.

Remember to clear out the (Legacy) Custom Checkout CSS file after you’ve migrated to have the new checkout show up by default.

Call for testers

We would be glad to get your help to test the new checkout out in the wild.

Testing out phase2 checkout from the Freemius Developer Dashboard

Kindly go to the plans page and toggle the new configuration to get URLs and JS snippets to load the new checkout.

Alternatively, you can just add checkout_style=phase2 or checkout_style: 'phase2' in the URL or JS snippet to see it live. Here are some live demos:

If you find any issues please get in touch with our support.

We will make another announcement in July when we believe the checkout is ready to go into production. Until then, please stay tuned.

Checkout phase2 improvements and bug fixes

We are bringing a few small enhancements and bug fixes to the phase2 checkout (beta).

  • Fixed a regression in the money-back UI appearing below the breakdown, even when the product does not have a refund policy.
  • Fixed boolean values coming from the JS SDK which were not being respected in some cases.
  • Fixed a small glitch in the license input UI on smaller devices.
  • We improved the form validation UX by not showing errors under a field that was not focused specifically by the user.
  • Fixed a typo in the license dropdown where it said “Unlimited Site” instead of “Unlimited Sites”.
  • We updated the Spanish translation from a professional translator.
  • We did some performance improvements.

We are also getting ready to rollout the new checkout in production. Please read our announcement post here.

Various bug fixes for the Developer Dashboard

  • Fixed some edge case bugs when navigating between products of the same store could lose the current context.
  • Fixed a regression in the Tax Refund form, for old payments. The “Yes – Refund” button stayed disabled in some cases even after filling out the form. We have fixed this issue.

SaaS related improvements and tweaks to our system

We are rolling out various SaaS-related improvements and tweaks to our Developer Dashboard and marketing automation system. Please find the details below.

Removed unrelated features from the Developer Dashboard

Our Developer Dashboard is heavily tuned for WordPress.org products (plugins, themes, add-ons, etc). It has many pages, such as Deployment, Integration, etc., that are only relevant to a WP product. It also shows several notices and pop-ups for the SDK integration.

All these features have no meaning for a SaaS product and can create confusion. So we have improved the system by scoping those features only for a WordPress product and keeping the SaaS interface clean.

Introduced the option to change a product’s type to SaaS

We introduced the option to create a SaaS product from the Developer Dashboard a while back. But we didn’t allow changing an existing product to SaaS yet. A few of our partners have already been using our platform to facilitate their SaaS products. We have been asking our partners to use the “Plugin” type for SaaS products while we manually adjusted the platform to their specific needs. This gave us enough time to learn the specific necessities for SaaS and improve our system accordingly.

Change product type to SaaS - Freemius Developer Dashboard

Now that we have rolled out many platform improvements, we are opening up the settings to change your product type to SaaS. Simply navigate to the Settings page of your product from the Developer Dashboard and you can change the type from there.

Improvements to our marketing automation

We have made some more improvements to our marketing automation system to use the right terminology and phrases when dealing with a SaaS product.

Better ordering of upgrade option in User Dashboard

From the User Dashboard, we offer a way for the buyers to upgrade their subscriptions. One would simply need to navigate to a subscription from the “Renewals & Billing” page.

Option to upgrade a subscription from the Freemius User Dashboard

Previously the list was showing different options ordered by the quota of the licenses. This resulted in items with heavy pricing showing up on the top of the list, which could discourage the buyer from exploring other cheaper options. This issue was reported to us by a partner.

Optimized ordering of different upgrade option under Freemius User Dashboard

To fix this, we are now ordering the items showing the cheapest plan and pricing first and then gradually moving towards more expensive options.

Various UI/UX enhancements for the Developer Dashboard

With this week’s deployment, we are bringing some small yet meaningful enhancements to the Developer Dashboard. Please read below.

Dismiss option under store dashboard page

We’ve been showing a small notice under the store page to mention the list of products the data is relevant for.

Button to dismiss the store dashboard page notice

This notice can become overwhelming for stores with many products, taking up much real estate. Our partners suggested that we introduce an option to remove the notice. In this update, we did just that. Now you can click the close icon to make the notice disappear and it will not appear again under the same browser.

Icons to clarify the source of different entities

We’ve been offering migration services to partners coming from different platforms like EDD, CodeCanyon, ThemeForest, etc. We not only offer the first-time migration of payments, subscriptions, licenses, etc, but we also do ongoing sync for incoming payments from the subscription of the previous platforms. We do this to give a seamless licensing experience to the buyers.

As an advantage, partners can see the existing subscriptions and associated payments in the Developer Dashboard. But we understand the list can become confusing when there is a mixture of Freemius-sourced entities and migrated entities.

Icons to indicate source of payments, subscription, licenses etc in Freemius Developer Dashboard

To solve this, we have introduced a new icon in the columns, which will indicate whether the entity came from Freemius or the old platform. Please note the icons will show up when there are any migrated entities to save real estate.

Other fixes

  • We fixed some alignment issues in different UIs.
  • We made improvements to the different icons we show throughout the app.

Beta Checkout Updates: Flexible discounts and more

We have pushed various updates to the beta checkout. Just like before, to try it out, use checkout_style=phase2 in the URL parameter or checkout_style: 'phase2' in the JavaScript integration. If you’ve missed the various updates to the phase2 beta checkout, you can find it here and here.

Flexible discounts parameters

We have three kinds of discounts we show in the checkout before the subtotal.

Different discounts in Freemius Checkout

  • Annual Discount – The difference between the monthly billing cycle price and the annual billing cycle price.
  • Multisite Discount – The difference between the single license/site price and the multi-license/site price.
  • Bundle Discount – The difference between the compounded price of a bundle’s children and the price of the bundle itself.

The reason we show all these discounts is to encourage the purchase of a higher billing cycle, licenses, or bundles.

But over the year we received feedback from our partners asking us to give the flexibility to determine which discounts are to be shown. There are cases where a huge discount can discourage a buyer. For example, if a seller is providing 100-site pricing, then it can often result in an undiscounted price of $10,000, whereas the amount to pay could be less than $500.

Big multi site discount

So in this update, we are not only giving the ability to turn off discounts through configuration but also remade our discounting system from the ground up, making it smarter. Please find below the three newly introduced configuration parameters and their different values.

Property Description Accepted values Default value
annual_discount Determines whether the annual discount will be shown in the checkout. true | false true
multisite_discount Determines whether the multi-site discount will be shown. When the value is auto, the discount will only be shown if the single license pricing difference does not exceed 10 times more than the current pricing.

For example, say you have single-license pricing at $10 and a 100 license price at $90. For this configuration, the difference is 10*100 - 90 = 910 which is more than 10 times the current price (9*100 = 900). So by default when auto is selected, the discount will turned off. Please note, that the discount turns off for all license quotas, not just the one where the difference is high.

true | false | 'auto' 'auto'
bundle_discount Determines whether the bundle discount will be shown. The bundle discount itself depends on the compound price of its children. By default with maximize, we try to take the compound price from the lowest billing cycle and license. But with the value of true, we take it from the closest billing cycle and licenses.

While introducing this parameter, we also deprecated the old maximize_discounts parameter. The old parameter will only be used if the bundle_discount parameter is not explicitly set.

true | false | 'maximize' 'maximize

Please do give the new discounting system a try. The new system is meant to be backward compatible. The only exception is that the multi-site discount can be turned off depending on the pricing. You can always set a hard value of true to enable it back.

Here are some examples and live demos you can check. Feel free to modify the URL parameters.

Other UI configuration parameters

We have also introduced three new UI parameters to give more flexibility.

always_show_renewals_amount (true | false, default false)

Always shown renewal amount in Freemius Checkout

When set to true, a small line mentioning the total renewal price per billing cycle will shown below the total. By default, it only shows up when there is a renewal discount involved. We introduced this option because it can help provide more context with different discounts already shown in the UI. For example, one can see that there is a 30% annual discount and wonder if the discount is only for the first payment. There could also be a coupon that is applicable for the first payment only. With a clear line mentioning the renewal amount, the confusion goes away.

show_inline_currency_selector (true | false, default true)

Freemius checkout - Inline currency selector

We recently introduced an inline currency selector in the total line. Now you can hide it if you want by setting the value to false. We gave this option, because in some cases, the seller may not want to show an UI to change currencies for various reasons.

refund_policy_position (below_form | below_breakdown | dynamic, default dynamic)

Dynamic refund policy badge position in Freemius Checkout

Many partners asked us to give the option to specify where to place the refund policy badge. For some partners, there were no reviews, so placing it below the breakdown instead of the form was the natural choice. For some products, the breakdown area can be slim (without discounts or upsells). So by placing the UI below the breakdown optimizes the real-estate.

We realized we cannot decide the best positioning because it depends. So we are giving full control over where you want to place the refund policy UI in the horizontal dual-column layout. Depending on your preference you can place it below the form or the breakdown. We recommend using the default value dynamic. Depending on the width and height of the page the UI will be placed optimally either below the form or below the breakdown.

Please note when there are no reviews, the badge will always be positioned below the breakdown. Also this settings has no effect for mobile or single column view.

Other noteworthy updates

  • We have fixed and enhanced various responsiveness issues, layout, spacing, etc.
  • The VAT disclaimer line will now expand to the empty space.
  • We identified and fixed a glitch in the form validation mechanism in mobile devices.

Kickstart LiteSDK Project – Two new endpoints to activate and deactivate licenses

We are super stoked to announce that we have kickstarted the LiteSDK project. The LiteSDK is meant to be a lightweight alternative to our classic WordPress SDK. It will have minimal features, for example, license activation, software updates, etc. We aim to make the project as modular as possible, to gradually add features that can optionally be included in a WordPress product.

To ease the communication layer of the LiteSDK, we have introduced two new endpoints in our API.

License Activation endpoint

/v1/plugins/:plugin_id/activate.json (public)

Use this endpoint to activate a license on a new or existing site. It expects the following required parameters:

  • license_key – The license key
  • uid – A unique identifier of the site

UID: The generation of the UID must be done by the client. More on it later.

Optionally it also accepts the following parameters:

  • url – The URL of the site
  • title – The title of the site
  • version – The version of the WordPress plugin/theme.
  • install_id – The ID of an existing install/site (must belong to the same user and must have the same UID when it was created).

On a POST request, with the above parameters the endpoint can

  • Create an Install and/or activate the license on the existing install.
  • Create a user if the license does not have a user already (ghosted licenses that partners can create from the Developer Dashboard).
    • In such case, the endpoint will expect first_name, last_name and user_email parameters.
  • If the install already had an activation of the plugin for a different license, it will be deactivated.

Upon success, it returns the id, public_key and secret_key of the user and the install entities.

License deactivation endpoint

/v1/plugins/:plugin_id/deactivate.json (public)

Use this endpoint to deactivate the previously activated licenses on an installation. It expects the following required parameters:

  • uid – The same UID used when activating the license
  • install_id – The ID of the install from where you want to deactivate the license
  • license_key – The key of the license you want to deactivate

On a POST request, the endpoint will deactivate the license from the install entity. It will return the properties of the install entity on success.

Usage POC

We have created a POC (Proof-of-Concept) of a WordPress project demonstrating the new endpoints. This POC is still under heavy development and we are yet to write documentation. But if you want to take a look, you can visit our GitHub project.

The project has the following features at the moment:

  • Provides abstraction for the API communication.
  • Generation and storage of the uid parameter.
  • Storing license activation status and providing methods to check for updates, sync license status with the server etc.

Call for Testers

Over time, we aim to turn it into a proper LiteSDK that can be used in production. At this stage, please help us identify more use cases by trying out the POC in your projects. We are always listening to understand how we can make our products better. If you need help trying out the POC, please get in touch with our support. You can also “watch” the project under GitHub to subscribe to updates.

Beta Checkout Updates: Enhancements and Bug Fixes

We are rolling out several enhancements and bug fixes for our beta checkout (internally code named as phase2). If you’ve missed the changelog/announcement post, you can find it here.

To give it a try, simply add checkout_style=phase2 in the URL parameter or checkout_style: 'phase2' in the JavaScript integration.

Now let’s see what are the new changes.

Fixed Coupons UI when changing between billing cycles and licenses

From the Freemius Developers Dashboard, you can create coupons with several configurations. For example, you can generate a coupon applicable only for a particular billing cycle or a specific number of licenses.

Previously while such coupons were active, changing the billing cycle or the licenses would not invalidate the coupon UI, keeping the old code in place.

Fixed coupons UI in Freemius Checkout

We have fixed this UI regression. Now the coupon code line will disappear if the coupon is not applicable anymore. Instead, the user will have the option to re-enter a new coupon code. Changing the billing cycle or licenses back to the original value will show the applicable coupon again.

Fixed the upsell price difference calculation logic

Previously we calculated the price difference in license and billing cycle upsells based on the “subtotal” price. We realized it could be misleading because there can be coupon discounts, taxes, pro-rated discounts, etc.

Upsell price difference logic fix in Freemius Checkout

The upsell price difference will be calculated based on Today’s total amount now.

Specifying a review by providing an ID

With the new ability to feature a review right within the checkout, we’ve been auto-selecting a “featured” review with a 5-star rating. While this behavior will still be the default, you can now pass a new parameter review_id to specifically select the review you want to show.

Getting the ID of a review from Freemius Developer Dashboard

To know the ID of a review, kindly look at the ID column inside the Developer Dashboard.

Fixed Renewals Discount line

We were incorrectly showing a percentage value in the renewals discount line, even if a fixed value was configured.

Renewal discount line with fixed value in Freemius Checkout

We have now fixed it to follow the configuration you’ve set from the Developer Dashboard.

Trimming large reviews

We are now trimming large reviews to keep the UI consistent.

Trimming large review - Freemius Checkout

The review will be shown in full when it is hovered on.

Checkout Page mode

We’ve always had a page mode for the checkout, to support standalone checkout URLs.

For example you could open the checkout with https://checkout.freemius.com/mode/page/plugin/:plugin_id/[/plan/:plan_id/]... etc.

But it was never really “feature complete”.

Freemius checkout in page mode

In this iteration, we are finally making it complete. The mode/page is an optional and backward-compatible parameter. It is applicable only when the checkout is opened directly (not from the SDK or JS integration). A page mode of the checkout means

  1. The checkout will show up in two columns/horizontal layout by default. You can still use the parameters, for example, to force the layout to vertical.
  2. If present a back button will be shown (more on it later).
  3. The social proofing (money-back guarantee and reviews) will be shown by default. You can also disable them by using the appropriate parameter (as written here).
  4. The close and expand button with the header will not be shown.

To make it more user-friendly, we are showing the page view even when the checkout is opened with mode/dialog but not embedded in an iFrame. In time, you can even drop the mode/dialog or mode/page from the URL and it will load the correct mode automatically.

Cancel-URL for the checkout

We have a new feature for the page mode, called the “cancel URL”, which can take the user back in case they want to cancel the purchase.

Freemius checkout back button with the cancel_url parameter

  • You can link the checkout from your website and the “Cancel URL” will be automatically picked up from the Referer header (if present).
  • We have an explicit parameter cancel_url using which you can modify the URL.
  • The icon will be automatically generated based on the favicon of the website. But you can override it with the cancel_icon URL.
  • The link and the image will only work if they are https.
  • The hostname (subdomain + domain) of the cancel URL will be shown in the button.

Please note they will not show up for the regular JS-based integration where the checkout opens in a popup/modal.

Introduced a new option to always show the monthly/annual switch

While introducing the upsell concept, we intentionally removed the billing cycle UI and the ability to switch to lower billing cycles in the checkout. For example, when the checkout is loaded in the “Annual” billing cycle, the user cannot go to the “Monthly” billing cycle.

Always showing monthly switch - Freemius Checkout

But following partners feedback, we have introduced a parameter show_monthly_switch which will bring back the toggle as shown above. Set show_monthly_switch=true in the URL parameter or show_monthly_switch: true in the JS-integration.

Improved the Exit Intent UI

We noticed that when the checkout is loaded with JS-integration/buy button API, clicking the “No Thanks” button of the exit intent popup would not close the checkout.

Exit intent UI with promotional coupon - Freemius Checkout

We have fixed this.

Inline currency selector

This was a great feature suggestion from our partners.

Freemius checkout - Inline currency selector

If you support multiple currencies, then apart from showing the currency selector in the footer, we are also showing it right alongside the “Today’s total” line. This brings more visibility to it.

Other bug fixes/notable changes

  • Fixed the title parameter not being respected.
  • We are now appending the plan title by default in the cart header. This can of course be changed with the titleparamerer.
  • We noticed and fixed some UI regression in the Safari browser.
  • We have fixed various UI glitches/regressions.
  • We have decided to drop the subtitle support. You can modify the title parameter to tweak it to your liking.

Enhancements to the Users Export from the Developer Dashboard

As part of our data liberation project, we have significantly improved the experience while downloading users from the Developer Dashboard. To download users, go to the “Users” page under your Developer Dashboard and find the Download button on the top right of the screen.

Freemius Developer Dashboard - Users Download

Previously you could only download the first 10,000 users and it also took some time to process the download. We have significantly improved the download time, making it at least 10x faster. The download limit has also been increased to 250,000.

Different download types Freemius Developer Dashboard

You can click the “All Users” button to download all users in a CSV. If you want to download just the users visible in the UI, you can click the “Table users” button.

The download works with any filtering you have active. Please note, the download limit is capped to 250,000 for now. This should be sufficient for most product owners. We do have plans for the future to remove this limit. Meanwhile, you can always contact our support if you need more data to be downloaded.

Soon we will add download capabilities to other areas in the Developer Dashboard, for example, Sites, Payments, Subscriptions etc.

Improvements and bug fixes for the area charts

Not so long ago, we introduced general UX improvements to the analytics charts available in the Freemius Developer Dashboard. We noticed the “Area Chart” rendering was not up to the mark, especially if different categories had closer values. It also had a bug where the minimum value of the y-axis was wrongly calculated and there was no way to reset it.

Better area chart Freemius Developer Dashboard

In this deployment, we fixed the bug and improved the default rendering.

Customizing area chart for setting y-axis in Freemius Developer Dashboard

You will also get the option to set “Full Size” Y-Axis by clicking the “Customize” button.

New feature: US Sales tax refund capability against exemption certificate

We are glad to announce the immediate availability of a new feature our partners have requested. If you have buyers from the US with sales tax exemption, you can now issue a full tax refund to the buyer from your Developer Dashboard.

Accessing refund for a payment from Freemius Developer Dashboard

Go to the “Payments” page of the Developer Dashboard and click the Refund button next to the payment.

Refunding US Sales Tax against exemption certificate in Freemius Developer Dashboard

Select the “Tax refund of $..” option and provide a valid Tax exemption certificate number. Please ask your buyer to give this number to you. Then click the “Yes – Refund” button after accepting the disclaimer and you will be all set.

Like VAT refunds, two fresh invoices will be created, one as a full refund for the original transaction and another without the tax, containing the tax certificate number. Similarly, if the payment is associated with a subscription, the subscription will be automatically adjusted not to charge sales tax for future renewals.

Further improvements to the PayPal error UI in the checkout

Continuing our work from the last deployment, we’ve further improved some of the error UI shown in the checkout for PayPal, especially when the checkout is loaded from the SDK.

General PayPal error UI

Freemius checkout error UI with general PayPal issue

For every other PayPal-related error, we are now including a “retry link” in the message, so that the user can quickly retry without manually refreshing the page.

When the initial payment fails

Freemius Checkout - PayPal initial payment issue

This can happen for a PayPal account with insufficient balance or credit source. Apart from the inline link in the error UI, the primary button will also reload the checkout so the user can retry with a different PayPal account or a card.

When the billing agreement was already created

Freemius Checkout - PayPal billing agreement issue

In some rare edge cases, it can happen that the billing agreement was already created in PayPal, yet it failed to process the payment. Since we know retrying with the same PayPal billing agreement would not work, we now show a clear message, and the buttons would reload the checkout so that the user can try again with a different payment method.

Please note that these improvements were rolled out to the beta or the phase2 version of the checkout. The behavior of the current checkout has not changed from the last deployment, apart from the improved error messages.

Load more