mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-23 14:15:24 +00:00
Improve docs, add internals guide
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
[TOC]
|
||||||
|
|
||||||
|
## Creating the Rojo Project
|
||||||
|
|
||||||
To use Rojo to build a place, you'll need to create a new project file, which tells Rojo how your project is structured on-disk and in Roblox.
|
To use Rojo to build a place, you'll need to create a new project file, which tells Rojo how your project is structured on-disk and in Roblox.
|
||||||
|
|
||||||
Create a new folder, then run `rojo init` inside that folder to initialize an empty project.
|
Create a new folder, then run `rojo init` inside that folder to initialize an empty project.
|
||||||
|
|||||||
45
docs/internals/overview.md
Normal file
45
docs/internals/overview.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
This document aims to give a general overview of how Rojo works. It's intended for people who want to contribute to the project as well as anyone who's just curious how the tool works!
|
||||||
|
|
||||||
|
[TOC]
|
||||||
|
|
||||||
|
## CLI
|
||||||
|
|
||||||
|
### RbxTree
|
||||||
|
Rojo uses a library named [`rbx_tree`](https://github.com/LPGhatguy/rbx-tree) as its implementation of the Roblox DOM. It serves as a common format for serialization to all the formats Rojo supports!
|
||||||
|
|
||||||
|
Rojo uses two related libraries to deserialize instances from Roblox's file formats, `rbx_xml` and `rbx_binary`.
|
||||||
|
|
||||||
|
### In-Memory Filesystem (IMFS)
|
||||||
|
Relevant source files:
|
||||||
|
|
||||||
|
* [`server/src/imfs.rs`](https://github.com/LPGhatguy/rojo/blob/master/server/src/imfs.rs)
|
||||||
|
* [`server/src/fs_watcher.rs`](https://github.com/LPGhatguy/rojo/blob/master/server/src/fs_watcher.rs)
|
||||||
|
|
||||||
|
Rojo keeps an in-memory copy of all files that it needs reasons about. This enables taking fast, stateless, tear-tree snapshots of files to turn them into instances.
|
||||||
|
|
||||||
|
Keeping an in-memory copy of file contents will also enable Rojo to debounce changes that are caused by Rojo itself. This'll happen when two-way sync finally happens.
|
||||||
|
|
||||||
|
### Snapshot Reconciler
|
||||||
|
Relevant source files:
|
||||||
|
|
||||||
|
* [`server/src/snapshot_reconciler.rs`](https://github.com/LPGhatguy/rojo/blob/master/server/src/snapshot_reconciler.rs)
|
||||||
|
* [`server/src/rbx_snapshot.rs`](https://github.com/LPGhatguy/rojo/blob/master/server/src/rbx_snapshot.rs)
|
||||||
|
* [`server/src/rbx_session.rs`](https://github.com/LPGhatguy/rojo/blob/master/server/src/rbx_session.rs)
|
||||||
|
|
||||||
|
To simplify incremental updates of instances, Rojo generates lightweight snapshots describing how files map to instances. This means that Rojo can treat file change events similarly to damage painting as opposed to trying to surgically update the correct instances.
|
||||||
|
|
||||||
|
This approach reduces the number of desynchronization bugs, reduces the complexity of important pieces of the codebase, and makes writing plugins a lot easier.
|
||||||
|
|
||||||
|
### HTTP API
|
||||||
|
Relevant source files:
|
||||||
|
|
||||||
|
* [`server/src/web.rs`](https://github.com/LPGhatguy/rojo/blob/master/server/src/web.rs)
|
||||||
|
|
||||||
|
The Rojo live-sync server and Roblox Studio plugin communicate via HTTP.
|
||||||
|
|
||||||
|
Requests sent from the plugin to the server are regular HTTP requests.
|
||||||
|
|
||||||
|
Messages sent from the server to the plugin are delivered via HTTP long-polling. This is an approach that uses long-lived HTTP requests that restart on timeout. It's largely been replaced by WebSockets, but Roblox doesn't have support for them.
|
||||||
|
|
||||||
|
## Roblox Studio Plugin
|
||||||
|
TODO
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
Rojo underwent a large refactor during most of 2018 to enable a bunch of new features and lay groundwork for lots more in 2019. As such, Rojo **0.5.x** projects are not compatible with Rojo **0.4.x** projects.
|
Rojo underwent a large refactor during most of 2018 to enable a bunch of new features and lay groundwork for lots more in 2019. As such, Rojo **0.5.x** projects are not compatible with Rojo **0.4.x** projects.
|
||||||
|
|
||||||
|
[TOC]
|
||||||
|
|
||||||
## Supporting Both 0.4.x and 0.5.x
|
## Supporting Both 0.4.x and 0.5.x
|
||||||
Rojo 0.5.x uses a different name for its project format. While 0.4.x used `rojo.json`, 0.5.x uses `default.project.json`, which allows them to coexist.
|
Rojo 0.5.x uses a different name for its project format. While 0.4.x used `rojo.json`, 0.5.x uses `default.project.json`, which allows them to coexist.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
This page aims to describe how Rojo turns files on the filesystem into Roblox objects.
|
This page aims to describe how Rojo turns files on the filesystem into Roblox objects.
|
||||||
|
|
||||||
|
[TOC]
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
| File Name | Instance Type |
|
| File Name | Instance Type |
|
||||||
| -------------- | ------------------- |
|
| -------------- | ------------------- |
|
||||||
@@ -22,7 +24,7 @@ Some common cases you might hit are:
|
|||||||
* `MeshPart.MeshId`
|
* `MeshPart.MeshId`
|
||||||
* `HttpService.HttpEnabled`
|
* `HttpService.HttpEnabled`
|
||||||
|
|
||||||
For a list of all property types that Rojo can reason about, both when live-syncing and when building place files, look at [rbx_tree's type coverage documentation](https://github.com/LPGhatguy/rbx-tree/tree/master/rbx_tree#coverage).
|
For a list of all property types that Rojo can reason about, both when live-syncing and when building place files, look at [rbx_tree's type coverage chart](https://github.com/LPGhatguy/rbx-tree#property-type-coverage).
|
||||||
|
|
||||||
## Folders
|
## Folders
|
||||||
Any directory on the filesystem will turn into a `Folder` instance unless it contains an 'init' script, described below.
|
Any directory on the filesystem will turn into a `Folder` instance unless it contains an 'init' script, described below.
|
||||||
@@ -93,9 +95,6 @@ It would turn into instances in this shape:
|
|||||||
## Binary and XML Models
|
## Binary and XML Models
|
||||||
Rojo supports both binary (`.rbxm`) and XML (`.rbxmx`) models generated by Roblox Studio or another tool.
|
Rojo supports both binary (`.rbxm`) and XML (`.rbxmx`) models generated by Roblox Studio or another tool.
|
||||||
|
|
||||||
Not all property types are supported!
|
Not all property types are supported for all formats!
|
||||||
|
|
||||||
For a rundown of supported types, see:
|
For a rundown of supported types, check out [rbx_tree's type coverage chart](https://github.com/LPGhatguy/rbx-tree#property-type-coverage).
|
||||||
|
|
||||||
* [rbxm Type Coverage](https://github.com/LPGhatguy/rbx-tree/tree/master/rbx_binary#coverage)
|
|
||||||
* [rbxmx Type Coverage](https://github.com/LPGhatguy/rbx-tree/tree/master/rbx_xml#coverage)
|
|
||||||
@@ -16,6 +16,8 @@ nav:
|
|||||||
- Creating a Place with Rojo: getting-started/creating-a-place.md
|
- Creating a Place with Rojo: getting-started/creating-a-place.md
|
||||||
- Sync Details: sync-details.md
|
- Sync Details: sync-details.md
|
||||||
- Migrating from 0.4.x to 0.5.x: migrating-to-epiphany.md
|
- Migrating from 0.4.x to 0.5.x: migrating-to-epiphany.md
|
||||||
|
- Rojo Internals:
|
||||||
|
- Internals Overview: internals/overview.md
|
||||||
|
|
||||||
extra_css:
|
extra_css:
|
||||||
- extra.css
|
- extra.css
|
||||||
|
|||||||
Reference in New Issue
Block a user