It has been a busy few months for Kernl. Lots of great work has gone into the WordPress load testing feature work as well as a few structural changes to increase reliability.
Cache moved to Redis – For as long as Kernl has existed our cache backend was powered by Memcached. We have now finished migrating to Redis hosted at Compose.io.
AngularJS Upgrade to 1.7.5 – Fairly straight-forward upgrade to Angular 1.7.5. We wanted to take advantage of performance improvements and few bug fixes.
WordPress Load Testing – Over the past few months we’ve been cooking up something new. Imagine if you could easily test performance changes to you or your client’s WordPress installation? Or be able to tell your client with confidence how many customers at a time their site can support (and what their experience will be like!). What if you could do all this without writing a single line of code or spinning up your own testing infrastructure? We’re ready to start beta testing so send an email to email@example.com if you would like to be a part of it.
It was great month for Kernl! We didn’t do much in the way of user-facing features, but we did accomplish a lot of great infrastructure work.
Features, Bugs, & Infrastructure
Analytics Domain Search Speed Improvements – Prior to this work is could take up to 5 seconds to filter through the list of domains in Kernl Analytics. You can now search with sub-second response times due to a well placed index in Postgres.
Daily Aggregates Cleanup – This task encompassed cleaning up the millions of rows of aggregate data that Kernl was hanging on to. We weren’t in jeopardy of running out of space, but a table of 300K rows is faster to query than a table of 20M rows.
Analytics Domain List Clickable URLs – A customer suggested that the urls in the domain list should be clickable, so now they are!
Marketing Site Scaled Images – Kernl now serves properly scaled images for the marketing site.
GZIP Compression – All /static routes now serve resources using GZIP compression.
MongoDB Upgrade – We’re now on Mongo 3.4 and the database is hosted in AWS via Compose.io
Node.js Upgrade – Kernl now runs on Node.js 8.11.4. This upgrade addresses some security issues and bug fixes.
Happy (almost) August everyone! This month with Kernl was focused on fixing some technical debt and adding a few features surrounding analytics.
Features & Bug Fixes
Analytics Top Level Menu – Kernl Analytics now has a top-level menu item. Prior to this change you had to enter a plugin/theme page before you could access it.
Analytics Product & Date Selector – Coupled with the analytics top-level menu, you can now select which product you want to see analytics for directly in the page. You can also select the date if you have the “agency” plan or above.
Session Store Moved to Memcached – For most of Kernl’s life sessions have been stored in Mongo. Recently we moved to storing sessions in Memcached.
GitLab Integration Bug Fix – The GitLab integration was broken for a few days after GitLab disabled their v3 API. This has been resolved.
The .kernlignore file had a few bugs related to processing it. These have been resolved.
Along with the session storage change we cleaned up a few collections in Mongo.
I hope everyone in the northern hemisphere is enjoying their summer and for those of you in the southern hemisphere, stay warm! It was a nice month for Kernl with lots of good structural changes and a few new features rolled out.
SendOwl Integration – If you use SendOwl to distribute your plugin or theme you can now validate license keys with Kernl. This means that every time a customer checks to see if an update is available Kernl will first validate their SendOwl license.
Analytics Aggregate Data – Kernl Analytics now uses aggregate data to populate charts. This means that charts load instantly versus taking a few seconds as they did before. This was a big change and enables us to do neat things in the future like calculating changes over time.
Analytics Domains – In addition to using aggregate data to populate charts Kernl Analytics now has improved domain list support. Data is properly paginated, populated via aggregates for speed, and searchable.
Version Number Improvements – Kernl now supports version numbers such as 10.2.2-alpha or 9.2.1-beta. Previously the alpha|beta tags at the end were not supported.
Download Graph Bug Fix – A customer reported that the download chart in the plugin/theme detail pages weren’t quite right. This bug has been fixed.
License Management – The license management page was occasionally showing duplicates. This bug has been fixed.
It’s been a great month for Kernl! Lots of new features, some bug fixes, and few updates to the license checking on the plugin and theme update checker files. Lets dive in!
Gumroad License Validation – You can now use Kernl to validate your Gumroad licenses! This can be enabled for plugins or themes by going to the product edit screen, clicking the “License Management” tab, and then selecting “Validate Gumroad License?” at the bottom.
Kernl Referral Program – Kernl has a referral program. For every 3 referrals you send us we’ll give you a free month. Customers signing up with your referral code get their first 3 months free.
Restrict Updates to a Maximum Version – If you use Kernl’s license management you can now restrict update availability to a maximum version. For example if the current version of your product was 1.5.0 and you gave the user a license for < 1.6.0, then they would receive updates all the way through 1.5.X. This is a great way to drive more sales of your product!
Plugin/Theme PHP Update Check Files – The license error display behavior of these files has been greatly improved. The error dismisses when it’s supposed to, only shows up on the updates and plugin|theme page, and the license error message can now be customized. It is highly recommended that you update. The file is also versioned now so knowing when to update in the future will be much easier.
Purchase Code Deprecation – Kernl’s old purchase code frontend interface has been hidden behind a feature flag. The goal is the have the old purchase code functionality completely removed by the end of July.
Copy Versions from Product to Product – To support special development styles, you can move versions of a product to another product. This is inherently dangerous and only toggled on for the person who requested it. If you think this might be useful please reach out to firstname.lastname@example.org.
You can now easily click to a customer’s page from the License Management page.
A bug was fixed where the customer filter would stay set even after you had navigated away from that page.
Numerous copy changes were made on the License Management page and on the marketing site.
Some feature flags were removed from features that have proved to be stable.
The main route for plugin update checks (also the highest traffic route on Kernl) was refactored to use async/awaitinstead of promise chains. This makes it much easier to maintain and improve.
Kernl WordPress license management now allows you to limit updates up to a specific version.
How it Works
Assuming that you already use Kernl’s license management, go to the License Management area of Kernl. Once there add or edit a license.
Now you can fill in the “Max Update Version” field. This field can simply be described as “the version of your product which requires a customer to buy a new license”. For example:
Customer A bought a license with “Max Update Version” set to 2.0.0. The product was at version 1.7.0 at the time of purchase. Over the next few months you release 1.8.0, 1.9.0, 1.9.1, 2.0.0, 2.0.1. Customer A only receives product update versions 1.8.0, 1.9.0, and 1.9.1.
Why should I use this?
Drive. More. Sales. This new feature allows you to be extremely granular about what updates a specific customer receives. We also made updates to plugin_update_check.php and theme_update_check.php that allow you to customize the invalid/expired license message. We strongly believe that this combination of better license expiration messages and limiting through specific update version can be instrumental in helping you drive more sales.
For most of Kernl’s life our best channel for adding new customers has been word-of-mouth referrals and now you can be rewarded for referring new customers!
How It Works
When you go to your Kernl profile you’ll see a new section called “Referrals”.
It briefly explains how the Kernl referral program works, gives you your referral link, tells you how many referrals you’ve made, and how many free months you’ve earned.
The rewards for the Kernl referral program are as follows:
For the referrer: Every 3 customers you refer to Kernl earn you one free month. No restrictions on plan or usage. There is a max of 24 referrals. If you somehow manage to bump in to this restriction, shoot us an email and we’ll work with you. 🙂
For the new customer: By using your referral code they earn 3 free months of Kernl (instead of the usual 30 day free trial).
That’s it! Kernl’s referral program is intentionally simple. Thanks to everyone who spreads the word about Kernl. The more customers we have the better we become.
Welcome to April! It was fairly light month for Kernl feature-wise as we’ve been spending more of our efforts on marketing and advertising. We did manage to get a few things done, so lets get in to it!
Features & Bug Fixes
Plugin Update Icons – You can now set the icon that shows up in the WordPress update dashboard! No more gray power outlet icon! To set it, go to your plugin -> edit -> meta and then upload an image.
Multi-Subscription Bug – It was possible (although hard) to get your account into a state where you had multiple Kernl subscriptions assigned to it. This has been resolved. If you notice this happening to you on your invoice, please reach out to email@example.com.
Upgrade to Node.js 8.10.0 – Kernl is now run on the latest LTS version of Node.js. Performance and security updates were part of the upgrade.
Envato License Check Bug – There were certain situations where the Envato license check functionality wasn’t working. This has been resolved.
Welcome to March everyone! Lots of great stuff happened with Kernl this month, so lets get into it.
New Marketing Site – The new marketing website for Kernl launched! For most of Kernl’s life the marketing page has been a single landing page optimized for only plugin and theme updates. Since inception Kernl has grown to include a lot more than just updates and the new marketing site reflects that.
PHP Version and Install Language Analytics – Kernl Analytics can now track what PHP version your customers have installed as well as the written language of the site. Knowing this information can help you make smart data-driven decisions about internationalization and which programming language features you can target.
Plugin & Theme Dashboard Views – Previously when you went to the “versions” page in Kernl you were greeted with just a list of versions for the plugin/theme. Now you can easily see downloads stats, licenses, versions, and Git deployments in one easy screen.
Let’s Encrypt SSL Certificates – Kernl switched over to using Let’s Encrypt SSL certificates.
Bugs Fixes & Other
The /latest-version endpoint now includes the version id.
Build emails were not displaying the correct repository. This has been resolved.
Digital Ocean has been doing scheduled hard reboots of servers to handle Meltdown/Spectre issues. We’ve had to carefully manage this process but it looks like we made it through mostly unscathed.
There is now a simple proof-of-concept realtime channel on the marketing home page that updates the download count. Eventually we hope to use realtime with feature flags and any other number of things.
This month wasn’t a big feature month for Kernl, but there were some smaller bug fixes and infrastructure updates that are helping us serve our customers better. In addition to that, we also put out a short survey. Thanks to everyone who responded!
Changes & Bug Fixes
We are now able to automatically manage your BitBucket deploy keys. No more manually adding them!
Fixed & removed some flaky integration tests for feature flags.
Updated the documentation to reflect the BitBucket deploy key change.
Added some instrumentation around managing repository deploy keys and webhooks.
Upgraded application servers to Node.js 8.6.
A new cookie signature was deployed this month to fix a bug with authentication. You likely needed to re-authenticate because of it.