Update references to UserGeneratedLLC in documentation and enhance project file specifications

- Changed all instances of `rojo-rbx` to `UserGeneratedLLC` in the rbx-dom and rojo documentation to reflect the new repository ownership.
- Updated project file format specifications to prioritize `.project.json5` over `.project.json`, clarifying the preferred file extensions and their usage.
- Revised syncback documentation to reflect changes in file extensions from `.lua` to `.luau`, ensuring consistency across the project.
- Improved clarity in the API and communication architecture documentation, emphasizing the new structure and endpoints.
This commit is contained in:
Joe 2026-02-02 12:27:08 -06:00
parent e6efc04756
commit 1bf32f0920
6 changed files with 782 additions and 1264 deletions

View file

@ -8,7 +8,7 @@ globs:
# rbx-dom Submodule
**This is a Git submodule** linking to https://github.com/rojo-rbx/rbx-dom - a separate project with its own repository, CI/CD, and release cycle.
**This is a Git submodule** linking to https://github.com/UserGeneratedLLC/rbx-dom - a separate project with its own repository, CI/CD, and release cycle.
**Critical:** When working on rbx-dom code, refer to `rbx-dom/README.md` and follow that project's conventions, not Rojo's.
@ -65,7 +65,7 @@ A collection of cross-platform libraries enabling any software to interact with
```bash
# Clone Rojo with submodules
git clone --recursive https://github.com/rojo-rbx/rojo
git clone --recursive https://github.com/UserGeneratedLLC/rojo
# Or update existing submodules
git submodule update --init --recursive
@ -105,7 +105,7 @@ Since rbx-dom is a separate repository:
1. **Fork and clone rbx-dom separately** for development
2. **Make changes in the rbx-dom repository** (not the submodule)
3. **Open PRs against rojo-rbx/rbx-dom** (not rojo-rbx/rojo)
3. **Open PRs against UserGeneratedLLC/rbx-dom** (not UserGeneratedLLC/rojo)
4. **Update Rojo's submodule** only after rbx-dom changes are merged
### Testing Changes
@ -152,7 +152,7 @@ rbx-dom packages must be published **in dependency order**:
4. `rbx_binary` and `rbx_xml` (depend on all above)
**Only maintainers can publish.** If you need a new rbx-dom release:
1. Open issue in rojo-rbx/rbx-dom
1. Open issue in UserGeneratedLLC/rbx-dom
2. Explain what features/fixes you need
3. Maintainers will coordinate release
@ -168,10 +168,10 @@ git submodule update --init --recursive
cd rbx-dom && git checkout main && git pull
```
**Property bugs:** Check `rbx-dom/test-files/` for similar cases, file issue in rojo-rbx/rbx-dom
**Property bugs:** Check `rbx-dom/test-files/` for similar cases, file issue in UserGeneratedLLC/rbx-dom
**Outdated reflection:** File issue requesting reflection database update (maintainers run `rbx_reflector`)
## Contributing to rbx-dom
See https://github.com/rojo-rbx/rbx-dom. Remember: rbx-dom is designed for projects beyond Rojo, so changes should be general-purpose.
See https://github.com/UserGeneratedLLC/rbx-dom. Remember: rbx-dom is designed for projects beyond Rojo, so changes should be general-purpose.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -71,8 +71,8 @@ pub fn syncback_loop(
**Default behavior.** Preserves existing file structure:
- If `src/MyScript.lua` exists, update it
- If `src/MyFolder/init.lua` exists (directory structure), preserve it
- If `src/MyScript.luau` exists, update it
- If `src/MyFolder/init.luau` exists (directory structure), preserve it
- Only creates new files when instances don't match anything
- Compares hashes to detect actual changes (avoids rewriting unchanged files)
@ -119,7 +119,7 @@ pub struct SyncbackRules {
- Filters out `Name`, `Parent` (always)
- Filters out properties in `ignore_properties`
- Filters out unscriptable properties if `sync_unscriptable: false`
- Filters out middleware-specific properties (e.g., `Script.Source` when writing to `.lua` file)
- Filters out middleware-specific properties (e.g., `Script.Source` when writing to `.luau` file)
### Hidden Services
@ -198,11 +198,11 @@ pub struct SyncbackSnapshot<'sync> {
```rust
// Join child to current path
snapshot.with_joined_path(new_ref, old_ref)?
// Result: parent_path/ChildName.lua
// Result: parent_path/ChildName.luau
// Use base path
snapshot.with_base_path(&base, new_ref, old_ref)?
// Result: base/ChildName.lua
// Result: base/ChildName.luau
// Explicit path
snapshot.with_new_path(path, new_ref, old_ref)
@ -213,7 +213,7 @@ snapshot.with_new_path(path, new_ref, old_ref)
- Uses instance name
- Adds appropriate extension based on middleware
- Encodes Windows-invalid chars if enabled
- Example: `Script` named "My Script" → `My Script.server.lua`
- Example: `Script` named "My Script" → `My Script.server.luau`
### Property Filtering
@ -232,7 +232,7 @@ snapshot.get_path_filtered_properties(new_ref)
**Decision tree:**
1. **Old instance exists?** → Use same middleware as before (preserve structure)
2. **Script type?** → Choose appropriate Lua middleware (`.server.lua`, `.client.lua`, etc.)
2. **Script type?** → Choose appropriate Lua middleware (`.server.luau`, `.client.luau`, etc.)
3. **Model/container?** → Choose directory or rbxm based on complexity
4. **Special types?** → CSV for LocalizationTable, TXT for StringValue
5. **Fallback** → Rbxm or JsonModel
@ -334,14 +334,14 @@ Script "MyScript"
```
**Syncback produces:**
```lua
-- src/MyScript.server.lua
```luau
-- src/MyScript.server.luau
print('hello')
```
**Meta file (if needed):**
```json5
// src/MyScript.server.meta.json5
// src/MyScript.server.meta.json5 (for MyScript.server.luau)
{
"$properties": {
"Disabled": false
@ -352,7 +352,7 @@ print('hello')
### Syncing a Model
**Simple model (few children):** → `.rbxm` or `.rbxmx` file
**Complex model (many children):** → Directory with `init.meta.json5`
**Complex model (many children):** → Directory with `init.meta.json5` or `init.luau`
### Syncing Nested Folders
@ -365,9 +365,9 @@ Roblox:
Filesystem:
src/Modules/
Utils.lua
Utils.luau
Math/
Add.lua
Add.luau
```
## Error Handling

View file

@ -33,11 +33,11 @@ This avoids manual tree manipulation bugs and handles complex cases (large model
## Project Files
`.project.json` or `.project.json5` (JSON5 preferred for comments):
`.project.json5` (preferred) | `.project.json` (legacy):
```json5
{
name: "MyProject", // Optional if default.project.json (inherits folder name)
name: "MyProject", // Optional if default.project.json5 (inherits folder name)
tree: {
$path: "src"
},
@ -50,8 +50,9 @@ This avoids manual tree manipulation bugs and handles complex cases (large model
**Key conventions:**
- Services don't need explicit `$className` (inferred)
- `default.project.json` inherits parent folder name
- `default.project.json5` inherits parent folder name
- Projects can be nested (each has independent sync rules)
- **Use `.luau` for scripts, `.json5` for config** (`.lua`/`.json` are legacy but supported)
## Contributing
@ -66,7 +67,7 @@ For plugin work: Luau LSP, Studio with "Reload plugins on file change"
### Initial Setup
```bash
git clone --recursive https://github.com/rojo-rbx/rojo
git clone --recursive https://github.com/UserGeneratedLLC/rojo
cd rojo
rokit install # Installs tools from rokit.toml
cargo test # Verify setup
@ -127,7 +128,7 @@ Every PR updates `CHANGELOG.md`:
* Made a change to Rojo ([#1234])
[#1234]: https://github.com/rojo-rbx/rojo/pull/1234
[#1234]: https://github.com/UserGeneratedLLC/rojo/pull/1234
```
Keep link definitions in ascending order.

View file

@ -38,25 +38,29 @@ pub struct InstanceSnapshot {
Transforms files → `InstanceSnapshot`. Main entry: `snapshot_from_vfs()`
| File | Handler | Result |
|------|---------|--------|
| `*.lua` / `*.luau` | `lua.rs` | ModuleScript |
| `*.server.luau` | `lua.rs` | Script (RunContext.Server) |
| `*.server.lua` | `lua.rs` | Script (RunContext.Legacy) |
| `*.client.luau` | `lua.rs` | Script (RunContext.Client) |
| `*.client.lua` | `lua.rs` | LocalScript |
| `*.plugin.lua(u)` | `lua.rs` | Script (RunContext.Plugin) |
| `*.local.lua(u)` | `lua.rs` | LocalScript |
| `*.legacy.lua(u)` | `lua.rs` | Script (RunContext.Legacy) |
| `*.rbxm` / `*.rbxmx` | `rbxm.rs` / `rbxmx.rs` | Binary/XML model tree |
| `*.model.json` | `json_model.rs` | JSON instance |
| `*.project.json` | `project.rs` | Nested project |
| `*.csv` / `*.txt` | `csv.rs` / `txt.rs` | LocalizationTable / StringValue |
| `*.toml` / `*.json` / `*.yaml` | Data → ModuleScript |
| Directory | `dir.rs` | Folder or inferred service |
| `*.meta.json` | `meta_file.rs` | Metadata overlay |
| File | Handler | Result | Note |
|------|---------|--------|------|
| `*.luau` | `lua.rs` | ModuleScript | Preferred |
| `*.server.luau` | `lua.rs` | Script (RunContext.Server) | Preferred |
| `*.client.luau` | `lua.rs` | Script (RunContext.Client) | Preferred |
| `*.plugin.luau` | `lua.rs` | Script (RunContext.Plugin) | |
| `*.local.luau` | `lua.rs` | LocalScript | |
| `*.legacy.luau` | `lua.rs` | Script (RunContext.Legacy) | |
| `*.lua` | `lua.rs` | ModuleScript | Legacy |
| `*.server.lua` | `lua.rs` | Script (RunContext.Legacy) | Legacy |
| `*.client.lua` | `lua.rs` | LocalScript | Legacy |
| `*.rbxm` / `*.rbxmx` | `rbxm.rs` / `rbxmx.rs` | Binary/XML model tree | |
| `*.model.json5` | `json_model.rs` | JSON instance | Preferred |
| `*.model.json` | `json_model.rs` | JSON instance | Legacy |
| `*.project.json5` | `project.rs` | Nested project | Preferred |
| `*.project.json` | `project.rs` | Nested project | Legacy |
| `*.csv` / `*.txt` | `csv.rs` / `txt.rs` | LocalizationTable / StringValue | |
| `*.toml` / `*.json5` / `*.yaml` | Data → ModuleScript | |
| Directory | `dir.rs` | Folder or inferred service | |
| `*.meta.json5` | `meta_file.rs` | Metadata overlay | Preferred |
| `*.meta.json` | `meta_file.rs` | Metadata overlay | Legacy |
**Init files:** `init.lua`, `init.server.lua`, etc. → Instance named after parent directory
**Init files:** `init.luau`, `init.server.luau`, etc. → Instance named after parent directory (`.lua` legacy supported)
**Context passed to middleware:**
@ -94,7 +98,7 @@ Reverse: Roblox file → filesystem
### 6. Project System (`src/project.rs`)
Parse/validate `.project.json`, handle nested projects, manage sync rules.
Parse/validate `.project.json5` (or legacy `.project.json`), handle nested projects, manage sync rules.
## Command Implementations