diff --git a/README.md b/README.md index 03600c95..2616a42f 100644 --- a/README.md +++ b/README.md @@ -3,53 +3,37 @@ Travis-CI Build Status - - Documentation -
 
-**EARLY DEVELOPMENT, USE WITH CARE** +Rojo is a flexible multi-tool designed for creating robust Roblox projects. It's in early development, but is still useful for many projects. -Rojo is a flexible multi-tool designed for creating robust Roblox projects. +It's designed for power users who want to use the **best tools available** for building games, libraries, and plugins. -It's designed for power users who want to use the best tools available for building games, libraries, and plugins. +## Features -It has a number of desirable features *right now*: +Rojo has a number of desirable features *right now*: -* Work from the filesystem, in your favorite editor +* Work on scripts from the filesystem, in your favorite editor * Version your place, library, or plugin using Git or another VCS Soon, Rojo will be able to: +* Sync Roblox objects (including models) bi-directionally between the filesystem and Roblox Studio * Create installation scripts for libraries to be used in standalone places * Similar to [rbxpacker](https://github.com/LPGhatguy/rbxpacker), another one of my projects * Add strongly-versioned dependencies to your project ## Installation Rojo has two components: -* The binary, written in Rust +* The command line tool, written in Rust * The [Roblox Studio plugin](https://www.roblox.com/library/1211549683/Rojo-v0-0-0), written in Lua -To install the binary, there are two options: -* Cargo, which requires you to have Rust installed -* Pre-built binaries from the [the GitHub releases page](https://github.com/LPGhatguy/rojo/releases) - -### Cargo (Recommended) -Make sure you have [Rust 1.21 or newer](https://www.rust-lang.org/) installed. - -Install Rojo using: - -```sh -cargo install rojo - -# Installed! -rojo help -``` - -### Pre-Built (Windows only) -Download the latest binary from [the GitHub releases page](https://github.com/LPGhatguy/rojo/releases). Put it somewhere you can access it from a terminal! +To install the command line tool, there are two options: +* Cargo, if you have Rust installed + * Use `cargo install rojo` -- Rojo will be available with the `rojo` command +* Download a pre-built Windows binary from [the GitHub releases page](https://github.com/LPGhatguy/rojo/releases) ## Usage For more help, use `rojo help`. @@ -66,8 +50,91 @@ rojo init Rojo will create an empty project in the directory. +The default project looks like this: + +```json +{ + "name": "my-new-project", + "servePort": 8000, + "partitions": {} +} +``` + +### Start Dev Server +To create a server that allows the Rojo Dev Plugin to access your project, use: + +```sh +rojo serve +``` + +The tool will tell you whether it found an existing project. You should then be able to connect and use the project from within Roblox Studio! + ### Migrating an Existing Roblox Project -Coming soon! +**Coming soon!** + +### Syncing into Roblox +In order to sync code into Roblox, you'll need to add one or more "partitions" to your configuration. A partition tells Rojo how to map directories to Roblox objects. + +Each entry in the partitions table has a unique name, a filesystem path, and the full name of the Roblox object to sync into. + +For example, if you want to map your `src` directory to an object named `My Cool Game` in `ReplicatedStorage`, you could use this configuration: + +```json +{ + "name": "rojo", + "servePort": 8000, + "partitions": { + "game": { + "path": "src", + "target": "ReplicatedStorage.My Cool Game" + } + } +} +``` + +The `path` parameter is relative to the project file. + +The `target` starts at `game` and crawls down the tree. If any objects don't exist along the way, they'll be created as `Folder` instances. + +Run `rojo serve` in the directory containing this project, then press the "Sync In" or "Toggle Polling" buttons in the Roblox Studio plugin to move code into your game. + +### Sync Details +The structure of files and folders on the filesystem are preserved when syncing into game. + +Creation of Roblox instances follows a simple set of rules. The first rule that matches the file name is chosen: + +| File Name | Instance Type | Notes | +| -------------- | -------------- | ----------------------------------------- | +| `*.server.lua` | `Script` | `Source` will contain the file's contents | +| `*.client.lua` | `LocalScript` | `Source` will contain the file's contents | +| `*.lua` | `ModuleScript` | `Source` will contain the file's contents | +| `*` | `StringValue` | `Value` will contain the file's contents | + +Any folders on the filesystem will turn into `Folder` objects unless they contain a file named `init` with any extension. Following the convention of Lua, those objects will instead be whatever the `init` file would turn into. + +For example, this file tree: + +* my-game + * init.lua + * foo.lua + +Will turn into this tree in Roblox: + +* `my-game` (`ModuleScript` with source from `my-game/init.lua`) + * `foo` (`ModuleScript` with source from `my-game/foo.lua`) + +## Inspiration +There are lots of other tools that sync scripts into Roblox, or otherwise work to improve the development flow outside of Roblox Studio. + +Here are a few, if you're looking for alternatives or supplements to Rojo: +* [rbxmk by Anaminus](https://github.com/anaminus/rbxmk) +* [RbxRefresh by Osyris](https://github.com/osyrisrblx/RbxRefresh) +* [RbxSync by evaera](https://github.com/evaera/RbxSync) +* [CodeSync](https://github.com/MemoryPenguin/CodeSync) and [rbx-exteditor](https://github.com/MemoryPenguin/rbx-exteditor) by [MemoryPenguin](https://github.com/MemoryPenguin) + +I also have a couple tools that Rojo intends to replace: +* [rbxfs](https://github.com/LPGhatguy/rbxfs), which has been deprecated by Rojo +* [rbxpacker](https://github.com/LPGhatguy/rbxpacker), which is still useful ## License Rojo is available under the terms of the MIT license. See [LICENSE.md](LICENSE.md) for details. \ No newline at end of file diff --git a/rojo.json b/rojo.json index c3efd37e..dd590d87 100644 --- a/rojo.json +++ b/rojo.json @@ -1,9 +1,10 @@ { "name": "rojo", + "servePort": 8000, "partitions": { - "Rojo": { + "plugin": { "path": "plugin/src", - "target": "ReplicatedStorage.Rojo" + "target": "ReplicatedStorage.Rojo Plugin" } } } \ No newline at end of file