How to Install Mods on a Rust Server
The cleanest way to add plugins to a Rust server: choose Oxide or Carbon, install it so updates don’t wipe it, add plugins one at a time, configure them and set permissions, and keep a modded server stable through every Rust update.
If you want Kits, Gather Manager or UI plugins, plan for the Modded tab from the start. Trying to force a gameplay-altering server into Community creates admin work and listing problems.
Oxide and Carbon solve the same job in different ways. Running both in one Rust server install breaks files, commands and plugin loading.
Plugins are C# source files compiled on the server. Installing one at a time makes compile errors, bad permissions and performance drops easy to trace.
Facepunch updates are normal. The trick is knowing what SteamCMD validate changes, what your framework expects, and how to roll back configs and data if a plugin update goes wrong.
What “mods” means on a Rust server
For Rust, a “modded server” usually means a standard Rust server running server-side plugins through a modding framework. Players do not install anything to join. All plugin code runs inside the server process, so the work lands on your server’s CPU, memory, disk and network rather than on the client.
There are four parts to keep straight:
- Framework: Oxide or Carbon. This is the loader and hook system that lets plugins talk to Rust.
- Plugin: a
.csC# source file, such as Kits, Gather Manager, Vanish or Admin Radar. - Config: the plugin’s settings, usually JSON, created after the plugin loads.
- Data: the plugin’s saved state, such as player records or stored values between restarts and wipes.
Under the hood, the framework exposes hooks into Rust events. A plugin can listen for things like players gathering resources, joining, chatting or opening containers. Every hook call costs some CPU time, usually on the main server thread, so the busiest plugins are not the ones with the longest feature list but the ones attached to frequent events. Plugins with large data files also use heap memory and can add disk activity when they save often.
That is why the cleanest first setup is simple: pick one framework, load one plugin, confirm it compiles, set its permissions, then move to the next. A messy install with ten new files at once gives you no clear fault line when the Rust server starts throwing compile errors or tick-rate drops.
Decide first: Community or Modded tab
Make this decision before you install anything. Facepunch’s rule is straightforward: when using plugins with your Rust server, you should normally be listed under Modded. You can stay in Community only if every plugin follows the Community guidelines.
Use this matrix to separate safe admin tools from plugins that change gameplay or UI.
| Plugin type | Community tab | Modded tab |
|---|---|---|
| Admin tools that don’t change gameplay (Vanish, Admin Radar, Logger) | Yes | Yes |
| Anti-cheat tools that only affect the cheater | Yes | Yes |
| Skip-queue and chat plugins (Bypass Queue, Better Chat) | Yes | Yes |
| Custom maps and the mods they need | Yes | Yes |
| Changing vanilla convars (team size, decay scale) | Yes | Yes |
| Gameplay changes (Gather Manager, Furnace Splitter, Kits) | No | Yes |
| Any in-game UI (InfoPanel, Loading Messages, Skinbox) | No | Yes |
| Selling items, kits or resources via UI or a store | No | Yes |
What usually forces you into Modded is anything that changes how the game plays or looks. That includes gather rates, item spawns, player spawns, smelting changes, selling kits or resources through custom UI or an external store, and plugins that display or modify in-game UI such as logos or loading messages. Examples given by Facepunch include Furnace Splitter, Gather Manager, Kits, InfoPanel, Loading Messages and Skinbox.
What can stay in Community is much narrower: admin tools that do not alter gameplay, anti-cheat tools that only affect the cheater, skip-queue and chat plugins, custom maps and any mods needed for those maps, plus vanilla convars such as team size, decay scale and population controls. Examples on the allowed side include Vanish, Admin Radar, Stash Traps, Logger, Group Limits, Bypass Queue, Colored Nicknames and Better Chat.
How the frameworks set the tab flag
Oxide marks the server as Modded by default. If you genuinely meet the Community rules, set Modded to false in oxide/oxide.config.json and restart the server.
{
"Options": {
"Modded": false
}
} Carbon uses IsModded and defaults to Modded as well. Its cleaner approach is to use the built-in commands that apply the right changes and tell you why the server is being flagged.
c.gocommunity c.whymodded
If your plan includes kits, gather rates or any custom UI at all, stop trying to preserve a Community listing. Set expectations early, run Modded, and manage the server around that choice.
Choose a framework: Oxide or Carbon
Both frameworks load Rust plugins, but they do it differently. Oxide ships patched Rust server DLLs, so a file verify or SteamCMD validate restores the game to vanilla and removes those patches. Carbon patches at runtime using Harmony, so the base Rust files stay intact and a validate does not strip the framework out.
| Point | Oxide / uMod | Carbon |
|---|---|---|
| Plugin compatibility | Native home for Rust plugins built for Oxide | Designed to run most Oxide plugins too |
| How it installs | Extract framework files into the server root and overwrite patched files | Unpack in the server root; patches happen at runtime |
| Behaviour after Rust updates | Must be reinstalled after every Rust server update | Not removed by SteamCMD validate, but should still be kept updated |
| Plugin folder | oxide/plugins | carbon/plugins |
| Config folder | oxide/config | carbon/configs |
| Commands | oxide.* or o.* | c.* |
| Hook handling | Standard plugin hooks | Dynamic hooks load only when a plugin uses them |
| Can they coexist? | No | No |
Neutral rule of thumb: if you want the most familiar Oxide-based workflow, use Oxide. If you want a framework that survives SteamCMD validate because it does not replace the game’s managed files, Carbon is the tidier long-term fit. Just do not install both in the same Rust server folder.
Step 1: install Oxide cleanly
This is the standard route if you are starting with Oxide plugins. The important detail is where the files go: extract at the server root so the archive’s RustDedicated_Data folder merges into your server’s existing RustDedicated_Data folder.
- Stop the Rust server fully. Oxide’s own documentation warns that uploading files while the server is running can corrupt server data.
- Download the latest stable Oxide build for your operating system, not a pre-release:
Oxide.Rust.zipfor Windows orOxide.Rust-linux.zipfor Linux. - Extract the archive into the server root, where
RustDedicated.exeandRustDedicated_Dataalready exist. - Allow overwrite when prompted.
- Start the server and check the console for the framework loading.
- Verify with the version command.
oxide.version oxide.plugins
Your normal Rust server config still lives in server/<identity>/cfg/server.cfg. Oxide is additional framework logic on top of that base install, not a replacement for Rust’s own config location.
Why this works: Oxide supplies patched server DLLs. When Rust starts, those patched files expose the hook points that plugins need. The trade-off is maintenance: anything that restores the vanilla game files, especially a SteamCMD validate or a host start script that runs SteamCMD after Oxide has been installed, removes the framework. If your plugins vanish after an update and the server suddenly looks vanilla, that is usually what happened.
Step 1 alternative: install Carbon
Carbon is installed at the server root too, but its update behaviour is different because it patches at runtime rather than replacing Rust’s managed DLLs.
Windows
- Stop the server.
- Download the Windows release archive.
- Unpack it into the server root, on top of the folder containing
RustDedicated.exe. - Launch the server as normal and verify Carbon loaded.
c.version c.plugins
Linux
- Stop the server.
- Unpack the Linux release archive into the server root.
- When starting the server, verify or update the game files first, then source Carbon’s environment script, then launch RustDedicated.
./steamcmd.sh +force_install_dir /path/to/rust +login anonymous +app_update 258550 -beta public validate +quit cd /path/to/rust source carbon/tools/environment.sh ./RustDedicated -batchmode ...
Some Linux distributions and Docker setups also need TERM=xterm exported before launch.
Why this works: Carbon does not modify RustDedicated_Data/Managed. It hooks at runtime through Harmony, so a file validate keeps Carbon intact instead of wiping it. That makes boot-time SteamCMD verification much less painful than on Oxide. Carbon also supports self-updating, but you should still treat framework updates carefully and watch the console after every Rust patch.
If you are migrating from Oxide, do it as a clean switch: shut the server down, disable any Oxide auto-install tooling, restore vanilla files with a SteamCMD validate, then unpack Carbon. The first Carbon start can migrate compatible config, data, language files and permissions. That one-way convenience is useful, but it is still safer if you keep a backup before the first Carbon boot.
Step 2: add your first plugin and check the file layout
Start with one small plugin, not a bundle. A sensible first pick is an admin tool like Vanish or Admin Radar first, then something gameplay-related like Kits or Gather Manager once the framework basics are confirmed.
- On Oxide, place the plugin’s
.csfile inoxide/plugins. - On Carbon, place it in
carbon/plugins. - Do not rename the plugin file or change the extension.
- Watch the console as soon as you upload it.
Plugins are compiled automatically on the server from C# source. A successful load usually appears as a “Loading plugin” style message; a failed load shows a compile error. No full restart is normally required. Oxide detects file changes automatically, and Carbon can hot reload too; with Carbon, ScriptWatchers handle this by default, or you can reload manually.
oxide.plugins oxide.reload <PluginName> c.plugins c.reload <PluginName>
If you need plugin files, the usual places are uMod and Codefling. The important part is maintenance, not where you found the file: old plugins often compile badly after Rust API changes, especially after monthly updates.
| Folder | Oxide | Carbon | What it is for |
|---|---|---|---|
| Plugins | oxide/plugins | carbon/plugins | .cs plugin source files that the server compiles and loads |
| Config | oxide/config | carbon/configs | Plugin settings you are expected to edit |
| Data | oxide/data | carbon/data | Persistent saved data; avoid hand-editing unless the plugin author expects it |
| Language | oxide/lang | carbon/lang | Text strings shown to players |
| Logs | oxide/logs | carbon/logs | Framework or plugin log output for troubleshooting |
Step 3: configure it properly, then set permissions
Most plugins create their config file only after the first successful load. So the order is: upload plugin, confirm it loads, then edit its JSON config. Keep the JSON valid: double quotes only, commas in the right places, and no trailing mistakes.
oxide.reload <PluginName> oxide.unload <PluginName> # edit the JSON oxide.load <PluginName>
The unload-edit-load method matters because some plugins save their config on unload. If you edit while the plugin is still active, it can write its old in-memory values back over your changes. If a plugin seems to ignore edits, unload it first, make the change, then load it again.
Back up configs before every edit session, and avoid touching data files unless you know the plugin’s storage format. Configs define intended behaviour; data files often hold live state that plugins expect in a very specific shape.
Grant permissions to groups, not individuals
Permissions decide who can use plugin commands or features. Give those rights to groups wherever possible. That keeps administration predictable: when staff change, you move users in or out of groups instead of hunting through a pile of one-off grants.
oxide.group add vip oxide.grant group vip myplugin.use oxide.usergroup add 7656XXXXXXXXXXXXXX vip oxide.grant user 7656XXXXXXXXXXXXXX myplugin.use oxide.show groups oxide.show perms
Oxide includes the default groups default and admin. Carbon uses the same idea with c. commands instead:
c.group add vip c.grant group vip myplugin.use c.usergroup add 7656XXXXXXXXXXXXXX vip
Type any Carbon permission command on its own (for example c.grant or c.show) and it prints its exact syntax, which is the quickest check if a command is rejected.
Why this works: most plugin commands first check a permission string before doing anything. If the player cannot use a command, the plugin is often fine and the permission is the missing piece. The trade-off is operational rather than technical: loose grants make moderation messy, while good group structure reduces mistakes and speeds up support when players say a command does nothing.
Keeping plugins working through Rust updates
Facepunch updates Rust regularly, and plugin servers have to plan around that. The key difference is framework behaviour: Oxide must be reinstalled after every Rust server update, while Carbon is not removed by a SteamCMD validate because it does not overwrite the managed game files.
If your host or startup script runs SteamCMD on boot, pay attention to the order. On Oxide, a validate after framework install reverts the server to vanilla and your plugins stop loading because the hooks are gone. On Carbon, validation is fine, but you should still keep Carbon itself updated and confirm it loads after boot.
- Before the update, back up your framework folders: at minimum
oxide/configandoxide/datafor Oxide, orcarbon/configsandcarbon/dataif you run Carbon. - Stop the server cleanly.
- Update Rust itself through your panel or SteamCMD using the public branch.
- If you use Oxide, reinstall the latest stable Oxide build into the server root after the Rust update.
- If you use Carbon, update Carbon if needed, then keep the normal boot order: verify or update game files first, source the Carbon environment on Linux, then start RustDedicated.
- Start the server and watch the console closely for framework version messages, plugin compile errors and missing dependency warnings.
- Run a plugin list command and test one permissioned command before opening the server fully.
- If a plugin broke after the update, disable only that plugin first rather than tearing the whole framework out.
Rollback is simplest when you keep dated backups. If a plugin update corrupts a config or writes bad data, restore that plugin’s config and data from the last known good copy, then reload the plugin. If console output is thin in your panel, using a launch parameter such as -logFile can make the failure clearer.
Keep a modded Rust server manageable
Most plugin trouble is self-inflicted through sprawl. Add one plugin at a time, note why you installed it, and keep a small changelog of file dates, config changes and granted permissions. That gives you a clean path back when a wipe, Rust patch or plugin revision changes behaviour.
- Prefer maintained plugins: after Rust API changes, abandoned plugins are more likely to fail compilation or produce stale hooks.
- Watch
server.fps: it is a practical signal for plugin overhead, especially after adding gather, loot or heavy admin tools. For the wider resource picture, see our Rust server requirements guide. - Remove unused plugins: a loaded plugin still runs its hook code every time those events fire, even if nobody uses its commands. Carbon’s documentation adds that Oxide fires its hooks whether or not a plugin needs them, while Carbon only runs the hooks loaded plugins actually use.
- Back up before each wipe and update: configs and data matter more than the plugin file itself because they hold your actual server rules and saved state.
What the server is doing underneath matters here. A plugin that listens to frequent events such as gathering, combat, spawning or inventory actions adds main-thread CPU work every time those hooks fire. Large data sets add heap pressure and can lengthen save or load operations. Logging-heavy plugins add disk writes. UI-heavy or chat-heavy plugins can add some bandwidth as they send extra messages to connected players. The best sign that a change helped is not a feeling but a cleaner console, stable plugin reloads and a better server.fps after unloading the suspect plugin and comparing behaviour.
Troubleshooting and deciding when to tune or upgrade
Common plugin problems
| Symptom | Likely cause | First fix |
|---|---|---|
| Plugin not loading or compile error | Outdated plugin, wrong framework version, bad C# syntax or missing dependency | Read the console message, confirm the plugin matches your framework, then replace it with a maintained version and reload it |
| Plugins vanished after restart | Oxide was reverted by SteamCMD validate or a boot script updated Rust after Oxide was installed | Check the startup order, update Rust first, then reinstall Oxide and restart |
| Config edits are ignored | The plugin overwrote your edits on unload or the JSON is invalid | Unload the plugin, edit the JSON carefully, then load it again |
| Players cannot use a command | Missing permission or user not in the right group | Check with oxide.show perms (or c.show on Carbon), grant the permission to a group, then add the player to that group |
| Server moved to the Modded tab | You installed a gameplay-altering or UI plugin, or the framework is still set to modded by default | Remove disallowed Community plugins and set the framework’s Community option correctly, or accept a Modded listing |
| Both frameworks appear installed | Mixed Oxide and Carbon files in one server root | Shut down, choose one framework, restore vanilla files if needed, then reinstall only the chosen framework |
| Lag started after adding a plugin | Heavy hooks, large data processing or excessive logging | Unload the newest plugin first, re-check server.fps, then add plugins back one by one |
Tune it first or move to a better plan?
If you are not sure whether your problem is plugin hygiene or raw hardware, it helps to understand how game server hardware requirements work. Plugins mainly punish weak single-thread CPU performance and poor admin routines long before they justify random guesswork with bigger plans.
| Situation | Tune first | Upgrade or move when |
|---|---|---|
| First plugin setup | Use one framework, one plugin, one permission group and confirm clean console output | You need easier file access, scheduled backups or a panel that handles framework installs more cleanly |
| Performance dipped after mods | Unload recent plugins, reduce hook-heavy extras and trim logging | The server still struggles after plugin cleanup and basic tuning |
| Updates keep breaking the server | Fix startup order, automate backups and document your update routine | Your current environment makes routine file work awkward or hides logs you need |
| You want low-admin convenience | Use many hosts’ one-click framework installers and file managers carefully, but still verify paths and versions yourself | You need a panel and support setup that makes monthly maintenance less manual |
Many hosts offer one-click framework installs, file managers and scheduled backups, which can make the monthly Rust update routine much less fiddly. If you are comparing those basics rather than chasing gimmicks, our Rust server hosting comparison is a sensible starting point.
Compare the best Rust server hostsRust server FAQ
Do players need to download anything to join a modded Rust server?
No. Rust server plugins are server-side, so players join with the normal game client. The framework and plugin code run on your server, not on the player’s PC.
Should I use Oxide or Carbon?
Use one, never both. Oxide is familiar and widely used, but it must be reinstalled after every Rust server update because SteamCMD validate restores vanilla files. Carbon is designed to run most Oxide plugins and survives file validation because it patches at runtime.
Will plugins put my Rust server in the Modded tab?
Usually, yes. Admin-only tools can still fit Community if they follow Facepunch’s guidelines, but gameplay changes like kits, gather rates, smelting changes and custom UI force a Modded listing. If your plan includes those features, treat Modded as the correct destination from day one.
Why did my plugins disappear after a Rust update?
On Oxide, the usual cause is that the Rust update or a SteamCMD validate removed Oxide’s patched files and returned the server to vanilla. Reinstall the matching Oxide version after the Rust update, then start the server again. On Carbon, the framework is not removed by validate, so look first for plugin-specific compile errors or a missed Carbon update.
Can I install Rust plugins without restarting the server?
Usually, yes. Uploading a .cs file to the correct plugin folder triggers automatic compilation, and you can reload plugins with framework commands if needed. Full restarts are still sensible for framework installs, major updates and cases where you need to rule out stale state.
More Rust server help
Compare hosts, or check what your modded server needs in RAM and CPU.
Game updates, framework releases and host panels change over time; if your host’s current panel flow differs from the file paths or update order above, follow the host’s current process for the same underlying tasks.