How to Install Oxide (uMod) on a Linux Rust Server

Install Oxide on a Linux Rust server: the right build, the folder layout, plugins, permissions, reinstalling after every Rust update and a clean uninstall.

Last updated Verified on Ubuntu 26.04.1 LTS, Rust build 25581777, Oxide 2.0.7726, 2026-09-28

On this page

Oxide (also called uMod) is the long-standing plugin framework for Rust. It works by replacing some of the game's own .NET assemblies with patched copies that load Oxide at startup. That one fact explains almost everything in this guide: why the server must be stopped, why updates break it, and why deleting a folder is not enough to remove it.

This guide assumes a Rust server installed with SteamCMD on a Linux machine (Ubuntu or Debian) that runs as a systemd service, on the public branch.

What the Oxide archive changes

The Linux release is a single zip, Oxide.Rust-linux.zip. We downloaded release 2.0.7726 on 2026-09-28 and listed it. Everything in it sits under RustDedicated_Data/Managed/:

  • Patched game assemblies, the same file names Rust ships: Assembly-CSharp.dll, Facepunch.Console.dll, Facepunch.Network.dll, Facepunch.Rcon.dll and a few more. These are what hook Oxide into the game.
  • Oxide itself: Oxide.Common.dll, Oxide.Core.dll, Oxide.CSharp.dll, Oxide.MySql.dll, Oxide.References.dll, Oxide.Rust.dll, Oxide.SQLite.dll and Oxide.Unity.dll.
  • Support libraries such as System.Data.SQLite.dll and native x64/ and x86/ folders.

Because the zip already contains the RustDedicated_Data/Managed path, you extract it into the server's install directory (the folder that holds RustDedicated), not into RustDedicated_Data.

The patched Assembly-CSharp.dll is built for one game version. The Oxide docs put it plainly: for every server update by Facepunch there is an Oxide update, and you should not mix versions.

Before you start

The game files are owned by root in the layout below, so open a root shell first (sudo -i) and run everything in it. If your server runs as its own user, run the file commands as that user instead. Then set two variables so the commands match your machine. The paths shown are where the Panelra agent puts things; change them to yours.

RUST_DIR=/opt/rust-servers/instance-1          # folder that contains RustDedicated
STEAMCMD=/opt/rust-servers/steamcmd/steamcmd.sh

Check which game build you have and which Oxide release is current. The build id is in the Steam app manifest, and uMod publishes the latest Oxide version as JSON:

grep buildid "$RUST_DIR/steamapps/appmanifest_258550.acf"
curl -sL -A "Mozilla/5.0" https://umod.org/games/rust.json | grep -o '"latest_release_\(version\|at\)": *"[^"]*"'

If Facepunch shipped an update today and the Oxide release is older than that update, wait for the new Oxide build before you update the game.

Take a backup of $RUST_DIR/server/ (your map, blueprints and config) before you touch the game files.

Install Oxide step by step

1. Stop the server. Oxide's own docs say this is critical: copying files under a running server can corrupt its data. Replace rust-server with the name of your systemd unit.

systemctl stop rust-server
systemctl is-active rust-server   # should print "inactive"

2. Install unzip if the machine does not have it. A minimal Ubuntu server often does not.

apt-get update && apt-get install -y unzip

3. Download the Linux build and extract it over the install directory. The latest/download URL always points at the newest release. -o overwrites the existing game DLLs without asking, which is what you want here.

cd "$RUST_DIR"
curl -sL -o oxide-rust.zip https://github.com/OxideMod/Oxide.Rust/releases/latest/download/Oxide.Rust-linux.zip
unzip -o oxide-rust.zip -d "$RUST_DIR"
rm oxide-rust.zip
ls RustDedicated_Data/Managed/Oxide.*.dll

If the server runs as a non-root user and you extracted as root, give that user ownership of the new files, for example chown -R rust:rust "$RUST_DIR".

4. Start the server and check that Oxide loaded.

systemctl start rust-server
journalctl -u rust-server -f

During startup you should see Oxide messages in the log. Once the server is up, run oxide.version from an RCON client or from the F1 console as an admin. It prints the installed Oxide version.

Where Oxide keeps its files

On first start Oxide creates an oxide/ folder in the server's working directory. With a systemd unit that is the WorkingDirectory= line, which is normally the install directory.

FolderWhat goes there
oxide/pluginsPlugin source files (.cs). Oxide compiles them itself.
oxide/configOne JSON config per plugin, named after the plugin, created on first load.
oxide/dataData plugins store between restarts, plus Oxide's own users and groups data.
oxide/langPlugin message translations.
oxide/logsOxide and plugin logs. Check here first when a plugin fails to load.

Back up oxide/config and oxide/data together with your save files. The data folder holds things like economy balances and the permission groups you set up.

Install a plugin

Plugins are single .cs files. Oxide watches oxide/plugins and compiles and loads a plugin as soon as the file appears, so the server does not need a restart. Do not rename the file or change its extension.

Every plugin page on uMod has a download link. The same link is in the plugin's JSON as download_url. For example, for Vanish:

cd "$RUST_DIR"
curl -sL -A "Mozilla/5.0" -o oxide/plugins/Vanish.cs https://umod.org/plugins/Vanish.cs

Watch the journal for a message that the plugin loaded, with its name and version. If it fails to compile, the error is in the journal and in oxide/logs.

To change a plugin's settings, edit its file in oxide/config, keep it valid JSON, then reload it with oxide.reload Vanish. Some plugins write their config back when they unload, which can undo your edit. If that happens, run oxide.unload Vanish, edit the file, then oxide.load Vanish.

To update a plugin, replace the .cs file with the new version. Oxide detects the change and reloads it. To remove one, delete the .cs file. Its config and data files stay behind until you delete them.

Permissions basics

Most plugins do nothing for players until you grant a permission. Permissions are strings like pluginname.action; Vanish, for example, registers vanish.allow. The plugin's uMod page lists them, and oxide.show perms lists every permission the loaded plugins registered.

Oxide creates two groups by default. Every player who connects is in default, and players the server recognizes as owners (via ownerid in server/<identity>/cfg/users.cfg) are put in admin. Run these from RCON or the F1 console:

oxide.grant group admin vanish.allow
oxide.grant user 76561199558781314 vanish.allow
oxide.group add vip
oxide.usergroup add 76561199558781314 vip
oxide.revoke user 76561199558781314 vanish.allow
oxide.show group admin

Group permissions are inherited by every member, so it is easier to grant to groups and move players between them than to grant to single players. A wildcard grants everything under a prefix, for example oxide.grant group admin vanish.*. Be careful with oxide.grant group admin *, which grants every permission of every plugin. The same commands also work with the short o. prefix, such as o.grant.

Oxide keeps users, groups and grants in its own oxide.users and oxide.groups data files in oxide/data, not in the map save, so a map wipe does not reset them. Deleting oxide/data does.

After every Rust update: reinstall Oxide

A game update is where most Oxide servers break. SteamCMD's app_update ... validate compares the game files with Steam's copy and replaces anything that differs, and that includes the patched Assembly-CSharp.dll. After the update the server comes back as vanilla Rust: Oxide does not load and none of your plugins run.

So the update and the Oxide reinstall are one job. Stop the server, update, reinstall Oxide, start:

systemctl stop rust-server
"$STEAMCMD" +force_install_dir "$RUST_DIR" +login anonymous +app_update 258550 validate +quit
cd "$RUST_DIR"
curl -sL -o oxide-rust.zip https://github.com/OxideMod/Oxide.Rust/releases/latest/download/Oxide.Rust-linux.zip
unzip -o oxide-rust.zip -d "$RUST_DIR"
rm oxide-rust.zip
systemctl start rust-server

Things to watch:

  • Match the versions. The Oxide release has to be the one built for the game version you just installed. If the game update is newer than the latest Oxide release, the patched assembly from the old release does not match the new game code. Compare latest_release_version and latest_release_at from uMod with the time of the game update before you start the server again, and wait for the new build if it is not out yet.
  • Do not let a start script update the game behind your back. The Oxide docs call this out as a common mistake: a start script that runs SteamCMD on every boot silently turns the server back into vanilla. If you want updates on boot, reinstall Oxide in the same script.
  • Keep plugins current too. A game update can break plugins that use changed game code. Look for plugin updates on uMod after the server comes back.

Uninstall Oxide cleanly

Deleting oxide/ alone leaves the patched game DLLs and the Oxide.*.dll files in place. The order below matters, because the patched Assembly-CSharp.dll depends on the Oxide DLLs. Deleting them first would leave a game that cannot load its own assembly.

  1. Stop the server.
  2. Validate the game files with SteamCMD. This puts the vanilla DLLs back. Note that it also updates the server to the latest build on its branch if one is out.
  3. Delete the Oxide.*.dll files, which are no longer referenced.
  4. Delete oxide/. This removes every plugin, config, data file and permission you set up, so back it up first if you might come back.
  5. Start the server.
systemctl stop rust-server
"$STEAMCMD" +force_install_dir "$RUST_DIR" +login anonymous +app_update 258550 validate +quit
cd "$RUST_DIR"
tar czf ~/oxide-backup.tar.gz oxide
rm -f RustDedicated_Data/Managed/Oxide.*.dll
rm -rf oxide
systemctl start rust-server

These commands are for the public branch. On another branch, SteamCMD needs -beta <branch> after +app_update 258550 in both the update and the validate step. The Oxide release linked above targets the public branch, so check Oxide's own releases before running it on staging.

Let Panelra keep Oxide in sync

Panelra does all of this for you: install the agent on your Linux host, and you can install Oxide from the dashboard in one click, add plugins from the uMod catalog, edit their configs in the browser and grant permissions without typing RCON commands. Panelra tracks new Oxide releases and can update Oxide on your servers when one comes out. Removing Oxide in Panelra stops the server, validates the game files with SteamCMD, deletes the Oxide DLLs and the oxide/ folder, and starts the server again, in the order described above.

Sources

Checked on 2026-09-28:

Frequently asked questions

Do I have to reinstall Oxide after every Rust update?
Yes. A Rust update through SteamCMD replaces the DLLs in RustDedicated_Data/Managed that Oxide patched. The server then starts without Oxide and none of your plugins run until you install the Oxide release built for the new game version.
Can I install Oxide while the server is running?
No. Stop the server first. The Oxide documentation warns that copying the files while the server runs can corrupt server data, and the running process has the old DLLs loaded anyway.
Does removing the oxide folder uninstall Oxide?
Not fully. The patched Assembly-CSharp.dll and the Oxide.*.dll files stay in RustDedicated_Data/Managed. Validate the game files with SteamCMD first, then delete the Oxide DLLs and the oxide folder.
Where do plugin configs and data live?
In oxide/config and oxide/data inside the server's working directory. Plugins go in oxide/plugins and logs in oxide/logs.
How much does Panelra cost?
Free during the open beta. Pricing will be announced before the beta ends.

Skip the manual work: install the Panelra agent

Wipes, updates, restarts, plugins and crash alerts for your Rust servers, from one dashboard. One install command on your Linux host, no inbound ports for the agent.

Free during the open beta. Pricing will be announced before the beta ends.