Skip to content
-

Project Configuration ​

The rbxsync.json file configures your project settings.

Basic Configuration ​

json
{
  "name": "MyGame",
  "tree": "./src",
  "assets": "./assets"
}
FieldDefaultDescription
nameProject folder nameDisplay name for the project
tree./srcPath to the instance tree
assets./assetsPath for binary assets (meshes, images, sounds)

Custom Directory Mapping ​

Use treeMapping to customize how DataModel paths map to filesystem paths. This is useful for:

  • Matching existing Rojo project structures
  • Using shorter directory names
  • Organizing code by feature instead of service
json
{
  "name": "MyGame",
  "tree": "./src",
  "treeMapping": {
    "ServerScriptService": "src/server",
    "ReplicatedStorage": "src/shared",
    "StarterPlayer/StarterPlayerScripts": "src/client",
    "Workspace/Maps": "src/maps"
  }
}

With this configuration:

  • Scripts in src/server/ sync to ServerScriptService
  • Scripts in src/shared/ sync to ReplicatedStorage
  • Scripts in src/client/ sync to StarterPlayer.StarterPlayerScripts

Extraction Configuration ​

Control how games are extracted:

json
{
  "config": {
    "extractBinaryAssets": true,
    "binaryAssetTypes": ["Mesh", "Image", "Sound", "Animation"],
    "excludeServices": ["CoreGui", "CorePackages"],
    "excludeClasses": [],
    "scriptSourceMode": "external",
    "terrainMode": "voxelData",
    "csgMode": "assetReference",
    "chunkSize": 1000
  }
}
FieldDefaultDescription
extractBinaryAssetstrueExtract meshes, images, sounds
binaryAssetTypesAllTypes to extract
excludeServicesCoreGui, etc.Services to skip
excludeClasses[]Classes to skip
scriptSourceModeexternalexternal (files) or inline (in .rbxjson)
terrainModevoxelDatavoxelData, propertiesOnly, or skip
csgModeassetReferenceassetReference, localMesh, or skip
chunkSize1000Max instances per extraction batch

Sync Configuration ​

json
{
  "sync": {
    "mode": "bidirectional",
    "conflictResolution": "prompt",
    "autoSync": false,
    "watchPaths": ["./src"]
  }
}
FieldDefaultDescription
modebidirectionalpush, pull, or bidirectional
conflictResolutionpromptprompt, keepLocal, keepRemote, autoMerge
autoSyncfalseAuto-sync on file changes
watchPaths["./src"]Paths to watch for changes

Wally Package Support ​

RbxSync supports Wally packages. When enabled, packages are preserved during extraction and excluded from file watching to prevent accidental overwrites.

json
{
  "packages": {
    "enabled": true,
    "sharedPackagesPath": "ReplicatedStorage/Packages",
    "serverPackagesPath": "ServerScriptService/Packages",
    "excludeFromWatch": true,
    "preserveOnExtract": true,
    "packagesFolder": "Packages"
  }
}
FieldDefaultDescription
enabledtrueEnable Wally package support
sharedPackagesPathReplicatedStorage/PackagesDataModel path for shared packages
serverPackagesPathServerScriptService/PackagesDataModel path for server packages
excludeFromWatchtrueDon't sync package file changes to Studio
preserveOnExtracttrueKeep local packages instead of overwriting from Studio
packagesFolderPackagesFilesystem folder name for packages

How It Works ​

  1. File Watching: Files in Packages/ directories are ignored during live sync. This prevents your Wally packages from being accidentally synced back to Studio.

  2. Extraction: When you extract a game, local Packages folders are preserved from your backup instead of being overwritten by Studio's version. This ensures your wally.toml dependencies stay intact.

  3. Wally Workflow: Use Wally as normal to install packages:

    bash
    wally install

    Then sync your game code separately with RbxSync.

Using with Rojo ​

You can use RbxSync alongside Rojo for Wally packages:

  • Use Rojo to sync your Packages/ folder
  • Use RbxSync for everything else

Or use RbxSync exclusively by installing packages with Wally and enabling the packages config.

Migrating from Rojo ​

If you have an existing Rojo project, migrate automatically:

bash
rbxsync migrate

This reads your default.project.json and creates an equivalent rbxsync.json with matching directory mappings.

Example Rojo project:

json
{
  "name": "MyGame",
  "tree": {
    "$className": "DataModel",
    "ServerScriptService": { "$path": "src/server" },
    "ReplicatedStorage": { "$path": "src/shared" }
  }
}

Converts to:

json
{
  "name": "MyGame",
  "tree": "./src",
  "treeMapping": {
    "ServerScriptService": "src/server",
    "ReplicatedStorage": "src/shared"
  }
}

Your Rojo files are preserved—you can use both tools side-by-side during migration.

Full Example ​

json
{
  "name": "AwesomeGame",
  "tree": "./src",
  "assets": "./assets",
  "treeMapping": {
    "ServerScriptService": "src/server",
    "ReplicatedStorage": "src/shared",
    "StarterPlayer/StarterPlayerScripts": "src/client",
    "StarterGui": "src/ui"
  },
  "config": {
    "extractBinaryAssets": true,
    "scriptSourceMode": "external",
    "terrainMode": "voxelData"
  },
  "sync": {
    "mode": "bidirectional",
    "autoSync": false
  },
  "packages": {
    "enabled": true,
    "preserveOnExtract": true
  }
}