Feature-based
architecture for Roblox
Keep each feature's client, server and shared code in one folder
Rogen writes the Rojo project file that puts every script in the right service
Preview
See how Rogen routes files into Roblox Studio
How routing works
Your config declares the routes. A file follows one in three ways
Routing Folders
Name a folder after a route. Everything inside goes to its service, and the folder itself disappears
Inventory/Server/Save.luau→ ServerScriptService/Inventory/SaveMarker Files
Put an empty file named after a route in a folder. The folder keeps its name
AntiCheat/.server→ ServerScriptService/AntiCheat/…Suffixes
End a file name with a route to send just that file
Combat/CombatServiceServer.luau→ ServerScriptService/Combat/CombatServiceOrganize code by feature
Make your codebase easier to work with
Feature Folders
Keep a feature's client, server and shared code in one folder, named after what it does
Declared Routes
A short map in the config says which service each route goes to. Nothing is guessed
Tags
Swap in a mock or dev variant of a file at build time, without changing a require
Several Places
Share code across places. Each place is a config that extends a common one
Luau, roblox-ts and Darklua
rogen init detects your toolchain and writes a config for it
Watch and Diagnostics
Rebuild as files change, reload the config as you edit it, and get errors with a file and position
Any Architecture
Feature folders, layers in the style of VS Code, or ECS with Jecs or Matter. Pick the layout that fits your game, and enforce its import rules with a linter
Built for you and your agents
A layout that people and coding agents can both read
One folder, one feature
Point an agent at a feature folder and it has the right context
A small blast radius
A change inside one feature can only break that feature, and the file list shows which one
Boundaries a linter checks
Rules like “features don't require each other” are rules about paths, so a linter can enforce them
Placement is declared
Where a file ends up is a short routes map to read, not a convention to guess
No generated file to break
The project file is output. Rogen rewrites it, so nobody edits it by hand
It checks its own work
rogen where shows where a file lands and why, and rogen build reports what to fix
Top developers use Rogen
See what they have to say
"It has been a game changer for my team and I"
"Spent the last couple days refactoring Lua Learning to use Rogen. I love it"
Upgrade your codebase
Install Rogen with Rokit or npm