v2 is out.Coming from v1?→

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

Luau
|
TypeScript

Preview

See how Rogen routes files into Roblox Studio

File System
src
Inventory
Client
InventoryController.luau
Server
InventoryService.luau
Shared
InventoryTypes.luau
Roblox Studio
ReplicatedStorage
Shared
Inventory
InventoryTypes
ServerScriptService
Inventory
InventoryService
StarterPlayer
StarterPlayerScripts
Inventory
InventoryController

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/Save

Marker 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/CombatService
Read how routing works →

Organize 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

Compare architectures →

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

Working with agents →

Top developers use Rogen

See what they have to say

"It has been a game changer for my team and I"

Acecateer
Technical Director, Wonder Works Studio

"Spent the last couple days refactoring Lua Learning to use Rogen. I love it"

Zack (boatbomber) Williams
CEO, Torpedo Software

Upgrade your codebase

Install Rogen with Rokit or npm

rokit.toml
rogen = "ldgerrits/rogen@2.0.0"
Terminal
npm i @ldgerrits/rogen
Read the setup guide →