Paid Rust plugins, loaded on paying servers only.
One web request from Oxide or Carbon. One server per key.
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
Built for how you sell.
Still a single .cs
Oxide's built-in webrequest, no DLL to ship.
webrequest.EnqueueOne key, one server
An IP limit of 1, 3 or 10.
TOO_MANY_IPSRevoke, 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 & StandardLive before your next release.
- 1Create a free account
- 2Connect your store
- 3One webrequest on load
[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);
}
}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.
SunLicense