Skip to content

Organization

cluaupp init writes a Roblox service tree. Source folders map 1:1 to live services (out/ServerScriptService → ServerScriptService). There is no src/server, src/shared, or src/client.

src/
ReplicatedFirst/Loading/
ReplicatedStorage/
Shared/
Constants/
Classes/
Primitives/
Datas/TemplateData.clh
Services/
Modules/
Utils/
Types/
Net/
ServerScriptService/
Boot/DataBoot.server.clpp
Configuration/
Handlers/PlayerHandler.server.clpp
Services/
StarterPlayer/
StarterPlayerScripts/
Controllers/DataController.client.clpp
UI/
Input/
StarterCharacterScripts/
Character/
Movement/
Combat/
ServerStorage/
Configuration/
Modules/
libs/ CluauppLibs (Keep, Sweep, Flare, …)
include/clpp/ IntelliSense
cluaupp.config.json
default.project.json

Rojo maps libs/ to ReplicatedStorage.CluauppLibs. Game packages you add later go beside Shared, not inside CluauppLibs.

FolderRuns onPut here
ServerScriptService/BootServerKeep.Server.Init once
ServerScriptService/HandlersServerPlayerAdded, leaderstats, combat
ServerScriptService/ServicesServerlong-lived server systems
ServerScriptService/ConfigurationServerstore names, feature flags
ReplicatedStorage/SharedBothTemplateData, types, utils, Flare schemas
StarterPlayerScripts/ControllersClientKeep.Client.Init, HUD controllers
StarterPlayerScripts/UI / InputClientGleam, user input
StarterCharacterScriptsCharactermovement, combat locals
ServerStorageServersecrets, unpublished modules
ReplicatedFirstFirstloading UI

If a file needs DataStoreService, it is server. If it needs UserInputService, it is client. Shared must compile on both.

  • .clh in src/ are inlined (#include "TemplateData.clh") and hold structs / const.
  • #include <clpp/...> is IntelliSense — never inlined. cluaupp build copies those headers into the game include/ folder.

Keep the save shape in Shared/Constants/Datas/TemplateData.clh. Paths exist only because that template has those fields.

DataBoot.server.clpp calls Keep.Server.Init. PlayerHandler.server.clpp only WaitFors. DataController.client.clpp calls Keep.Client.Init. Do not Init twice.

*.server.clpp / *.client.clpp are tags. Untagged .clp is a ModuleScript. "architecture": true is the old PascalCase folder split — leave it off.

NeedWhere
Sweep, Spark, Keep, Flare, Mint, Axiom, Roster, Gleam, Bloom, Lens, Crest, Pin, Stage, Coil, Helm, Shift, Hive, Ember, Echo, Guide, Trace, Promise, NetCluauppLibs
Something not in CluauppLibswally.toml → extra Packages

Do not install a second janitor or ProfileStore. CluauppLibs.Sweep is the zelador. CluauppLibs.Keep is the session-locked store (trades included).

How-tos: Libraries. Copy-paste: Examples.