Learn everything there is to know on how to configure your product.
Anystack is an all-in-one platform for selling, licensing, and distributing your software. The focus is on ease of
use and providing a plug-and-play solution. This means Anystack is tailor-made for specific software types. Anystack
now supports NodeJS, PHP, Python, and Electron. If your programming language or software is not listed, please
let us know.
To get started, click the "Add Product" button in the top right corner. This will initiate the product
configuration wizard to guide you through the process in a few simple steps. Let's take a look at the different
This is the name displayed throughout Anystack (including public accessible pages if applicable).
The identifier is a unique identifier for your product, and this identifier is unique across all products
managed via Anystack. Anystack will use your product identifier to generate your product's public-facing URLs. The product identifier cannot be changed.
You can choose between NodeJS, PHP, Ruby, Python, Electron, and Other. Please note that you cannot change the
product type after creation. Except for 'Other,' if your desired product type becomes available in the
future, you can request it to be changed.
You can choose to configure licensing and distribution via the wizard. Don't worry; you can always enable
these features later.
Licensing & Policies
You can use Anystack's licensing feature to protect your software from unauthorized usage.
Before creating a new license, you need to create a policy. A policy is a set of rules that applies to a
license. For example, the duration a license is valid or how many times a customer can use a license. Let's take
a look at the available policy options.
The name of your policy. We recommend picking a name that describes your policy. For example, "1 Year",
"Unlimited", "Basic", "Pro", etc.
Duration / Expiration
If you want your licenses to expire, you can set the expiration date. When a license is created, it will
inherit the policy's expiration date.
You have the option to set a consequence when a license expires. By default, the consequence is to "Revoke
access" upon expiration. Alternatively, you can select the consequence "Restrict access":
Upon expiration, revoke all access.
- Restrict Access
Upon expiration, access is restricted to the latest release that was available up until the license
expiry date. This is common if you have a product that can always be used, but your customers must
renew their license to receive updates.
By default, it's not required to activate a license before a customer can use it. However, you can enable
this option if you want to keep track of your license usage across multiple domains, applications, etc. You
can also restrict the number of activations. An everyday use case for this is restricting your customer to
use your product on only two computers at a time.
You can use a release constraint to restrict license access to a major, minor and / or specific release.
Courtesy of the Composer documentation on constraints:
Exact Version Constraint
You can specify the exact version of your product. This will restrict the license to this version
and this version only. Example:
By using comparison operators you can specify ranges of valid versions. Valid operators are
You can define multiple ranges. Ranges separated by a space ( ) or comma (,) will be treated as a
logical AND. A double pipe (||) will be treated as a logical OR. AND has higher precedence than OR.
>=1.0 <1.1 || >=1.2
Hyphenated Version Range (-)
Inclusive set of versions. Partial versions on the right include are completed with a wildcard.
1.0 - 2.0 is equivalent to
>=1.0.0 <2.1 as the
On the other hand
1.0.0 - 2.1.0 is equivalent to
Wildcard Version Range (.*)
You can specify a pattern with a
1.0.* is the equivalent of
Tilde Version Range (~)
~ operator is best explained by example:
~1.2 is equivalent to
~1.2.3 is equivalent to
>=1.2.3 <1.3.0. As you
can see it is mostly useful for projects respecting semantic versioning. A common usage would be to
mark the minimum minor version you depend on, like
~1.2 (which allows anything up to,
but not including, 2.0). Since in theory there should be no backwards compatibility breaks until
2.0, that works well. Another way of looking at it is that using
~ specifies a minimum
version, but allows the last digit specified to go up.
Caret Version Range (^)
^ operator behaves very similarly, but it sticks closer to semantic versioning, and
will always allow non-breaking updates. For example
^1.2.3 is equivalent to
<2.0.0 as none of the releases until 2.0 should break backwards compatibility. For
pre-1.0 versions it also acts with safety in mind and treats
^0.3 as >=0.3.0 <0.4.0.
GitHub Repository Access
If you enable repository access on your license policy, your customers will be able to join your repository as a collaborator while they have an active license. Anystack will automatically revoke access in the following events:
It may take up to five minutes to have customer access revoked in case of the events listed above.
- License expiration.
- License suspension.
- When disable the option on the license policy.
- When a customer revokes Anystack's authorization.
Now that your licensing policy is in place, you can create your first license. A license contains a unique key
that your customers can use to authenticate themselves. Let's take a look at the available options for your
A license must have a unique key across all of your products. By default, a random key is generated for you.
Setting a name for your license is optional, but you could use it to make it easier to identify licenses.
A license must have a policy. This is the license policy that will be enforced when using this license.
The license will expire at the specified date. If you don't specify an expiration date, the license policy
will determine the expiration date.
The license will expire at the specified date. If you don't specify an expire date, the expire date will
be determined by the license policy.
You can assign a contact to a license to keep your licenses organized. This also adds a layer of security
for some distribution methods, given an email is now required to add a license key.
Anystack makes distribution a joy by integrating with your existing stack. Connect your GitHub account, create a
new release, and that's it. Anystack will automatically import the files from GitHub and make these available for
distribution to your customers.
For each product type, Anystack provides particular integrations with your existing stack. The following
distribution integrations are supported:
- Composer: A Dependency Manager for PHP
- NPM: The package manager for Node.js
- PyPI: The Python Package Index (PyPI) is the official third-party software repository for Python.
- Electron Native: The official updater which takes advantage of the built-in Squirrel framework and
Electron's autoUpdater module. This includes Electron Forge.
- Electron Builder: A community-based updater with some additional features compared to the default
A release marks a specific version of your application like v1.0.0, v2.2.3, etc. Each release consists of one or
more assets (depending on your product type). The integrations listed above will use the releases to determine
if your customer can update to a new version of your software. A release consists out of the following
The tag of your release is the version number. This must be a valid tag that follows the semantic versioning scheme. For example,
Optionally, you can set a name for your release, which will be shown on the changelog page. You can view a
changelog example here.
Optionally, you can set a description for your release; the description will be shown on the changelog page.
You can use markdown in this field, including code blocks for syntax highlighting. You can view a changelog
Once you mark a release as published, it will be available to your customers. You can either do this
manually or set auto-publishing to true to have Anystack publish your releases automatically.
Anystack creates a secure, payment page that lets you collect payments quickly. Billing can be enabled on a product basis.
Anystack partners with Stripe to provide the best customer experience there is. To start selling via Anystack, you simply follow the onboarding process managed by Stripe. Payments by your customers are made directly to your account; you are in complete control.
To start selling your software you can create a pricing plans. A pricing plan consists of the following information:
The name of the pricing package. This name will be visible to your customers.
A pricing package is required to have an active policy. This policy will be used to generate a license once a payment was made successfully.
You can use the description field to explain your customers more about this package. The description is shown on the checkout page.
The price of the package (excluding taxes). This is the amount that will be charged to your customer.
The renewal price is optional. If you set a renewal price (excluding taxes), the customer will be charged this amount the license is renewed.
You can set the currency of the package. This is the currency that will be used to display the price.
Your customer is also charged in the chosen currency. You can create multiple package and use different currencies.
There are two type of packages:
A one-time package is a package that is charged once and must be renewed manually if the license expires.
Recurring (coming soon)
A recurring package is a package that is charged automatically and will be renewed automatically.
Stripe Tax lets you calculate and collect sales tax, VAT, and GST with the click of a button. Know where to register, automatically collect the right amount of tax, and access the reports you need to file returns.
You can enable automatic tax collection for your products. Stripe will automatically collect the correct taxes for your customers.
Please verify that Stripe Tax is enabled for your account. If you enable tax collection without having enable taxes for your account your customers will not be able to make any purchases.
If you sell licenses that require a fingerprint before usage you can allow your customers to activate their license after they completed their purchase.
You can also enable the revoke option to allow users to revoke activation of their license. For example, when they want to switch to a new device or domain.
Replace the term 'fingerprint' with something more relevant for your users, domain or device for example.
You can allow users to manage their licenses via Anystack.
If you disable this option you will need to implement your own logic which will allow users to activate their licenses or revoke existing activations.
Allow users to activate their license.
Allow users to revoke their license activations.