Oxide vs Carbon: Differences, Compatibility and How to Switch
Oxide (uMod) and Carbon are both modding frameworks for Rust servers, and Carbon can load plugins written for Oxide, so most plugins run on either one. They differ in project history, internal architecture, folder layout, built-in tooling and how quickly each one updates after a Rust patch. Choose based on plugin needs, hosting support and how you want to handle updates.
7 min readUpdated Oct 26, 2026
Oxide (also called uMod) and Carbon are two frameworks that add plugin support to a Rust dedicated server. Carbon can load Oxide plugins, so most plugins you find run on both. The real decision comes down to update speed, tooling, hosting support and which one your plugin collection was tested on.
Short comparison
| Topic | Oxide (uMod) | Carbon |
|---|---|---|
| Role | Long-established modding framework for Rust | Newer framework built as an alternative |
| Plugin language | C#, RustPlugin classes | C#, loads the same RustPlugin files |
| Oxide plugin compatibility | Native | Loaded through a compatibility layer |
| Plugin folder | oxide/plugins | carbon/plugins |
| Config folder | oxide/config | carbon/configs |
| Data folder | oxide/data | carbon/data |
| Lang folder | oxide/lang/<lang> | carbon/lang |
| Logs | oxide/logs | carbon/logs |
| Console commands | oxide.* | c.* style commands plus the oxide.* ones |
History in brief
Oxide began as a modding framework for several games and became the standard way to run plugins on Rust servers. Its plugin site and documentation are now under the uMod name, and the framework is still referred to as both Oxide and uMod. Most of the plugin ecosystem, tutorials and plugin pages were written against it.
Carbon appeared later as a separate project aimed at Rust servers specifically. Its design goals include faster startup and plugin compilation, lower overhead, and a built-in admin panel. It deliberately accepts Oxide plugins so server owners are not forced to rewrite anything.
Plugin compatibility
Carbon loads Oxide plugins. A typical plugin that:
- declares
[Info]and[Description]attributes, - extends
RustPlugin, - uses standard hooks such as OnPlayerConnected or OnEntityTakeDamage,
- stores settings through
Configand data throughInterface.Oxide.DataFileSystem, - uses
langandpermission,
works on both without edits. The naming rules are unchanged: the file name matches the main class, as explained in plugin filename must match main class.
Things that can differ:
- Plugins that depend on another plugin through
[PluginReference]need that dependency loaded too. See calling other plugins. - Plugins that rely on obscure internals of Oxide may behave differently.
- Hooks that exist in one framework's patch set may be missing or named differently in the other. Check the console on load for warnings.
- Plugins written specifically for Carbon, using its own APIs, will not load on Oxide.
The practical test is simple: load the plugin, read the console, and exercise its commands and hooks once.
Hook behavior
Both frameworks call plugin methods by hook name and decide which overload to run based on the argument types. The return value semantics of each hook depend on how the game method is patched, so always check the hook page. For example, for CanBuild or OnEntityTakeDamage, any non-null return cancels the default action, which is true or false alike. Learn more in Oxide hooks explained.
Performance claims
Carbon's project advertises lower memory use, faster compile and load times, and less per-hook overhead than Oxide. These claims are plausible given a leaner design, but the effect on your server depends on:
- how many plugins you run and how often their hooks fire,
- hardware and player count,
- whether a few badly written plugins dominate the cost.
On most servers, one plugin doing heavy work in a frequent hook such as OnEntityTakeDamage or OnTick costs far more than framework overhead. Use the slow-hook warnings (see took ms hook performance warning) and the performance guide to measure. If you want to compare, test the same plugin set and the same map on both, under similar load, and compare frame time and warnings.
Admin panel and tooling
Carbon ships with an in-game admin panel for managing plugins, and includes more built-in management commands. Oxide relies on console commands and on plugins you install yourself for admin menus, such as the approach in the admin menu recipe.
Oxide's console tooling covers the essentials: loading, unloading and reloading plugins, plus the permission commands. See Oxide console commands. Carbon accepts the oxide.* commands too, so existing scripts and RCON macros usually keep working.
Update cadence after Rust patches
Rust updates on the first Thursday of the month (the forced wipe) and in smaller patches between. After each update, a framework has to be rebuilt against the new game assemblies, and its hook patches have to still apply. Until that happens, servers may fail to start modded or plugins may break.
Both projects release updates quickly after most patches, but timing varies by patch size and by which hooks changed. Neither can promise a fixed delay. Practical advice:
- Do not update the game server on wipe day before checking that your framework has a matching release.
- Keep a copy of your last working server files.
- After updating, read the console for compile errors and deprecated hooks. See fix Rust plugins after an update and deprecated hook will stop working.
- Follow monthly hook change reports to see which hooks changed.
Plugin authors also need time to update, no matter which framework you use, so a framework release does not mean every plugin is fixed.
Folder differences
The structure is parallel, but the root folder differs.
- Oxide:
oxide/plugins,oxide/config,oxide/data,oxide/lang,oxide/logs. - Carbon:
carbon/plugins,carbon/configs,carbon/data,carbon/lang,carbon/logs.
Note config becomes configs on Carbon. Config files keep the form <PluginName>.json. Saving a .cs file into the plugins folder reloads that plugin automatically on both.
Switching from Oxide to Carbon
- Stop the server and back up the whole server directory, especially
oxide/. - Install Carbon following its own instructions for your platform, and remove or disable the Oxide files so only one framework patches the game.
- Copy
oxide/plugins/*.csintocarbon/plugins. - Copy
oxide/config/*.jsonintocarbon/configs. - Copy
oxide/datacontents intocarbon/data, including permission data. - Copy
oxide/langintocarbon/lang, keeping language subfolders. - Start the server and read the console. Fix any plugin that fails to load.
- Verify permissions with
oxide.show groupsandoxide.show user <name>, then test key commands.
Copy, do not move, so the original stays as a rollback.
Switching from Carbon to Oxide
- Stop the server and back up the
carbon/folder. - Install Oxide and remove Carbon's files completely.
- Copy plugins, configs (to
oxide/config), data and lang back to the Oxide folders. - Remove any plugins that use Carbon-only APIs. They will fail to compile on Oxide with errors such as type or namespace not found.
- Start, read the console, and check permissions with
oxide.show.
If a plugin is Carbon-only, you need a replacement or a rewrite.
Permissions and data when switching
Permissions are data, not plugin code. They live in the framework's data folder, so they only move if you copy them. After switching:
- Run
oxide.show permsto confirm plugins registered their permissions. See Oxide permissions and groups. - Run
oxide.show groupsand check that custom groups and parents exist. - If a grant is missing, re-grant with
oxide.grant group <group> <perm>.
Plugin data files (kits, homes, stats) are ordinary JSON in the data folder. See Rust plugin data files. If a plugin fails with a corrupt file message, see JsonReaderException in data file.
Configs are regenerated with defaults if the file is missing or invalid, which is why copying them matters. See Rust plugin config file.
A sample plugin that works on both
A plugin written to the standard rules runs the same way on both frameworks. It uses only common APIs:
using System.Collections.Generic;
namespace Oxide.Plugins
{
[Info("Framework Check", "RustPluginGenerator", "1.0.0")]
[Description("Replies to a chat command with a localized message")]
public class FrameworkCheck : RustPlugin
{
private void LoadDefaultMessages()
{
lang.RegisterMessages(new Dictionary<string, string>
{
["Reply"] = "This plugin is running."
}, this);
}
private string Msg(string key, string userId = null, params object[] args) =>
string.Format(lang.GetMessage(key, this, userId), args);
[ChatCommand("fwcheck")]
private void CmdCheck(BasePlayer player, string command, string[] args)
{
if (player == null) return;
player.ChatMessage(Msg("Reply", player.UserIDString));
}
}
}If this loads and answers /fwcheck on a fresh install, the basics of your setup are working.
When to choose which
Choose Oxide when:
- you want the framework most tutorials, plugin pages and support threads assume,
- your host only offers Oxide,
- you depend on a plugin known to behave best there.
Choose Carbon when:
- you want its built-in admin panel and extra tooling,
- load time and overhead matter on a large plugin set and you have measured the gain,
- you are comfortable testing each plugin after switching.
If you are unsure, start with whichever your host supports and keep your plugins in standard form. Because Carbon loads Oxide plugins, you keep the option to switch later. See install Oxide on a Rust server and how to install Rust plugins for setup steps.
Writing plugins that stay portable
- Extend
RustPluginand use documented hooks only. - Avoid framework-specific APIs unless you target one framework.
- Keep permission names prefixed with the lowercase class name.
- Use
Config,langandInterface.Oxide.DataFileSystemfor persistence. - Test on both if you distribute the plugin.
You can generate a plugin that follows these rules with the plugin generator, and the guide to making a Rust plugin covers the basics.
FAQ
Can I run Oxide and Carbon on the same server at the same time?
No. Both frameworks patch the game's server assemblies to inject hooks, so a server should run one of them. Installing both leads to duplicate hook calls or startup failures. Pick one, remove the other's files completely, and then restart the server rather than trying to layer them.
Do I need to edit my plugin to run it on Carbon?
Usually not. A plugin that extends RustPlugin with standard hooks, config, lang and permission calls loads on Carbon unchanged. Problems appear mostly in plugins that depend on Oxide internals, unusual reflection or another plugin that is itself missing. Test each plugin after switching and read the console output.
Will my permissions survive a switch?
Only if you copy the permission data. Oxide stores users, groups and grants in its data folder, and Carbon keeps its own copy in its data folder. Copy the permission files before switching, start once, and verify with the show commands. Without copying, players start with default permissions only.
Does a plugin's file name or class name change on Carbon?
No. The same rules apply: the file name must match the main class name, the class extends RustPlugin and the Info attribute is required. Config files are named after the plugin, so keeping the file name unchanged keeps the config name unchanged too.
Is one framework faster than the other?
Carbon's developers advertise lower overhead and faster plugin loading, but real results depend on your plugin set, hardware and version. Slow plugin code usually dominates server cost. Measure on your own server using hook time warnings and a before and after comparison instead of relying on claims.
More guides
- CovalencePlugin vs RustPlugin: Differences and Which to Use4 min read
- How to Debug a Rust Oxide Plugin: Compile Errors, Exceptions and Slow Hooks10 min read
- How to Give Items to Players in a Rust Plugin (Oxide/Carbon)5 min read
- How to Install Oxide on a Rust Dedicated Server (Windows and Linux)7 min read
Skip the C#: describe your plugin
Open generator