* Start splitting apart reconciler, with tests * Reify children in reify * Baseline hydrate implementation * Remove debug print * Scaffold out diff implementation, just supporting name changes * invariant -> error in decodeValue * Flesh out diff and add getProperty * Clear out top-level reconciler interface, start updating code that touches it * Address review feedback * Add (experimental) Selene configuration * Add emptiness checks to PatchSet, remove unimplement invert method * Improve descendant destruction behavior in InstanceMap * Track instanceId on all reify errors * Base implementation of applyPatch, returning partial patches on failure * Change reify to accept InstanceMap and insert instances into it * Start testing applyPatch for removals * Add test for applyPatch adding instances successfully and not * Add , which is just error with formatting * Correctly use new diff and applyPatch APIs * Improve applyPatch logging and fix field name typo * Better debug output when reify fails * Print out unapplied patch in debug mode * Don't write properties if their values are not different. This was exposed trying to sync the Rojo plugin, which has a gigantic ModuleScript in it with the reflection database. This workaround was present in some form in many versions of Rojo, and I guess we still need it. This time, I actually documented why it's here so that I don't forget for the umpteenth time... * Add placeholder test that needs to happen still * Introduce easier plugin testing, write applyPatch properties test * Delete legacy get/setCanonicalProperty files * Fix trying to remove numbers instead of instances * Change applyPatch to return partial patches instead of binary success * Work towards being able to decode and apply refs * Add helpers for PatchSet assertions * Apply refs in reify, test all cases * Improve diagnostics when patches fail to apply * Stop logging when destroying untracked instances, it's ok * Remove read before setting property in applyPatch * Fix diff thinking all properties are changed
Rojo is a tool designed to enable Roblox developers to use professional-grade software engineering tools.
With Rojo, it's possible to use industry-leading tools like Visual Studio Code and Git.
Rojo is designed for power users who want to use the best tools available for building games, libraries, and plugins.
Features
Rojo enables:
- Working on scripts and models from the filesystem, in your favorite editor
- Versioning your game, library, or plugin using Git or another VCS
- Streaming
rbxmxandrbxmmodels into your game in real time - Packaging and deploying your project to Roblox.com from the command line
In the future, Rojo will be able to:
- Sync instances from Roblox Studio to the filesystem
- Automatically convert your existing game to work with Rojo
- Import custom instances like MoonScript code
Documentation
Documentation is hosted in the rojo.space repository.
Contributing
Check out our contribution guide for detailed instructions for helping work on Rojo!
Pull requests are welcome!
Rojo supports Rust 1.43.1 and newer. The minimum supported version of Rust is based on the latest versions of the dependencies that Rojo has.
License
Rojo is available under the terms of the Mozilla Public License, Version 2.0. See LICENSE.txt for details.