Carbon puts complete Roblox places in source control without forcing every instance into the filesystem.
Local files own selected Folder and script subtrees. Studio owns everything else. Carbon captures Studio-owned state in a deterministic artifact and uses stable instance identities to merge independent changes.
Mapped source syncs from the filesystem to Studio. While serve is connected,
fresh Studio auto-recovery saves continuously capture Studio-owned changes.
Important
Carbon is pre-1.0. It supports Roblox Studio on x86_64 Windows, either natively or through WSL2. The project format can change before 1.0.
- Mapped source: Local files own the mapped instance and every descendant.
- Studio-owned state: Studio owns every instance outside a mapping.
Each instance has one source domain. Carbon removes Studio-only changes below a mapping during source reconciliation.
Use Carbon when local source and Studio-authored content must coexist in one place, and the complete place must support semantic Git merges.
Use Rojo when the filesystem is the primary source of truth or you need the full Rojo project format and ecosystem.
Carbon uses a Rojo-shaped project tree, but its ownership model is stricter.
A $path owns its root and every descendant. A mapping on an engine service
owns all contents of that service. Carbon cannot retain a new Studio-owned
instance in that service.
Map only the folders and scripts that the filesystem must own. Unmapped siblings can remain Studio-owned.
Create mapped instances in local source. Create Studio-owned instances under Studio-owned parents. Removing a mapping does not transfer its old subtree to Studio-owned state.
The project root must be a DataModel and cannot have $path. Its direct
children must be Roblox services. Mappings can be engine anchors, direct
children of services, or supported containers below StarterPlayer. Carbon
cannot route a mapping through an arbitrary Studio-owned instance.
Carbon project nodes support $className, $path, $id, $properties, and
$attributes. Carbon rejects other special fields, including Rojo
$ignoreUnknownInstances behavior.
Carbon permits these classes below a mapping:
FolderScriptLocalScriptModuleScript
Mapped directories can contain scripts, child directories, and one optional
meta.json. Carbon does not load .rbxl or .rbxm files below mappings.
Studio-owned instances can refer to mapped instances. Mapped instances cannot refer to Studio-owned instances.
See Usage and project format for the full mapping and capture rules.
- Windows 10 or 11 on an x86_64 machine
- Roblox Studio on Windows
- Carbon CLI on native Windows or WSL2
robloxstudio-mcprunning on loopback with Studio lifecycle protocol v3 and exact process identity enabled- Rokit in the CLI environment
- Roblox Studio auto-recovery enabled
rokit add Chrrxs/carbonInstall and start
robloxstudio-mcp through its
normal MCP client integration before running managed carbon serve.
The executable includes its matching Studio plugin. Carbon installs or updates
it when serve or studio starts. Managed serve launches are owned by
robloxstudio-mcp. Carbon does not inject code into Studio or modify Studio
binaries.
# Convert an existing place.
carbon migrate existing.rbxl --output game.carbon.json
# Or create a project.
carbon init --output game.carbon.json --name Game
# Start live sync and Studio.
carbon serve game.carbon.json
# Import a place saved manually with Studio's File > Save to File command.
carbon capture game.carbon.json manually-saved.rbxl
# Wait for the next auto-recovery capture, then stop serve and Studio.
carbon stop 'anon:550e8400-e29b-41d4-a716-446655440000'
# Build a place file.
carbon build game.carbon.json --output game.rbxl