Product downloads
Deliver your product with SunLicense: upload its files and releases, write a page and a changelog, and your customers download it from the customer portal or from a one-time link you send them. Each customer's copy has their own license written into it, and a hidden mark that tells you whose copy it was if it ever shows up on a leak site.
Product downloads are on the Standard plan, with 1 GB of storage and files up to 250 MB.
Add a release
- Open a product and choose the Downloads tab.
- Optionally write the product page: what customers read above your releases. Markdown works (bold, lists, links), and you can add up to 8 screenshots.
- Choose New release, enter its version (like
1.4.0), a title and a changelog. - Add files. Each file is checked right after it's uploaded; the page shows what the check found. To protect a compiled build, turn on Obfuscate before publishing and optionally pick a profile (the default is the product's linked one): SunLicense obfuscates the upload on our servers before it goes live, and buyers only ever get the obfuscated file. The file shows Obfuscating… with a link to the task log while it runs; on failure it stays unpublished and shows why.
- Publish the release. Customers with a license for the product can download it now. Unpublish it to hide it again.
Customers see published releases, newest first, with their changelogs. Older releases stay downloadable.
How the license gets into the file
For .jar, .zip, .mcpack, .mcaddon and .mrpack files, every download is made for that customer:
- A license file.
sunlicense.jsonat the root of the archive (change the path in the file's settings, or leave it empty for none). A.jsonpath gets the key, license, customer, product, version and download details; any other name, likelicense.key, gets just the key. - Placeholders. Put any of these in a Java string constant or a text file (YAML, JSON, properties, TOML, Lua, JavaScript…) and they're replaced in each download:
| Placeholder | Becomes |
|---|---|
%%__SUNLICENSE_KEY__%% | the buyer's license key |
%%__SUNLICENSE_LICENSED_TO__%% | the buyer's name, or email |
%%__SUNLICENSE_VERSION__%% | the release's version |
%%__SUNLICENSE_DOWNLOAD__%% | this download's mark (SLD1-…) |
%%__SUNLICENSE_LICENSE_ID__%% | the license's id |
%%__SUNLICENSE_CUSTOMER_ID__%% | the customer's id |
%%__SUNLICENSE_PRODUCT_ID__%% | the product's id |
// A Paper plugin: the buyer's key, written into their copy of the jar
private static final String LICENSE_KEY = "%%__SUNLICENSE_KEY__%%";- A download mark. Every copy also carries its mark in the archive's comment and, for jars, in the manifest (
SunLicense-Download). Put%%__SUNLICENSE_DOWNLOAD__%%in a class to keep the mark even when someone repacks the jar.
Placeholders in other files (images, native libraries) are left alone; the check lists them as skipped. Signed jars keep a valid signature: only the license file and the archive comment are added. Other files (installers, .exe, .dmg) download exactly as you uploaded them.
Send a one-time link
On a license's page, under Downloads, choose Create download link. Pick the release (or "always the latest"), all files or one, and how long it lasts (1 to 30 days). Copy the link and send it to the customer.
The link opens a page in your branding where the customer downloads, no sign-in needed. Each file downloads once; the link ends when every file was downloaded or when it expires, and you can cancel it at any time. Opening the page doesn't use it up, so link previews in chat apps and email scanners are harmless. Links work whether or not your customer portal is on.
Only active licenses can download: a suspended, revoked or expired license, or a blocked customer, is refused, even with a link made earlier.
Who downloaded what
Every download is recorded with its license, file, version, how it was downloaded (portal, one-time link or a team member) and the country it came from. See them on the product's Downloads tab and on each license's page.
Try as customer downloads a file exactly as a license's customer gets it, so you can check what's written in.
Whose copy is this?
Found your product on a leak site? Open Sentinel → Whose copy is this? and upload the file. SunLicense reads its mark and shows the download it came from: the license, the customer, when and where. Suspend the license from there with one click. The file is deleted as soon as it's read.
Limits
- 1 GB of storage per organization on Standard, files up to 250 MB, screenshots up to 5 MB (PNG, JPEG, GIF or WebP).
- Up to 10 files per release and 200 releases per product.
- If your plan stops including downloads, your files are kept but customers can't download them; upgrading again brings them back.
