How to Install Rust Plugins on an Oxide or Carbon Server
To install a Rust plugin, upload its .cs file to oxide/plugins (Oxide) or carbon/plugins (Carbon) on your server; the framework compiles and loads it automatically, with no restart needed. After loading, edit the generated config in the config folder and grant the plugin's permissions to the groups that should use it.
6 min readUpdated Oct 26, 2026
Upload the plugin's .cs file into oxide/plugins on an Oxide server or carbon/plugins on a Carbon server. The framework detects the file, compiles it and loads it without a restart. Afterwards you edit its config, grant permissions and confirm it loaded.
This guide assumes the framework is already running. If not, start with installing Oxide on a Rust server.
Where plugin files go
| Item | Oxide | Carbon |
|---|---|---|
| Plugins (.cs) | oxide/plugins | carbon/plugins |
| Config files | oxide/config/<Name>.json | carbon/configs |
| Data files | oxide/data | carbon/data |
| Language files | oxide/lang/<lang>/<Name>.json | carbon/lang |
| Logs | oxide/logs | carbon/logs |
Both folders live in the server's root directory, next to the RustDedicated binary. Carbon loads Oxide plugins, so the same .cs file works in either place.
Step-by-step installation
- Download the plugin as a single
.csfile. - Check that the file name matches the main class name inside it.
BetterChat.csmust containpublic class BetterChat. Do not rename the file, because a mismatch causes a filename error. Browsers sometimes append(1)to repeat downloads, so check for that. - Upload it to the plugins folder.
- Watch the server console or log. A successful load prints
Loaded plugin <Title> v<Version> by <Author>. There is no separate "compiled successfully" message. - Configure it and set permissions (below).
Uploading with a hosting panel
Most Rust hosts offer a web file manager, and the steps are the same everywhere:
- Open the file manager and browse to the server's
oxide/pluginsfolder (orcarbon/plugins). If the folder is missing, the framework is not installed yet or the server has never started with it. - Use Upload and select the
.csfile, or create a new file and paste the code. - Use the panel's console to watch for the load message, or send
oxide.plugins.
With FTP or SFTP, drag the file into the same folder. Upload in binary or auto mode; a corrupted transfer produces strange compile errors. Some panels cannot show the console of a running server, so check oxide/logs instead.
Automatic loading and reloading
Oxide and Carbon watch the plugins folder:
- A new
.csfile is compiled and loaded. - A saved change to an existing file reloads that plugin.
- A deleted file unloads it.
You can also manage plugins manually from the server console or RCON:
oxide.plugins
oxide.load MyPlugin
oxide.reload MyPlugin
oxide.unload MyPlugin
oxide.reload *oxide.plugins lists loaded plugins with their versions, authors and the time they spend. Carbon accepts these same commands. More are covered in Oxide console commands.
During a load the plugin goes through Init, config and language loading, then Loaded, and then OnServerInitialized. On a server that is already running, OnServerInitialized is called right away with false. On reload or unload, Unload runs first so the plugin can clean up.
Configuring a plugin
Many plugins create a JSON config the first time they load. Look for oxide/config/<PluginName>.json (or the matching file in carbon/configs).
- Edit the file in your panel or editor.
- Keep it valid JSON: quotes around keys, commas between entries, no trailing commas.
- Reload with
oxide.reload <PluginName>so the values are read.
If the file is invalid, the plugin typically falls back to defaults and warns you, or logs a corrupt config error. Deleting the config file and reloading regenerates defaults. How plugins read these files is explained in Rust plugin config files.
Player-facing text is usually stored under oxide/lang/<language>/<PluginName>.json. Edit it to translate or reword messages. See Rust plugin localization.
Setting permissions after install
Most plugins register permissions named <pluginname>.<action>, such as myplugin.use. Nobody has them until you grant them.
oxide.grant group default myplugin.use
oxide.grant user 76561198000000000 myplugin.admin
oxide.show perms
oxide.show perm myplugin.usedefaultis the group every player belongs to;adminis the admin group.- Use
oxide.usergroup add <player> <group>to place players in groups such asvip, after creating the group withoxide.group add vip. oxide.show permslists every registered permission, which is how you find a plugin's permission names. The plugin's description page usually lists them too.
Server owners in the console are not restricted by permissions, but in-game admins may still need them. Full details are in Oxide permissions and groups.
Updating a plugin
- Back up the old
.csfile and the plugin's config and data files. - Overwrite the file in the plugins folder with the new version. The plugin reloads automatically.
- Check the console for the new version in the
Loaded pluginline. - Compare your config with the new defaults. New versions can add keys. Many plugins save missing keys automatically, but not all do.
Keep the oxide/data file unless the release notes say otherwise; it holds player data such as balances or homes. If a game update broke plugins, see fixing Rust plugins after an update and the monthly hook change reports.
Removing a plugin
- Delete the
.csfile from the plugins folder, or runoxide.unload <Name>first. - Optionally delete its config, data and lang files.
- Optionally revoke its permissions. Granted permissions remain in the permission data even when the plugin is gone, and they are harmless.
Keep the data file if you may reinstall later. Deleting the .cs file is enough to stop the plugin from running.
Troubleshooting a plugin that does not load
Start with the console or oxide/logs, then work through this list.
| Symptom | Likely cause | Where to look |
|---|---|---|
Error while compiling <Name>: | Code error or missing reference | The numbered messages show [1] message at line:column |
Plugin missing from oxide.plugins | File not in the right folder, wrong extension, or compile failure | Check the path and for .cs.txt extensions |
| Nothing at all in the console | Framework not installed, or files uploaded to the wrong server directory | oxide.version |
| Plugin loads but does nothing | Missing permissions, or a missing dependency plugin | oxide.show perms, config |
Failed to initialize plugin | Exception in Init or Loaded | Failed to initialize plugin |
Failed to call hook | Runtime error after loading | NullReferenceException in a hook |
Common causes in more detail:
- Wrong file name. The file name must match the main class, as in filename must match main class.
- Not an Oxide plugin. Some downloads are Harmony mods or other formats, see uMod plugin not an Oxide plugin.
- Outdated plugin. After a Rust update, hooks or game members change and the compile fails with errors like CS1061 or CS0117. Look for an updated version.
- Missing dependency. See plugin requires missing dependency.
- Corrupt config. Delete the config file and reload.
- Missing metadata. See Info attribute missing.
A file that fails to compile is skipped, and all other plugins still load. For a deeper workflow see debugging Rust plugins.
Plugins that fit your server
If you need a feature and cannot find a plugin for it, browse a category such as quality of life or admin, or build one from a recipe like auto broadcast. You can also describe the behavior you want in the plugin generator and install the resulting .cs file with the steps above. For writing your own, see how to make a Rust plugin.
FAQ
Do I need to restart the server after installing a plugin?
No. Oxide and Carbon watch the plugins folder, so a new or changed .cs file is compiled and loaded within moments. A restart is only needed when you install or update the framework itself. If a plugin does not appear, run oxide.plugins and check the console for compile errors.
Can I use Oxide plugins on a Carbon server?
Yes. Carbon loads Oxide plugins from carbon/plugins and accepts the oxide.* console commands such as oxide.grant and oxide.reload. Plugins written against Oxide's API generally run unchanged, but a plugin that depends on a specific Oxide-only behavior may still need fixing. See Oxide vs Carbon.
Why does my plugin config file not exist after installing?
The config file is written when the plugin loads successfully and saves its defaults. Not every plugin creates one, and a plugin that failed to compile never gets that far. Confirm the plugin loaded with oxide.plugins, then look in oxide/config (or carbon/configs) for a file named after the plugin.
Is it safe to install any plugin I download?
Plugins run as full server code, so only install files from sources you trust and read what you can. Be wary of plugins that make web requests or touch files. Never run a plugin you cannot review on a production server. See Rust plugin security.
How do I install a plugin that needs another plugin?
Install the dependency first, such as Economics or ImageLibrary, into the same plugins folder. Oxide reloads dependent plugins when the dependency loads. If the dependency is missing, the plugin may fail to load or silently lose features; the error page plugin requires missing dependency covers it.
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