
MarketX
1 / 16















MARKETX
MarketX is a real stock exchange for Rust items. Players post buy and sell orders for any tradable item, orders match automatically at the best price, and everything bought or earned waits in a personal Claim box, even while the player is offline. Limit, stop and instant orders, candlestick charts, an order book with depth view, timed auctions, player shops and a weekly top-traders board turn trading into a game of its own.
Built for server owners who care about their economy: every trade is escrowed, every fee is tracked in a treasury, a server market maker keeps the book alive from minute one, and anti-RMT, combat block and crash-safe saving keep the market clean. Scrap by default, or any item, Economics or ServerRewards as the currency. Works on Oxide and Carbon with no required dependencies.
In-Game Admin Page
Run the market from an ADMIN button on the market's own rail (permission marketx.admin):
- Market Maker: add the item in your hand, remove items, and edit spread, depth and stock in place.
- Treasury & Fees: total collected, base fee, every VIP profile and the auction fee at a glance.
- Anti-RMT: daily cap, minimum playtime and flag thresholds, plus the list of flagged trades with a REVIEW window (seller, buyer, quantity x price, market price, value moved) and MARK REVIEWED, logged with the admin's name.
- Core Features -
Order Book Trading
- Every tradable item has its own order book: sell orders on one side, buy orders on the other, best price first.
- Orders fill at the waiting order's price, best price first, then oldest first. Partial fills are fine; the rest keeps waiting.
- A buy order that fills below its price gets the difference back automatically.
- Click any price in the book to use it; the price field starts at the best waiting order or the item's usual price, never at a last trade one alt could fake.
- A player's own orders never trade with each other.
- Market list with category buttons, search, 24h change, volume, trend sparkline, lowest sell and highest buy.
Order Types
- INSTANT: trades at once with the best orders. A slippage guard refuses the order if prices moved more than 5% (configurable) since the player looked; nothing is taken.
- LIMIT: waits in the book at the player's price.
- STOP: a sell stop triggers when the price falls to the trigger, a buy stop when it rises to it, then trades within the slippage limit. Stops stay private and out of the book.
- Order validity per order: 1H, 24H, 7D or GTC, with an optional server-wide maximum.
- EDIT open orders without cancelling: lowering the units keeps the queue position, escrow adjusts exactly.
- Large orders and bids ask for a confirmation first (10,000 by default).
Price Chart & 24h Stats
- Candlestick chart with volume bars and a last-price line, ranges 1H, 24H, 7D and 30D (31 days of history).
- 24h high, low and volume-weighted average, 24h volume and change.
- BOOK / DEPTH toggle: a cumulative depth chart of buys and sells.
- Price band protection: trades far from the item's usual price are left out of charts, stats and stop triggers, so one fake trade can't spoof them.
Claim Box & Escrow
- Selling takes the items and buying takes the money the moment the order is placed: no unbacked orders, ever.
- Bought items, sale money, refunds, outbid money and returned items all land in the Claim box, online or offline.
- Take items one by one or all at once; what doesn't fit stays in the box. Collect money in one click.
- Chat message on every fill, expiry or removal, and a reminder on login when the box is not empty.
Auctions
- Hold an item and auction a lot: starting bid, optional buy-out, 1h, 6h, 24h or 48h.
- Bids are held in escrow; an outbid player gets the money back at once. Raising your own bid only takes the difference.
- Minimum bid increment (3% by default) and anti-snipe: a late bid extends the auction (2 minutes by default).
- ENDING SOON, NEWEST and MY BIDS views, a detail page with bid history.
Player Shops
- Every trader has a shop: open limit orders with BUY FROM / SELL TO buttons that prefill the trade.
- Reputation: trades, volume, completion rate and open orders.
- Open from the leaderboard, from an auction's seller name or with /market shop <name>.
Market Maker (NPC)
- A server-owned trader keeps a buy and a sell order on the items you choose, so the market is never empty after a wipe.
- Fair price from the median of the last 25 player trades, or a fixed base price. Spread, depth per side and refill timer per item.
- Unlimited or capped stock. Its trades never count for charts, stats, stop triggers, alerts, the leaderboard or anti-RMT.
- Every posting is logged with running money totals.
Fees, Treasury & VIP
- The seller pays the fee: 2% by default, fixed when the order is placed.
- Category fees replace the base fee for chosen categories (e.g. weapons 3%, custom items 5%).
- VIP profiles: any number of permissions, each with a fee multiplier and extra open orders.
- Auction fee (5% by default) taken from the winning bid.
- Exact rounding: an order always pays floor(total x rate), however it is split into fills.
- Every fee goes into a treasury, shown on the admin page and readable by other plugins.
Price Alerts & Watchlist
- WATCH any item; the WATCHLIST category shows only watched items.
- Alerts for "lowest sell drops to X" and/or "highest buy rises to Y", delivered in chat and as a toast.
- Alerts of offline players wait and fire when they connect. Up to 10 per player by default.
Top Traders
- Weekly leaderboard by volume or by profit, with the time left until the reset.
- Real profit: sale money after fees minus the price the seller paid for those items on the market.
- Configurable reset day and hour (UTC).
Bulk Sell
- SELL ITEMS lists everything in the inventory; tick items or SELECT ALL to see what they bring after fees.
- SELL SELECTED NOW sells each one under the slippage guard; LIST AT BEST ASK places a limit sell at the lowest ask.
- Items that can't be sold (skinned, worn, loaded, not genuine) are listed with the reason.
Custom Items Support
- Trade your own skinned items (tokens, keys, crafted gear) as separate markets with their own name, category and image.
- Identified by shortname + skin + exact name (+ optional item text), so skin plugins can't be used to forge them.
- Item text is restored on delivery, so data-carrying items from other plugins survive the trade.
- Blacklist by shortname, by skin or every custom skin of an item (rifle.ak#*).
Anti-RMT & Combat Block
- Daily volume cap per player and minimum playtime before trading.
- Trades priced far above or below market are flagged: admins are told in chat, it is logged, posted to Discord and listed for review. Nothing is reversed automatically.
- Optional block on trades between team members; team trades never count for prices or the leaderboard.
- Combat block: no market actions while wounded, downed, dead or asleep, or for 30 seconds after fighting a player, scientist or animal, so dying players can't stash their loot. Browsing always works.
- Rate limits on every action and click.
Security & Save Safety
- "Save Only On World Save": the market saves together with the world, so after a crash inventories and market roll back to the same moment. No duplicated or lost items.
- Plugin reloads keep the live market without saving ahead of the world.
- Three rotating save slots; a broken file is never overwritten and trading pauses instead of starting empty.
- Currency change protection: amounts are never reinterpreted; adopt a new currency with an exchange rate in one command.
- Only genuine items trade: condition check (full condition by default), no attachments, contents or loaded ammo, skinned items only as configured custom items. Fuel in chainsaws and flamethrowers is kept.
- Every order, trade, auction, admin action and wipe can be written to log files.
Wipes
- Map wipes are detected, even if they happened while MarketX was unloaded.
- ReturnEscrow (default) returns every open order and auction to the Claim boxes; ClearAll starts fresh; Keep changes nothing.
- Separate resets for price history, alerts and watchlists, market maker, treasury and leaderboard.
Discord
- Webhook posts for big trades (100,000 and up by default), ended auctions and flagged trades.
- Queued (at most one post every 2 seconds) and never pings anyone.
- What you can change in the config -
(oxide/config/MarketX.json; run /market reload after editing)
General
- Chat Command, Permission (empty = everyone).
- Currency: Type (Item, Economics, ServerRewards), Item Shortname, Item Skin, Item Name (required for a skinned currency item), Label.
- Fee Percent (paid by the seller), Min Price Per Unit, Max Price Per Unit.
Orders
- Max Open Orders Per Player, Order Expiry Days, Default Order Validity (1H, 24H, 7D, GTC).
- Min Condition Percent, Max Instant Price Slippage Percent, Confirm Orders Worth At Least.
- Combat Block Seconds, Chart Price Band Percent, Closed Orders Kept Per Player, Max Price Alerts Per Player.
Fees
- Category Fee Percent (category name: percent), Auction Fee Percent.
- VIP Profiles: Permission, Fee Multiplier, Extra Open Orders.
Market Maker
- Enabled, Display Name.
- Per item: Item (shortname or shortname#skin), Spread Percent, Depth Units Per Side, Max Stock (-1 = unlimited), Refill Minutes, Reference Price (Median, Base), Base Price.
Anti-RMT
- Daily Volume Cap Per Player, Min Playtime Minutes Before Trading, Flag Trades Above / Below Market By Percent, Block Trades Between Team Members.
Auctions
- Enabled, Max Running Auctions Per Player, Min Bid Increment Percent, Anti-Snipe Seconds.
Leaderboard
- Weekly Reset Day, Weekly Reset Hour (UTC).
Discord
- Webhook URL, Post Trades Worth At Least, Post Ended Auctions, Post Flagged Trades.
Items
- Categories (Name, Rust Categories), Blacklist (shortname or shortname#skin).
- Custom Items: Name, Shortname, Skin, Category, Image URL, Item Name Must Match, Item Text.
Wipes, Logs & Saving
- Wipe Handling (Keep, ReturnEscrow, ClearAll), Reset Price History / Alerts And Watchlists / Market Maker / Treasury / Leaderboard And Reputation On Wipe.
- Log Trades To File, Save Only On World Save.
- Languages -
10 languages included, and each player sees MarketX in their own game language:
English, Romanian, German, Spanish, French, Italian, Japanese, Brazilian Portuguese, Russian, Simplified Chinese.
- Commands -
Chat (the command name is set in the config):
/market - open the market
/market shop <name or id> - open a player's shop
Admin (chat with marketx.admin, or server console / F1; every admin action is logged):
/market list [item] or marketx.list [item] - list open orders, all or for one item
/market cancel <id> [reason] or marketx.forcecancel <id> [reason] - cancel any order; the owner gets the rest back and is told why
/market clear <item> [reason] or marketx.clearbook <item> [reason] - cancel every order of one item
/market reload or marketx.reload - reload the config
/market currency or marketx.currency - show the saved and the configured currency
/market currency adopt <rate> or marketx.currency adopt <rate> - switch the market to the configured currency at an exchange rate
- Permissions -
marketx.use - open the market and trade (name set in the config; empty = everyone)
marketx.admin - admin commands, the ADMIN page and flagged trade notices; also allows trading
marketx.vip - default VIP profile: half fee and 10 extra open orders (add any number of profiles in the config)
- API for Developers -
Call with MarketX.Call<T>("Name", args). Keys are the item shortname, or shortname#skin for custom items.
long GetBestBid(string key) - highest buy price per unit, 0 if none
long GetBestAsk(string key) - lowest sell price per unit, 0 if none
long GetLastPrice(string key) - last valid trade price per unit, 0 if none
long GetTreasury() - total fees collected
string PlaceOrder(BasePlayer player, string key, bool buy, long qty, long price) - place a limit order for an online player with every normal check (permission, combat block, funds, limits, anti-RMT, hook); returns null on success, otherwise the reason
- Hooks -
object CanMarketXOrder(BasePlayer player, string key, bool buy, long qty, long price) - before any order, edit, auction or bid; return a string (shown to the player) or any non-null value to refuse it
void OnMarketXTrade(string key, ulong seller, ulong buyer, long qty, long price, long fee) - after every fill; the market maker's id is 0
void OnMarketXAuctionEnd(string key, long qty, ulong seller, ulong winner, long price) - when an auction ends; winner and price are 0 when there were no bids
MarketX.json
| 1 | { |
| 2 | "Chat Command": "market", |
| 3 | "Permission (empty = everyone)": "marketx.use", |
| 4 | "Currency": { |
| 5 | "Type (Item, Economics, ServerRewards)": "Item", |
| 6 | "Item Shortname": "scrap", |
| 7 | "Item Skin": 0, |
| 8 | "Item Name (optional, for a skinned currency item)": "", |
| 9 | "Label (empty = automatic)": "" |
| 10 | }, |
| 11 | "Fee Percent (paid by the seller)": 2.0, |
| 12 | "Min Price Per Unit": 1, |
| 13 | "Max Price Per Unit": 1000000, |
| 14 | "Max Open Orders Per Player": 20, |
| 15 | "Order Expiry Days (0 = never)": 0.0, |
| 16 | "Default Order Validity (1H, 24H, 7D, GTC)": "7D", |
| 17 | "Min Condition Percent": 100.0, |
| 18 | "Max Instant Price Slippage Percent": 5.0, |
| 19 | "Confirm Orders Worth At Least (0 = never)": 10000, |
| 20 | "Combat Block Seconds (0 = off)": 30, |
| 21 | "Chart Price Band Percent (0 = off)": 100.0, |
| 22 | "Closed Orders Kept Per Player": 20, |
| 23 | "Max Price Alerts Per Player": 10, |
| 24 | "Wipe Handling (Keep, ReturnEscrow, ClearAll)": "ReturnEscrow", |
| 25 | "Reset Price History On Wipe": true, |
| 26 | "Reset Alerts And Watchlists On Wipe": false, |
| 27 | "Reset Market Maker On Wipe": true, |
| 28 | "Reset Treasury On Wipe": false, |
| 29 | "Reset Leaderboard And Reputation On Wipe": true, |
| 30 | "Log Trades To File": true, |
| 31 | "Save Only On World Save": true, |
| 32 | "Fees": { |
| 33 | "Category Fee Percent (category name: percent)": {}, |
| 34 | "VIP Profiles": [ |
| 35 | { |
| 36 | "Permission": "marketx.vip", |
| 37 | "Fee Multiplier (0.5 = half the fee)": 0.5, |
| 38 | "Extra Open Orders": 10 |
| 39 | } |
| 40 | ], |
| 41 | "Auction Fee Percent (paid by the seller)": 5.0 |
| 42 | }, |
| 43 | "Market Maker": { |
| 44 | "Enabled": true, |
| 45 | "Display Name": "Market Maker", |
| 46 | "Items": [] |
| 47 | }, |
| 48 | "Anti-RMT": { |
| 49 | "Daily Volume Cap Per Player (0 = off)": 0, |
| 50 | "Min Playtime Minutes Before Trading (0 = off)": 0.0, |
| 51 | "Flag Trades Above Market By Percent (0 = off)": 300.0, |
| 52 | "Flag Trades Below Market By Percent (0 = off)": 90.0, |
| 53 | "Block Trades Between Team Members": false |
| 54 | }, |
| 55 | "Auctions": { |
| 56 | "Enabled": true, |
| 57 | "Max Running Auctions Per Player": 5, |
| 58 | "Min Bid Increment Percent": 3.0, |
| 59 | "Anti-Snipe Seconds": 120 |
| 60 | }, |
| 61 | "Leaderboard": { |
| 62 | "Weekly Reset Day": "Monday", |
| 63 | "Weekly Reset Hour (UTC)": 0 |
| 64 | }, |
| 65 | "Discord": { |
| 66 | "Webhook URL (empty = off)": "", |
| 67 | "Post Trades Worth At Least (0 = off)": 100000, |
| 68 | "Post Ended Auctions": true, |
| 69 | "Post Flagged Trades": true |
| 70 | }, |
| 71 | "Categories": [ |
| 72 | { |
| 73 | "Name": "WEAPONS", |
| 74 | "Rust Categories": [ |
| 75 | "Weapon" |
| 76 | ] |
| 77 | }, |
| 78 | { |
| 79 | "Name": "AMMO", |
| 80 | "Rust Categories": [ |
| 81 | "Ammunition" |
| 82 | ] |
| 83 | }, |
| 84 | { |
| 85 | "Name": "ARMOR", |
| 86 | "Rust Categories": [ |
| 87 | "Attire" |
| 88 | ] |
| 89 | }, |
| 90 | { |
| 91 | "Name": "RESOURCES", |
| 92 | "Rust Categories": [ |
| 93 | "Resources" |
| 94 | ] |
| 95 | }, |
| 96 | { |
| 97 | "Name": "COMPONENTS", |
| 98 | "Rust Categories": [ |
| 99 | "Component" |
| 100 | ] |
| 101 | }, |
| 102 | { |
| 103 | "Name": "CUSTOM", |
| 104 | "Rust Categories": [] |
| 105 | } |
| 106 | ], |
| 107 | "Blacklist (shortname, or shortname#skin)": [ |
| 108 | "blueprintbase", |
| 109 | "note", |
| 110 | "photo", |
| 111 | "door.key", |
| 112 | "cassette", |
| 113 | "cassette.medium", |
| 114 | "cassette.short", |
| 115 | "water", |
| 116 | "water.salt" |
| 117 | ], |
| 118 | "Custom Items": [] |
| 119 | } |


Trusted hosting partner. Affordable game servers with solid support and panels.
Visit site ↗