How custom work is quoted and built
What actually goes into a fixed quote
A flat price is possible only because the scoping happens before the work rather than during it. What gets priced is not effort so much as the number of decisions nobody has made yet. That is why a brief saying "an economy plugin" cannot be quoted, while "a coin balance stored in MySQL, earned from three named jobs, spent in a chest menu shop, with /balance and /pay and one permission node per job" can be.
The questions that move the number are rarely the ones people expect. The exact server software and version, because the build is developed and tested against the version you actually run and the API it exposes moves between major releases. Where the data lives, because a flat file is trivial while MySQL brings a schema, migrations and concurrent writes. Whether it runs on one server or behind a proxy such as Velocity or BungeeCord, which turns a single plugin into a synchronisation problem across several. Which existing plugins it has to cooperate with, since every integration is another API to track. Whether there is an interface, because a chat command is cheap and an inventory menu with pages, sounds and confirmation dialogs is not. And who is allowed to do what, since permissions and admin tooling are a large part of anything that touches money.
The budget field on the request form exists for the same reason. Most features can be built at three or four different sizes, and a band tells us which one to scope rather than leaving us to guess and quote something you did not want. "Not sure yet" is one of the options and is a perfectly good answer. The figures on the example cards are typical starting prices for each category rather than ceilings; scope moves them upwards, and the exact quote is confirmed before any work begins.
- The game, and the exact server software and version you run: Paper 1.21.4, Fabric 1.20.1, Rust with Oxide, and so on.
- The commands or actions you want, and who should be allowed to use each one.
- Where the data should live, and what happens to it on a restart, a map wipe or a version change.
- Anything it has to work alongside: an existing economy, a permissions plugin, a Discord server, a proxy network.
- Whether players are expected to install anything on their side.
- A rough budget band, even a wide one, so we scope the right size of the idea.
Plugin or mod: the choice that moves the price most
For Minecraft, the biggest lever on cost is not how clever the feature is, it is whether it can be a plugin. Paper, Spigot and Bukkit plugins are server-side only. The .jar drops into /plugins, and players join with an unmodified client and install nothing at all. Everything a plugin does, it does by rearranging what the vanilla client already understands: commands, chat, scoreboards, inventory screens dressed up as menus, and existing blocks, items and entities with custom names and behaviour attached to them.
A Forge or Fabric mod is a different contract. The file goes in /mods and every single player must also install the matching version on their own machine. That buys genuinely new content: new blocks, new entities, custom keybinds, a bespoke HUD, and items the vanilla client has no concept of. It also enlarges what has to be built, because there is server logic, client behaviour, and a network protocol between the two that has to be designed and versioned. Plugins and mods are not interchangeable, and a mod is pinned to a loader as well as to a Minecraft version, so a version bump moves both sides at once.
The awkward part of a mod is usually not the code, it is everyone else. A player on the wrong loader or the wrong build is refused the connection rather than warned, so distribution and a launcher profile become part of the job. A useful rule of thumb when writing your brief: if you can describe the feature in commands, menus and rules, ask for a plugin. If you cannot describe it without the words "new item" or "new block", it has to be a mod, and the quote will say so.
- Plugin (Paper, Spigot, Bukkit): server-side only, lives in /plugins, players install nothing, limited to what the vanilla client already understands.
- Mod (Forge, Fabric): lives in /mods and on every player's machine at a matching version, can add genuinely new content, and has to be distributed and kept in step.
Rust, Oxide/uMod and what a wipe does to custom code
Custom Rust work is C# written against Oxide/uMod or Carbon, and the first thing to settle is which one. They patch the same server assembly and will fight each other if both are present, so a plugin is built for one framework, not both. The .cs files drop into oxide/plugins, or carbon/plugins for Carbon, and hot-load on upload, but a plugin only writes its JSON settings into oxide/config after it has loaded once. The first deployment is therefore always upload, let it generate the config, edit it, then reload that plugin.
The wipe cycle is what makes Rust different to quote. Facepunch ships a client-breaking update on the first Thursday of each month and every server's map has to be regenerated. The mod framework has to be rebuilt against the new server assembly and typically lands a few hours after the game update, so a modded server can come up with every plugin unloaded, custom ones included. That is patch day behaving normally, not a broken install.
Because of that, wipe behaviour is a feature to be specified rather than assumed. What a plugin keeps in its own files under oxide/data is not part of the world save and does not go with the map unless something clears it, so a custom plugin tracking balances, ranks, kill statistics or progression needs an explicit decision: what clears on wipe, what carries over, and whether a forced blueprint wipe changes the answer. Settle it in the brief and it is a line of behaviour in the build. Settle it in week three and it is a change request. The honest summary is that a Rust plugin carries a maintenance floor a Paper plugin does not, because the framework it loads into is rebuilt on that monthly rhythm.
What "the source code is yours" means in practice
You receive the source and the built artefact, and for custom development work ownership of the delivered source code is handed to you as described in the relevant quote. Day to day that means three concrete things: you can take the project to any developer, you can keep using and modifying it if you ever leave Puranode, and you can install it on a server hosted anywhere, since you never had to host with us to commission the work in the first place.
The reason it matters most is not philosophical, it is what happens when a game updates. The usual way commissioned game code stops working is not a bug, it is the ground moving. Minecraft bumps a version and the API changes underneath. Facepunch ships a protocol update. A mod loader releases and your build still targets the previous one. In each case the code has not failed, it needs recompiling and adjusting against a changed API. With only a compiled .jar or .dll you are waiting on whoever built it and hoping they are still reachable. With the source in hand, that recompile is a small, well-defined job any competent developer can price.
One practical habit worth forming: ask for the build instructions alongside the source and keep both somewhere that is not the game server. Our terms say it plainly: we provide backup tools, and you are responsible for keeping your own copies of anything important. A hosting backup exists to bring a server back, not to act as your source repository. A private Git repository, or even a dated zip on your own machine, is enough.
The 30 days after delivery, and where they stop
Every build is backed for 30 days after delivery for anything that does not work as specified. Note what that sentence hangs on: the specification. The brief does double duty, setting the price up front and defining what counts as broken afterwards, which is another reason to be concrete in it. The kind of thing it covers is an edge case that turns up in front of real players and not on staging, a permission node behaving differently from how it reads, or a conflict with another plugin on your server.
What those 30 days are not is a retainer, and they are not insurance against the game itself. When Mojang bumps a version, when force wipe Thursday lands, or when a mod loader changes its API, your plugin can stop loading without a single line of it being wrong. That is new work, not a warranty claim. We would rather write that plainly on this page than argue about it with you in week five.
When it happens, an update is scoped and quoted like any other job, at a fixed price agreed before it starts. No hourly billing and no retainer, the same as the original build. You own the source, so the work is a recompile and an adjustment rather than a rebuild from nothing. And if you already know you want the plugin kept current, say so at quote time so it is part of the brief rather than a surprise later. If you would rather handle updates yourself, you have everything you need to do that.
Discord bridges, dashboards and agent skills
The Discord and server live sync category starts lowest of the six because the simplest useful version is one-directional plumbing: chat and events out of the game server and into a channel. The price climbs when the link becomes two-way and identity-aware. Tying a Discord account to an in-game account is an identity problem rather than a messaging one, and it needs a verification flow, somewhere to store the mapping, and a decision about what happens when someone leaves the Discord or changes their name.
A web dashboard carries the highest starting price of the six because it is a whole application rather than a file you drop into a folder. It needs somewhere to run, an authentication model, and a link to the game server over RCON or the panel API. RCON is not one protocol either: Rust uses WebSocket RCON rather than Source RCON, so a dashboard covering both a Minecraft server and a Rust server is two integrations, not one with a switch. Tell us at quote time where it will live. A PHP dashboard sits naturally on our website hosting, which runs nginx with php-fpm, lets you pick PHP 8.2, 8.3, 8.4 or 8.5, and gives you MySQL and SFTP from the panel with a free subdomain under sites.puranode.com, or your own domain pointed in by CNAME with automatic SSL. Anything containerised can run as a Custom Docker deployment on the agent plans instead.
Custom skills for ClawdBot or Hermes are naturally well-bounded work: structured input, one job, a result. The hard part is nearly always whatever the skill has to talk to, so describe that system in the brief rather than the skill.