The mod format
A mod is a folder. Lurelock doesn't compile, inject or wrap anything — it walks your folder, copies the files into the client's content tree, and records every copy in the manifest. Disabling a mod is a manifest replay in reverse.
01The format
A mod folder contains any set of files that map onto the client's content paths. A mod.json is optional but recommended:
my-mod/
├─ mod.json
└─ content-swap/
├─ textures/
│ └─ splash.png
└─ fonts/
└─ interface.ttf
{
"id": "my-mod",
"name": "My Mod",
"version": "1.0.0",
"stamp": "content-swap/",
"author": "you",
"note": "Splash and interface font swap."
}
stamp— folder inside the mod that maps onto the client content root. Defaults to the whole mod folder.- Paths inside
stampmust stay under the content root. The manager refuses absolute paths or..segments.
02Where files land
Targets are resolved from the located client install at stamp time. Typical content paths:
| target | typical path |
|---|---|
| textures | Client/Content/textures |
| fonts | Client/Content/fonts |
| sounds | Client/Content/sounds |
| themes / ui | Client/Content/ui |
If a target folder doesn't exist, Lurelock creates it — and records that fact, so restore can remove the folder again when it was us who made it.
03The manifest
Every instance keeps a manifest of stamps:
{
"instance": "brim-main-01",
"stamps": [
{
"mod": "my-mod",
"created_dirs": ["textures"],
"files": ["textures/splash.png"],
"original_sha256": "e3b0c…",
"ts": "2026-09-18T21:04:00Z"
}
]
}
Before copying, Lurelock snapshots the destination file's original hash when it isn't already tracked. Restore finds the original_sha256 and puts that byte-for-byte data back — which is why "restore clean client" is exact rather than approximate.
04Toggling
Toggle off = revert this mod's files (with originals restored), keep its manifest entry. Toggle on = re-stamp from the mod folder. Nothing in the mod folder itself is ever modified by the toggle.
05Restore clean client
From the manager deck: restore clean client replays the manifest backwards for the whole instance — files back to their originals, then created directories removed. The mod folders in your profile are left untouched, so nothing is destroyed, only disassembled.
06Packing & sharing
The manager's "pack" action zips a mod folder into a .lurelock file (a zip with mod.json at the root). The stamp contract and path limits are enforced on import, so a hostile pack can't write outside the content root.