Changelog

New updates and improvements to Privato.

v1.7.1

License agreements

We've added a new little feature that allows you to require a license agreement to be accepted by customers before they purchase a license.

You can enable this feature from the "Settings" tab of your package. It can be found in the "Billing" section.

Once enabled, customers will be required to accept the license agreement (defined in the LICENSE file of your repository) before they can purchase a license. This is a great way to ensure your users understand what they are purchasing and the limits of their license.

v1.7.0

Public API endpoints

We've introduced a set of public API endpoints that make it easy to retrieve the README for your package and individual releases.

You can use these endpoints to display the README for your package on your own website, or to create a custom package overview page.

Consult the documentation for more information on how to use these new API endpoints.

v1.6.1

Better financial model

In preparation for better customer insights into purchases and billing, we've made some improvements to the financial model of Privato.

We've introduced a new "Transactions" page in the Privato panel that provides a clear overview of all transactions related to your packages, including new purchases and renewals.

This new page will show you the details of each transaction, including the customer, package, amount, and date.

This is just the first step in improving the financial model of Privato, and we have plans to introduce more features and insights in the future to help you better understand your revenue and customer behavior.

v1.6.0

Renewals

As the platform is new, we didn't spend too much time on the renewal flow before launch since it was likely going to be a year or so before customers needed to renew their licenses.

However with some of our customers migrating from other platforms and wanting to keep their existing customer base, we had to implement a renewal flow sooner than expected.

From today, customers with expiring licenses will receive an email notification on the day of their license expiration with a link to renew their license. The renewal process is simple and straightforward, allowing customers to quickly and easily renew their licenses without needing to go through the full checkout process again.

They will be taken to a slimmed down checkout page that uses their existing license information to preconfigure a Stripe checkout session.

If a customer has a bulk set of licenses, they will have the option to renew all of their licenses at once, decrease the number of licenses being renewed and even increase the number of licenses.

To go alongside these changes, we've also made some tweaks to the product page in the customer portal to improve the visibility of certain things.

v1.5.0

Webhooks

Users on the Growth and Scale plans can now configure webhooks inside of Privato.

Webhooks allow you to receive near real-time notifications about important events related to your packages, customers and licenses.

We'll save you the trouble of reading a long technical document right now, but you can find more information about how to use webhooks in our documentation here.

v1.4.1

Reorderable release channels

We've made a small but useful improvement to the checkout page.

You can now reorder your release channels from the "Release channels" tab which will determine the order they are displayed in on the checkout page.

v1.4.0

New pricing and panel tweaks

We're excited to announce some important updates in this release.

As we near the official launch of Privato, we've made some adjustments to our pricing structure to better align with the value we provide to package developers.

The new pricing plans are designed to be more competitive and offer greater flexibility for developers of all sizes.

Free plan

The free tier that we initially launched with in this public beta has been reworked to provide more value.

Instead of being restricted to manual license management, the free plan now includes all of the power that comes with the Stripe integration, including automatic license creation upon purchase, the customer portal, and more.

Usage-based pricing

To keep Privato sustainable in the long term, we've introduced usage-based pricing on all plans.

The majority of platforms similar to Privato use a percentage-based pricing model, essentially a revenue share. If you sell a package for $49 and the platform has a 15% fee, you lose $6.75 right off the top.

This isn't a huge amount for a single sale, but if you sell 20, 50, or even 100 licenses in a month, it can really start to add up.

  • 20 × $6.75 = $135.00
  • 50 × $6.75 = $337.50
  • 100 × $6.75 = $675.00

Instead of taking a percentage-based cut of your revenue, we've opted for a fixed fee per license sold. This means you can keep more of your hard-earned revenue while still benefiting from all of the features and conveniences that Privato provides.

At the time of writing, the new pricing plans have the following usage-based fees:

  • Launch: $1.50 per license sold
  • Growth: $0.75 per license sold
  • Scale: $0.50 per license sold

If you choose to upgrade to a paid plan to gain access to more features, we think it's only fair that you pay a smaller usage fee since you're already contributing to the sustainability of the platform.

Usage-fees are designed to be predictable and affordable, accounting for the costs associated with running the platform now and in the future as we continue to grow and improve Privato.

Minor panel tweaks

The new pricing plans are the main focus of this update, but we've also made a few tweaks to the app side of things.

Custom domain UI improvements

The old custom domain UI was a bit clunky and wasn't very intuitive. We've rebuilt this to make it clearer what the process is for setting up a custom domain and to provide better feedback on the status of your domain.

Dashboard analytics

We've organized the analytics on the dashboard into a better layout so you can get a clear overview of how things are going at a glance.

Subscription management

You can now manage your subscription directly from Privato, including switching subscription plans, retrieving invoices and cancelling your subscription.

v1.3.1

Email senders

This is just a small update to follow up on the recent changes to customer-related emails.

As well as showing your team's "Brand name" in emails, we now also set the "From" name to your brand name for better recognition by your customers.

v1.3.0

More tweaks and improvements

We're continuing to refine and improve Privato with a few more tweaks in this release.

Emails sent to your customers will now use the "Brand name" you've configured for your team, making it clearer where the email is coming from.

We have also started tracking how many times a package has been downloaded, which release was downloaded and who downloaded it. This will be especially useful for package developers who want to gain insights into how their packages are being used.

Right now, we're showing some basic charts on your dashboard page and when a license was last used in the Licenses tab, but we have plans to expand on this in future releases.

v1.2.1

Minor utilities

We've added a couple of small things in this release.

You can now delete licenses when viewing a specific customer, making it easier to manage licenses on a per-customer basis and removing the need to navigate to the Licenses tab for a specific package.

We've also added the ability to customize the "unit label" for a release channel. This is useful for tiered pricing models where you might want to be more descriptive about what a unit is or what a license represents access wise, e.g. seat, user, developer, etc.

v1.2.0

Release channels improvements and repository invites

To give more power to package developers, we've introduced some exiting new features for release channels and package repositories.

Release channel improvements

Release channels were initially introduced to help you manage package access based on your customers' purchases and subscriptions. With this update, we're taking things a step further and giving you more control over how you manage your package versions.

Configurable version constraints

Release channels can now have configurable version constraints. This means you can define specific version ranges for each release channel, allowing you to better manage which versions of your package are accessible to your customers.

For example, you can create a release channel that only allows access to ^1.0 versions of your package and when you eventually release a 2.0.0 version, you can introduce a new channel for that major version while keeping existing customers on the ^1.0 line.

Archive release channels

To go along with configurable version constraints, we've introduced the ability to archive release channels.

Archiving a release channel prevents any new licenses from being assigned to it, while still allowing existing customers to access the versions within that channel. This is particularly useful for managing legacy versions of your packages without cluttering your active release channels.

Expiration behaviour

Release channels can now have expiration behaviour configured. When you create your release channel and configure when it should expire, you can also specify what happens for customers with licenses assigned to that channel when it expires.

The default behaviour is to allow customers to continue using releases that were available to them prior to expiration, but you can also choose to completely revoke access to the package.

GitHub repository invites

The checkbox to automatically accept GitHub repository invitations has finally been implemented end-to-end!

Customers who have purchased your package will see a new prompt inside of the Customer Portal asking them to enter their GitHub username.

Once they enter their username, Privato will automatically send them an invitation for read-only access your private GitHub repository. Upon license expiration, Privato will automatically revoke their access to the repository.

If a customer purchases multiple packages and Privato already has their GitHub username, they won't be prompted again and will automatically receive invitations for any new packages they purchase.

Customer portal

The recent customer portal improvements had a minor regression where customers could no longer see any support / contact links.

We've added a Support item to the header when authenticated, as well as a link to the sign in page when unauthenticated.

v1.1.1

Minor interface tweaks

We've made some minor tweaks to the admin interface for package developers.

  • Packages now have a dedicated "Composer package name" field. This has been backfilled for existing packages where possible.
  • The package overview page now has an improved "Installation instructions" section with code snippets.
  • The package overview page now has a "Quick links" dropdown in the header with easy to access links to your public pages.
v1.1.0

Customer portal improvements

We've been focused on shipping improvements to the customer portal experience since our initial launch.

Customer portal improvements

We've completely rebuilt the customer portal from the ground up to provide a smoother and more intuitive experience for your customers.

Key improvements include:

  • A modern design powered by Flux.
  • Publicly accessible package overview pages.
  • A clearer checkout flow with clear pricing breakdowns and improved bulk licensing.
  • The ability to roll license keys.
  • A simpler licenses tables with intuitive assign/unassign modals.

Admin improvements

Alongside the customer portal improvements, we've also made some minor enhancements to the admin dashboard:

  • Business customers can now invite team members to manage their packages.
  • You can now set release channel descriptions from Privato, removing the need to manage them inside of Stripe.
  • You can now sign up with GitHub.
  • You can manually resend license emails from the Licenses tab.
  • You can manually edit customer emails in case of user error.
v1.0.0

Initial Release

We're excited to launch Privato, the modern platform for distributing private Composer packages.

Features

  • Private Composer registry with full Composer 2.x support
  • License key generation and management
  • Release channels for controlling version access
  • GitHub integration for automatic package syncing
  • Stripe integration for subscription billing
  • Team management and access controls
  • Download analytics and insights
  • Custom domains support
  • Public package pages for marketing your packages

Want to be notified of new releases? Follow us on X (Twitter).