docs(modules): mirror the uMod/Oxide ecosystem for module-rust #248
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/rust-oxide-api"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
A new
docs/modules/rust/holding a verbatim mirror of the uMod/Oxide documentation — the Rustgame API and the game-independent plugin framework around it — captured 2026-09-15, so the
upcoming
module-rustcan be designed and built without a round trip to umod.org on every question.modules/rust/README.mdmodules/rust/HOOKS.mdmodules/rust/OXIDE_API.mdmodules/rust/DEFINITIONS.mdmodules/rust/OPERATING.mdmodules/rust/agent/25 prose pages, 477 hooks, 678 items, 2,590 skins, 150 code examples.
Why both halves
rust-dryrun.md's central structural fact drives theshape: a ServUO shard is source the operator compiles, but a Rust server is a binary nobody
outside Facepunch patches. Two consequences, and they are the two halves of the directory:
HOOKS.mdis the hard ceiling on what a Rust modulecan ever know about a live server — the input to the Rust sidecar's event catalogue.
permissioned and configured by Oxide, on Oxide's terms.
OXIDE_API.mdis that rulebook;OPERATING.mdis what the server owner has to do, which is the surface our deployment story hasto sit on.
The universal-hook split
34 of the 477 are not Rust's — they are uMod's own Covalence hooks (
Init,Loaded,Unload,OnUserConnected, theOnGroup*/OnUserPermission*families), raised identically on every gameuMod supports. Verified against
/documentation/games/universalin the same capture: all 34 are inthe Rust set and the Rust page adds none of its own, so the overlap is exact.
The distinction is architectural, not trivia — a universal hook is the portable part of the
surface. Marked in
HOOKS.md, flagged1inagent/hooks.tsv.agent/— the token-efficient copySame facts, generated in the same pass so it cannot drift from the markdown.
hooks.tsvitems.tsvskins.tsvapi.jsonlhooks.tsvnormalises the return contract to five codes (none/nonnull/bool/data/?) so an agent can filter on it.api.jsonlis every code example uMod publishes, addressed bypage and heading.
Where the win is, honestly. Large for hooks (3.2×) and API prose (2.1×), because both are mostly
explanation. Only ~1.25× for the item and skin tables, because
DEFINITIONS.mdwas already dense.agent/README.mdsays exactly that rather than quoting a flat number.Two things worth recording from building it
skins.tsvwas 11% larger than the markdown it replaces. One row per skin meansrepeating the item shortname 2,590 times, which costs more than the markdown's grouped headings.
Regrouping to one row per item is what made it a saving at all. Measured, not assumed.
}insideOnUserConnected's example ended the block early, so aPuts(...)line was recorded as a hooksignature. It now matches on the hook's own name; all 477 rows verified to carry a real signature
and none to contain a body line.
Faithfulness
OnShopCompleteTradeis two records upstream. Both kept; second anchored#onshopcompletetrade-1.?rather than guessed.
raw HTML or unescaped entities in the converted pages.
Capture procedure
Recorded in the README because none of it was obvious. Cloudflare gates uMod's HTML pages but not
its JSON endpoints, so it took three different routes: a plain
curlfor hooks(
/documentation/hooks/rust.json, one request, no paging), a rendered browser DOM for thedefinitions tables, and throttled same-origin fetches for the prose pages — uMod returns
429 Too Many Requestson a tight loop, and a 429 is easy to mistake for a real page because itstill returns 200-shaped HTML with a title.
Rust wipes monthly and the hook list moves with it, so every file carries its capture date.
Scope
Docs only — no code, no contract changes. The mirror is reference, not authority: uMod stays
upstream and normative, and nothing here may be cited as a Runic Gateway contract.
Deliberately not mirrored, and the README says why: the other games uMod supports (not our
ecosystem), the community/process pages, and the
/documentation/umod/*alias paths.docs/README.mdgains one row in themodules/table. One pre-existing broken link in that README(
android/TRUSTED_DEVICES_APP_HANDOFF.md) was left alone as out of scope.🤖 Generated with Claude Code
https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
docs(modules): add the Rust Oxide/uMod API reference for module-rustto docs(modules): mirror the uMod/Oxide ecosystem for module-rust