Skip to content

Compile pipeline

.clpp / .clp / .clh
cluaupp build / watch
│ JSON stdin
clpp api compile
│ CompileArtifact (luau + diagnostics)
ClppLibs → ReplicatedStorage.CluauppLibs
out/ → Rojo
  1. Resolve clpp. CLPP or CLPP_PATH, then the newest on PATH, then %LOCALAPPDATA%\Programs\CLPP\clpp.exe. Refuse anything older than 0.3.2.
  2. Compile. One-shot build uses spawnSync. watch uses async spawn so the event loop is not blocked. Failures print diagnostics[] (1-based line/column).
  3. Post-process. require(ClppLibs.X) becomes require(ReplicatedStorage.CluauppLibs.X). --!strict from config / #pragma.
  4. Write out/. Filename tags pick Script / LocalScript / ModuleScript. void init() is called at the end of Scripts and LocalScripts. Watch does not overwrite out/ while compile fails.
CL++ (clpp)Cluaupp
Syntax, types, OOP, Luau emitRoblox API dump headers (include/clpp)
clpp setup IntelliSenseRojo project + cluaupp.config.json
Language id clppinit / build / watch
CluauppLibs vendor copy into libs/

See cluaupp.config.json. "architecture": true (ForeverHD folders) is not generated — one source file is still one .luau file.

src/ServerScriptService/Handlers/PlayerHandler.server.clpp
→ out/ServerScriptService/Handlers/PlayerHandler.server.luau
src/StarterPlayer/StarterPlayerScripts/Controllers/DataController.client.clpp
→ out/StarterPlayer/StarterPlayerScripts/Controllers/DataController.client.luau
src/ReplicatedStorage/Shared/Constants/Datas/TemplateData.clh
→ out/ReplicatedStorage/Shared/Constants/Datas/TemplateData.luau

CLI reference: commands.