Fix "Missing plugin name prefix" for permission in Oxide plugins
Oxide prints this warning when a registered permission does not begin with the plugin's lowercase class name followed by a dot. Rename the permission constant to "killrewards.rewards.use" (or similar) so the warning disappears, then reload the plugin.
Missing plugin name prefix 'killrewards' for permission 'rewards.use' (by plugin 'Kill Rewards')
Why it happens
Oxide groups permissions by plugin, so every permission a plugin registers should start with the lowercase class name and a dot, for example killrewards.rewards.use on a plugin whose class is KillRewards. When the string lacks that prefix, Oxide still registers it - grants, revokes and permission.UserHasPermission checks keep working - but it logs Missing plugin name prefix '<perm>' for permission '<perm>' (by plugin '<Title>') once at startup so admins know the permission is impossible to attribute to a plugin. The most common trigger is a constant written as rewards.use while the class is KillRewards, or a plugin whose class was renamed but whose permission constants were not. Another trap is mixing cases in the prefix: Oxide lookups are case-insensitive, but the warning compares against the actual class name, so an unrelated prefix (for example copying economy. naming from another plugin) is what trips it. Because the warning appears in Init, it shows on every load and reload.
How to fix it
- Note the plugin class name - here
KillRewards- and lowercase it:killrewards. - Rewrite each permission constant so it starts with that prefix plus a dot, e.g.
killrewards.use, and keep all registration and checks pointing at the same constant. - Search the file for any hard-coded permission strings used in
[ConsoleCommand]or chat commands so nothing still references the old name. - Reload with
oxide.reload KillRewards(Carbon accepts the same command). - Confirm the console no longer prints the
Missing plugin name prefixline and instead showsLoaded plugin Kill Rewards v1.0.0 by RustPluginGenerator. - If the server already granted the old permission name, either grant the new one (
oxide.grant group default killrewards.use) or revoke the stale entry withoxide.revoke.
Before and after
using Oxide.Core;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("Kill Rewards", "RustPluginGenerator", "1.0.0")]
[Description("Gives players a small reward for kills when they have permission")]
public class KillRewards : RustPlugin
{
private const string PermUse = "rewards.use";
private void Init()
{
permission.RegisterPermission(PermUse, this);
}
private void OnEntityDeath(BaseCombatEntity entity, HitInfo info)
{
if (entity == null || info == null) return;
var killer = info.InitiatorPlayer;
if (killer == null || killer.IsNpc || killer == entity) return;
if (!permission.UserHasPermission(killer.UserIDString, PermUse)) return;
var item = ItemManager.CreateByName("scrap", 5);
if (item == null) return;
killer.GiveItem(item);
killer.ChatMessage("You received 5 scrap for the kill.");
}
}
}using Oxide.Core;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("Kill Rewards", "RustPluginGenerator", "1.0.0")]
[Description("Gives players a small reward for kills when they have permission")]
public class KillRewards : RustPlugin
{
// Prefix must match the lowercase class name: killrewards
private const string PermUse = "killrewards.use";
private void Init()
{
permission.RegisterPermission(PermUse, this);
}
private void OnEntityDeath(BaseCombatEntity entity, HitInfo info)
{
if (entity == null || info == null) return;
var killer = info.InitiatorPlayer;
if (killer == null || killer.IsNpc || killer == entity) return;
if (!permission.UserHasPermission(killer.UserIDString, PermUse)) return;
var item = ItemManager.CreateByName("scrap", 5);
if (item == null) return;
killer.GiveItem(item);
killer.ChatMessage("You received 5 scrap for the kill.");
}
}
}FAQ
Does the warning break the permission?
No. Oxide registers the permission anyway and permission.UserHasPermission keeps returning true for granted users. The line is informational: it tells you the permission cannot be tied back to a plugin name, which matters for oxide.show perms and for support requests.
Can I keep the old permission name for compatibility?
You can register the old name deliberately, but the warning stays. A cleaner option is to register the correctly prefixed name, then check both names in play (UserHasPermission(userId, PermUse) || UserHasPermission(userId, "rewards.use")) while you migrate grants to the new permission.
Why does the message end with "(by plugin 'Kill Rewards')"?
Oxide matches the permission back to a loaded plugin and prints its [Info] title, not the class name. That is why the prefix is compared against the class name KillRewards, not the title Kill Rewards.
Does Carbon print this too?
Carbon loads the same plugin files and emulates Oxide's permission system, so permissions should follow the same prefix convention. Even if Carbon stays quiet, keep the prefix so the plugin behaves identically on both frameworks.
Different error?
Paste the full console output and get the cause and a fix in plain English.
Open the error explainerSkip the debugging
Generated plugins are compiled before you get them, and compiler errors are fixed automatically.
Generate a plugin2 free plugins a month, no card.
Last updated Oct 26, 2026.
Get plugins that compile first time
Generate