Skip to content
RustPluginGenerator
Runtime errorOxide + Carbon

Fix "Plugin X.cs is a uMod plugin, not an Oxide plugin. Please downgrade to the Oxide version if available."

The file declares the uMod 3 preview namespace (`namespace uMod;` / `uMod.Plugins`) and uses the uMod plugin base class instead of `Oxide.Plugins.RustPlugin`. The loader refuses it before compiling. Replace the header with the Oxide layout and port the API calls.

Server console
Plugin Kits.cs is a uMod plugin, not an Oxide plugin. Please downgrade to the Oxide version if available.

Why it happens

This message comes from the loader, not the C# compiler: Oxide checks the file's namespace before compiling and skips files written for the uMod 3 preview. Those files declare namespace uMod; (or namespace uMod.Plugins) and a class deriving from uMod.Plugins.RustPlugin, with attributes from uMod.Plugins instead of Oxide.Plugins. Downloads from the uMod 3 branch, some GitHub forks, and older kits/version plugins that were pre-released against uMod 3 all look like this. Oxide's own plugin base is Oxide.Plugins.RustPlugin, so even if the code compiled it would not attach to Oxide hooks. Carbon loads Oxide plugins, so a uMod 3 file fails there too. The fix is either an Oxide build of the same plugin or a header port plus adjusting any API names that differ.

How to fix it

  1. Open the .cs file and look at the first lines. using uMod;, namespace uMod;, namespace uMod.Plugins and [Info(...)] imported from uMod are the giveaways.
  2. Prefer obtaining the Oxide version of the plugin from the same author or the plugin's release page; drop it into oxide/plugins (it will recompile on save).
  3. If you must port, change the file-scoped namespace uMod; to a block namespace namespace Oxide.Plugins { ... }, keep using Oxide.Core; / using Oxide.Core.Plugins; / using Newtonsoft.Json; as needed, and make the class derive from Oxide.Plugins.RustPlugin.
  4. Run oxide.reload Kits (or save the file). Success shows Loaded plugin Kits v1.0.0 by ... with no loader warning. If it now prints Error while compiling Kits:, work through the CS errors shown.

Before and after

BeforeFails
using System;
using System.Collections.Generic;
using uMod.Plugins;

namespace uMod.Plugins
{
    [Info("Kits", "RustPluginGenerator", "1.0.0")]
    [Description("Gives players a starter kit with a chat command.")]
    public class Kits : RustPlugin
    {
        private const string PermUse = "kits.use";

        private void Init()
        {
            permission.RegisterPermission(PermUse, this);
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["NoPermission"] = "You do not have permission to use kits.",
                ["Received"] = "You received the starter kit."
            }, this);
        }

        [ChatCommand("kit")]
        private void CmdKit(BasePlayer player, string command, string[] args)
        {
            if (player == null) return;
            if (!permission.UserHasPermission(player.UserIDString, PermUse))
            {
                player.ChatMessage(lang.GetMessage("NoPermission", this, player.UserIDString));
                return;
            }

            Item item = ItemManager.CreateByName("wood", 1000);
            if (item != null)
            {
                player.GiveItem(item);
            }

            player.ChatMessage(lang.GetMessage("Received", this, player.UserIDString));
        }
    }
}
AfterFixed
using System.Collections.Generic;
using Oxide.Core;

namespace Oxide.Plugins
{
    [Info("Kits", "RustPluginGenerator", "1.0.0")]
    [Description("Gives players a starter kit with a chat command.")]
    public class Kits : RustPlugin
    {
        private const string PermUse = "kits.use";

        private void Init()
        {
            permission.RegisterPermission(PermUse, this);
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["NoPermission"] = "You do not have permission to use kits.",
                ["Received"] = "You received the starter kit."
            }, this);
        }

        [ChatCommand("kit")]
        private void CmdKit(BasePlayer player, string command, string[] args)
        {
            if (player == null) return;
            if (!permission.UserHasPermission(player.UserIDString, PermUse))
            {
                player.ChatMessage(lang.GetMessage("NoPermission", this, player.UserIDString));
                return;
            }

            Item item = ItemManager.CreateByName("wood", 1000);
            if (item != null)
            {
                player.GiveItem(item);
            }

            player.ChatMessage(lang.GetMessage("Received", this, player.UserIDString));
        }
    }
}

FAQ

Is uMod and Oxide the same thing?

Oxide is the framework (originally uMod). The "uMod 3 preview" was a separate rewrite that used its own uMod.Plugins namespace. Oxide only loads plugins that derive from Oxide.Plugins.RustPlugin, so a preview-era file is rejected at load time with this message.

Can I just rename the namespace and keep the rest?

Often yes for simple plugins: change the namespace, keep the [Info] attribute and make the class inherit RustPlugin from Oxide.Plugins. API calls that only exist in the preview (different hook signatures or helper classes) will then surface as compile errors, which you fix one by one.

Why does the console mention downgrading?

The message means: this file is written for the newer uMod 3 API, but the server runs Oxide, which is the older API. Replacing the file with an Oxide-compatible build is the intended path; the loader does not attempt to translate the source.

Does Carbon accept these files?

No. Carbon loads Oxide plugins, so the namespace and base class must be Oxide.Plugins / RustPlugin. The same correction applies, and the file goes in carbon/plugins instead of oxide/plugins.

Different error?

Paste the full console output and get the cause and a fix in plain English.

Open the error explainer

Skip the debugging

Generated plugins are compiled before you get them, and compiler errors are fixed automatically.

Generate a plugin

2 free plugins a month, no card.

Last updated Oct 26, 2026.

Get plugins that compile first time

Generate