github rojo-rbx/rojo v7.7.0

4 hours ago

This is the full release of Rojo 7.7.0. It contains a few significant upgrades to Rojo. The biggest change is that this release contains a new feature called syncback! Documentation is forthcoming, but you can read more about that here.

This release also swaps Rojo's core networking model to use websockets and MessagePack instead of long-polling and JSON. This should result in improved performance and reliability when syncing.

Changes since Rojo 7.6.1

Additions

  • Added rojo syncback. Syncback is a feature designed to solve the long-standing problem of converting an existing place file into a Rojo project. Go to the section in this release for more information. (#937)
  • Added support for .jsonc in all places where you can use .json. (#1159)
  • inf and nan values in properties are now synced (#1176)
  • Added a "Forget" option to the sync reminder notification to avoid being reminded for that place in the future (#1215)
  • Added missing support for init.plugin.lua and init.plugin.luau. (#1252)
  • Add support for gitignore-style negation in globIgnorePaths and syncback's ignorePaths (#1256)

Changes

  • Changed rojo serve to use websockets instead of long polling (#1142)
  • Added actors and bindable/remote event/function variants to be synced back as JSON files. (#1199)
  • rojo serve now validates the Host/Origin headers to protect the local/private server against DNS rebinding, gates /api/open to local clients, and warns when bound to a network-reachable address. The accepted hosts can be extended with the --allowed-hosts option or a project's serveAllowedHosts field, for example to reach a network-exposed server by hostname. (#1270)
  • Rojo's web API now uses MessagePack instead of JSON for all endpoints (#1176)

Fixes

  • Fixed a bug where passing --skip-git to rojo init would still create a file named gitignore.txt (#1172)
  • Fixed bugs and improved performance & UX for the script diff viewer (#994)
  • Fixed a bug caused by having reference properties (such as ObjectValue.Value) that point to an Instance not included in syncback. (#1179)
  • Fixed instance replacement fallback failing when too many instances needed to be replaced. (#1192)
  • Fixed a bug where MacOS paths weren't being handled correctly. (#1201)
  • Fixed a bug where the notification timeout thread would fail to cancel on unmount (#1211)
  • Improves relative path calculation for sourcemap generation to avoid issues with Windows UNC paths. (#1217)
  • Fixed the sync fallback scrambling sibling order; replacements are now re-parented ancestors-first and in their original child order. (#1265)
  • Instances that share a name and class are now robustly matched on resync by comparing their properties, instead of relying on child order alone. (#1266)
  • Rojo now reports a clear error instead of panicking in several cases, including when the serve port is already in use, when a synced file is read-only or locked, when the filesystem watcher can't be created, and when the working directory is inaccessible. (#1267)
  • Fixed /api/serialize returning success when a requested instance ID is missing from the serve session tree. (#1272)
  • Fixed syncback not removing stale $properties entries when Studio resets a property to its engine default. (#1244)

Syncback

Syncback is a feature designed to solve the long-standing problem of converting an existing place file into a Rojo project. It is configured by a new field in projects, and is invoked with a CLI subcommand rojo syncback.

The command itself is rojo syncback path/to/project --input path/to/file.rbxl. This will run syncback and pull things from the provided file to place on the operating system. Instances are attempted to be written in a reasonable manner but what Instances become what is still up in the air.

Instances will only be pulled from the file system if they are a descendant of a node in the provided project file. That is, in order to syncback the children of Workspace, Workspace must be in your project file. You may wish to have a separate project.json for running syncback as a result.

To control the behavior of syncback more, there's a new field in project files named syncbackRules:

    {
        "syncbackRules": {
            "ignoreTrees": [
                "ServerStorage/ImportantSecrets",
            ],
            "ignorePaths": [
                "src/ServerStorage/Secrets/*"
            ],
            "ignoreProperties": {
                "BasePart": ["Color"]
            },
            "syncCurrentCamera": false,
            "syncUnscriptable": true,
            "ignoreReferents": false,
        }
    }

A brief explanation of each field:

  • ignoreTrees is a list of paths in the roblox file that should be ignored
  • ignorePaths is a list of paths in the file system that should be ignored
  • ignoreProperties is a list of properties that won't be synced back
  • syncCurrentCamera is a toggle for whether to sync back the Workspace's CurrentCamera. Defaults to false.
  • syncUnscriptable is a toggle for whether to sync back properties that cannot be set by the Roblox Studio plugin. Defaults to true.
  • ignoreReferents is a toggle for whether to sync back referent properties like Model.PrimaryPart. Defaults to false, which means that they will be included.

Upgrading

To install the Roblox Studio plugin, there are a few options:

  • Run rojo plugin install from the Rojo CLI
  • Download the attached Rojo.rbxm and place it into your Roblox Studio plugins folder
  • Install from the Roblox plugin page

There are also multiple ways to install the Rojo CLI:

With Rokit

Add a line to the [tools] section in rokit.toml:

rojo = "rojo-rbx/rojo@7.7.0"

From GitHub Release

Download one of the attached binaries on this release page!

From Crates.io

You can use Cargo (1.88.0+) to build the release yourself from crates.io:

cargo install rojo --version 7.7.0

Don't miss a new rojo release

NewReleases is sending notifications on new releases.