No new features today. We renamed the entire framework from LibPureFiction to Warren.
Why rename
"LibPureFiction" was a working title — the library for Pure Fiction Records' games. It was descriptive and nobody outside the team ever saw it. But the framework is becoming a real product under the AlphaRabbit brand, and "LibPureFiction" doesn't fit that identity. It's long, it's a mouthful, and it screams "internal tool."
Warren fits. A warren is an interconnected network of tunnels — which is what the node/signal architecture literally is. It's also a rabbit reference for AlphaRabbit. Short, memorable, easy to type in a require path.
The scope of a "simple" rename
This is the kind of task that sounds trivial and isn't. Here's what actually changed:
- 2 GitHub repos renamed (Warren, Warren-Core)
- 2 Rojo project files updated (name + tree path)
- 2 source directories renamed (
src/Lib→src/Warren) - ~82 require paths in Lua files (
game.ReplicatedStorage.Lib→.Warren) - ~36 WaitForChild calls updated
- 100+ file headers changed
- 1 DataStore name (
LibPureFiction_Logs→Warren_Logs) - 30+ documentation files across both repos
- 21 HTML files on this website
- 1 Wally package config
- 3 AlphaRabbit summary/manifest files
- 2 git remotes, 2 local directories
Total: 232 files changed across three commits.
Execution order matters
You can't just find-and-replace everything at once. The order was deliberate:
- GitHub repos first. GitHub keeps redirects from the old URL, so anything that fetches during the rename window still works.
- Core repo second. Smaller surface area, faster to validate.
- Game repo third. The big one — 181 files.
- Website fourth. Directory rename + text replacement in HTML.
- Local directory renames last. Everything else needs to commit first while the paths still match.
The gotcha
The initial sed pass targeted game.ReplicatedStorage.Lib — the canonical require path. But about 20 test and demo files use a shorthand where ReplicatedStorage is assigned to a local variable first:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Node = require(ReplicatedStorage.Lib.Node)
No game. prefix, so the first pass missed them. Caught it with a post-replacement grep before committing. Always grep after a bulk rename.
Clean break
No backwards compatibility shims. No Warren = Lib aliases. No comments explaining what things used to be called. The old name is gone. A final grep across all four locations — repos, website, AlphaRabbit — returns zero hits for "LibPureFiction."
If you're reading old devlog posts that mention "LibPureFiction," that's Warren. Same framework, better name.