# Sync Details - Rojo Documentation
Documentation home Rojo, a tool for enabling professional development tools on Roblox.

Skip to content


# Sync Details

This page aims to describe how Rojo turns files on the filesystem into Roblox objects.

## Folders

Any directory on the filesystem will turn into a `Folder` instance in Roblox, unless that folder matches the name of a service or other existing instance. In those cases, that instance will be preserved.

## Scripts

Rojo can represent `ModuleScript`, `Script`, and `LocalScript` objects. The default script type is `ModuleScript`, since most scripts in well-structured Roblox projects will be modules.

File Name | Instance Type
--- | ---
`*.server.lua` | `Script`
`*.client.lua` | `LocalScript`
`*.lua` | `ModuleScript`

If a directory contains a file named `init.server.lua`, `init.client.lua`, or `init.lua`, that folder will be transformed into a `*Script` instance with the contents of the `init` file. This can be used to create scripts inside of scripts.

For example, this file tree:

- my-game
  - init.client.lua
  - foo.lua

Will turn into these instances in Roblox:

## Models

Rojo supports a JSON model format for representing simple models. It's designed for instance types like `BindableEvent` or `Value` objects, and is not suitable for larger models.

Rojo JSON models are stored in `.model.json` files.

Starting in Rojo version 0.4.10, model files named `init.model.json` that are located in folders will replace that folder, much like Rojo's `init.lua` support. This can be useful to version instances like `Tool` that tend to contain several instances as well as one or more scripts.

Info

In the future, Rojo will support `.rbxmx` models. See issue #7 for more details and updates on this feature.

Warning

Prior to Rojo version 0.4.9, the `Properties` and `Children` properties are required on all instances in JSON models!

JSON model files are fairly strict; any syntax errors will cause the model to fail to sync! They look like this:

`hello.model.json`

    {
        "Name": "hello",
        "ClassName": "Model",
        "Children": [
            {
                "Name": "Some Part",
                "ClassName": "Part"
            },
            {
                "Name": "Some StringValue",
                "ClassName": "StringValue",
                "Properties": {
                    "Value": {
                        "Type": "String",
                        "Value": "Hello, world!"
                    }
                }
            }
        ]
    }