Skip to main content

Project structure

Running jafa new <project-name> [target-directory] adds a new project under projects/<project-name> inside a workspace.

Folders

Each project is scaffolded with:

projects/<project-name>/
├── .jafa
├── client/
│ ├── services/
│ ├── controllers/
│ ├── modules/
│ ├── databases/
│ └── ClientMain.client.luau
├── server/
│ ├── services/
│ ├── modules/
│ ├── databases/
│ └── ServerMain.server.luau
├── shared/
│ ├── databases/
│ ├── modules/
│ ├── facilitators/
│ └── LogConfig.luau
├── ui/
│ ├── components/
│ ├── windows/
│ └── stories/
├── preload/
├── character/
└── default.project.json

Rojo tree

default.project.json wires this folder structure up to the Roblox data model:

  • ReplicatedStorage/Sharedshared/facilitators, shared/modules, shared/databases, plus Packages linked to the workspace's wally/Packages
  • ReplicatedStorage/Clientclient/services, client/controllers, client/modules, and ClientMain
  • ReplicatedStorage/UI — the ui/ folder
  • ServerScriptServiceserver/services, server/modules, and ServerMain
  • Workspace — a baseplate Part, with FilteringEnabled and StreamingEnabled on by default

client/databases and server/databases are scaffolded but not wired into the Rojo tree yet — only shared/databases is currently mapped in.

Asset manifest (.jafa)

Every project also gets a .jafa file at its root, mapping instances in a published Roblox place (terrain, maps, lighting, etc.) to files under the project directory. jafa pull reads it to pull those assets down from Roblox — see that page for the file format.

Where build output goes

jafa build writes to artifacts/<project-name>/build.rbxl at the workspace root (not inside the project folder), alongside a sourcemap.json written back into the project directory.