---
name: rojo-luau-project
description: Use when working in a Rojo-based Roblox project (default.project.json, src/ folders, Rokit). Keeps file placement, strict typing, linting and commits consistent so AI edits stay safe.
---

# Rojo project conventions

The code lives in files and Rojo syncs it into Studio. Treat `default.project.json` as the map of where every folder
ends up.

## Before editing

- Read `default.project.json` to see which `src/` folder maps to which service.
- Match the existing style: module structure, naming, how services and classes are set up. Don't add new libraries
  or frameworks without asking.
- Tools are pinned in `rokit.toml`. Use those versions (`rojo`, `selene`, `stylua`, `wally`).

## Writing code

- Put `--!strict` on the first line of every new script and module.
- Use `task.wait`, `task.spawn`, `task.delay` and `task.defer`, never `wait`, `spawn` or `delay`.
- Disconnect connections or clean them up (Maid or Trove) when the owning object is destroyed.
- Put server code in the folder that maps to `ServerScriptService` and client code in the one that maps to
  `StarterPlayerScripts`. Shared modules go to `ReplicatedStorage`.

## After editing

1. `selene src`, then fix every warning.
2. `stylua src`.
3. If the project uses luau-lsp, check for type errors (`rojo sourcemap` keeps it accurate).
4. Playtest the change in Studio with `rojo serve` running.
5. Commit with a short message describing the change, one working feature per commit.

Never edit generated folders such as `Packages/`, `DevPackages/` or `node_modules/`.
