Skip to content

Templates ​

Start a new project from a template that already checks its license the right way: the official SDK, your API key kept out of git, a stable machine id, clear messages for every result, re-checks so a revoke reaches running copies, and it keeps working when SunLicense can't be reached. Each one builds and runs its tests in CI and has an AGENTS.md, so an AI coding assistant can work in it without weakening the check.

TemplateForStackOffline file
Paper plugin · repoMinecraft servers (Paper 1.21 and 26.x)Java 21, Gradle✓
Velocity pluginMinecraft proxies (Velocity 3.5 and 4.x)Java 21, Gradle✓
Fabric modMinecraft servers with Fabric (26.3)Java 25, Fabric Loom✓
FiveM resourceGTA V roleplay servers (RedM too)Lua 5.4
Discord bot, JavaScriptBots sold to server ownersNode.js 22, discord.js 14✓
Discord bot, JavaBots sold to server ownersJava 21, JDA 6✓

On GitHub, click Use this template (or download the folder), then follow its README: create a product, a policy and an API key, put the key in your build settings, build, and sell.

What they have in common ​

  • The key reaches the buyer's copy from a config file (or .env, or a FiveM convar), or for the Java templates sold on BuiltByBit and Voxel Shop through a %%__SUNLICENSE__%% placeholder the store fills in on download.
  • Your API key is baked into the build you sell, from Gradle properties, environment variables or a packaging script, never from the repository. It can only validate licenses.
  • Each copy has a random machine id stored next to it, so restarts count as the same machine and the policy's machine limit works.
  • A rejection stops the product (disables, switches features off or exits) with a message for the result code: expired, revoked, suspended, unknown key, too many machines or blacklisted. Keys are always masked in logs.
  • No answer is not a no. On a network error, a 5xx or a 429, the template uses a signed offline license file if there is one, otherwise keeps running and retries every 10 minutes. One constant (ALLOW_WHEN_UNREACHABLE) makes it wait instead.
  • Re-checks every 6 hours by default, so revoking a leaked key reaches copies that are already running.

Testing with your own license? Add an exclusion for your machine so test runs don't use up slots. Selling something else? Every SDK works the same way, and a prompt for your AI assistant gets you started in any language.

Send feedback

Found something broken, or have an idea? It goes straight to our board.

The first line becomes the title.
Images (optional, up to 5: paste, drop or capture)
Check each image before sending, and remove any that show something private.

We also receive this page's address and your browser version.

Ctrl Enter to send