SunLicenseSign in
For Rust plugin developers · Oxide & Carbon

Paid Rust plugins, loaded on paying servers only.

One web request from Oxide or Carbon. One server per key.

Create free account

Free plan · No credit card · Set up in minutes

Coding with an AI agent? Paste one prompt
  • C#
  • Oxide / uMod
  • Carbon
  • Tebex
  • Stripe
  • Gumroad
  • Discord
What you get

Built for how you sell.

Still a single .cs

Oxide's built-in webrequest, no DLL to ship.

webrequest.Enqueue

One key, one server

An IP limit of 1, 3 or 10.

TOO_MANY_IPS

Revoke, suspend, blacklist

A key, a server IP or a range.

Keys from your store

Tebex, Stripe, Gumroad, Payhip and more.

Discord does support

Buyers claim keys; staff get sharing alerts.

Sentinel sees it moving

Flags keys hopping between servers.

Lite & Standard
How it works

Live before your next release.

  1. 1Create a free account
  2. 2Connect your store
  3. 3One webrequest on load
oxide/plugins/MyPlugin.cs
[Info("MyPlugin", "You", "1.2.0")]
public class MyPlugin : RustPlugin
{
    const string ApiKey = "slk_...";   // can only validate licenses

    void OnServerInitialized()
    {
        var body = JsonConvert.SerializeObject(new { licenseKey = (string)Config["LicenseKey"] });
        var headers = new Dictionary<string, string> { ["Authorization"] = "Bearer " + ApiKey, ["Content-Type"] = "application/json" };
        webrequest.Enqueue("https://api.sunlicense.com/api/v1/validate", body, (code, response) =>
        {
            if (code != 200) return;   // no answer is not a no: keep running
            var result = JObject.Parse(response);
            if ((bool)result["valid"]) Puts("License valid, loading");
            else { PrintError($"License denied: {result["code"]}"); Interface.Oxide.UnloadPlugin(Name); }
        }, this, RequestMethod.POST, headers);
    }
}
FAQ

Questions, answered.

How do I stop my Rust plugin from being shared?

A Rust plugin ships as a .cs file, so anyone determined can edit a check out, and no licensing changes that. A key per buyer with an IP limit makes sharing visible and stoppable: the key works on the buyer's server, the same key on another server is refused with TOO_MANY_IPS, and a leaked key can be revoked so every copy stops at its next check.

Does it work with Oxide (uMod) and Carbon?

Yes. The check is one HTTPS request to the SunLicense REST API, made with the webrequest helper Oxide plugins already have, and Carbon runs Oxide plugins. Nothing extra is installed on the buyer's server. There is a .NET SDK as well, but for a single-file plugin the REST call is simpler.

How do I limit a Rust plugin to one server per purchase?

Give the policy an IP limit of 1. The first server that checks the key takes the slot, and any other address is refused with TOO_MANY_IPS. When a buyer moves to a new box, the old address frees itself after 30 days unused, they can free it in the customer portal (Lite and Standard), or you free it on the license page.

What happens on wipe day if SunLicense is down?

Your plugin decides. A failed request isn't a rejection, so the example keeps the plugin loaded when there's no answer and unloads it only when SunLicense says the key isn't valid. License checks run on their own service, separate from the dashboard.

Protect your next release.

  • Free plan
  • No credit card
  • Cancel any time