mcpField
R
rojo-pro

rojo-pro

github.com/dig1tDevelopment5243 installsUpdated 5w ago
Repository

About rojo-pro

Rojo Professional is a skill for using Rojo to bridge filesystem-based development and Roblox Studio. It covers live syncing through the Studio plugin, building deployment files, and organizing Roblox projects in Git.

Key features

  1. 01Sync files with Roblox Studio
  2. 02Build `.rbxl` and `.rbxm` files
  3. 03Configure project trees and properties
  4. 04Manage dev and production projects
  5. 05Set up sourcemaps and package types

Use cases

  1. 01Developing Roblox games in external editors
  2. 02Syncing code changes into Studio
  3. 03Preparing project files for deployment

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/dig1t/skills --skill rojo-pro

After installing, type/rojo-proin Claude Code to confirm it loaded.

Bundled filesreferences/patterns.mdreferences/sharp_edges.md

Details

From the project README

Rojo Professional

Rojo bridges the filesystem and Roblox Studio: write code in external editors, live-sync to Studio via the plugin, build .rbxl/.rbxm files for deployment, and keep everything in Git.

Quick Reference

Essential Commands
# Initialize new project
rojo init my-game

# Start dev server (connects to Studio plugin)
rojo serve

# Serve specific project file
rojo serve dev.project.json

# Build standalone file
rojo build -o game.rbxl
rojo build deploy.project.json -o game.rbxl

# Generate sourcemap (for luau-lsp type checking)
rojo sourcemap default.project.json -o sourcemap.json

# Install Studio plugin
rojo plugin install
File Naming Conventions
File PatternRoblox Instance
*.server.luauScript (runs on server)
*.client.luauLocalScript (runs on client)
*.luau or *.luaModuleScript
init.server.luauDirectory becomes Script
init.client.luauDirectory becomes LocalScript
init.luauDirectory becomes ModuleScript
*.model.jsonCustom model definition
*.meta.jsonMetadata for sibling file/folder
*.rbxm / *.rbxmxBinary/XML model files
*.txtStringValue
*.csvLocalizationTable
Project File Structure
{
  "name": "MyGame",
  "tree": {
    "$className": "DataModel",
    "ReplicatedStorage": {
      "$className": "ReplicatedStorage",
      "Shared": { "$path": "src/Shared" },
      "Packages": { "$path": "Packages" }
    },
    "ServerScriptService": {
      "$className": "ServerScriptService",
      "Server": { "$path": "src/Server" }
    },
    "ReplicatedFirst": {
      "$className": "ReplicatedFirst",
      "Client": { "$path": "src/Client" }
    },
    "StarterPlayer": {
      "$className": "StarterPlayer",
      "StarterPlayerScripts": {
        "$className": "StarterPlayerScripts",
        "$path": "src/StarterPlayerScripts"
      }
    }
  }
}
Tree Node Properties
  • $className - Roblox class (required for services, optional with $path)
  • $path - Filesystem path to sync
  • $properties - Instance properties
  • $ignoreUnknownInstances - Don't delete untracked instances (useful for terrain)
  • Any other key - Child instance name
Optional Project Settings
{
  "servePort": 34872,
  "servePlaceIds": [123456789],
  "placeId": 123456789,
  "gameId": 987654321,
  "globIgnorePaths": ["**/*.spec.luau", "**/test/**"],
  "emitLegacyScripts": true
}

Project setup and multi-environment patterns: references/patterns.md. Sync troubleshooting: references/sharp_edges.md.

Common Patterns

Multi-Project Setup (Dev/Prod)
project/
├── default.project.json    # Development (rojo serve)
├── deploy.project.json     # Production build
├── src/
├── Packages/
└── ...
Library/Package Distribution

Minimal config for distributing a standalone module:

{
  "name": "my-library",
  "tree": {
    "$path": "src"
  }
}
Setting Instance Properties
{
  "$className": "Part",
  "$properties": {
    "Anchored": true,
    "Size": [4, 1, 2],
    "Color": [1, 0, 0],
    "BrickColor": { "BrickColor": "Bright red" },
    "Material": { "Enum": "Material.Neon" }
  }
}
Preserving Studio-Created Instances
{
  "Workspace": {
    "$className": "Workspace",
    "$ignoreUnknownInstances": true,
    "GameContent": { "$path": "src/Workspace" }
  }
}

Integration with Toolchain

Aftman (Tool Management)
# aftman.toml
[tools]
rojo = "rojo-rbx/[email protected]"
wally = "UpliftGames/[email protected]"
stylua = "JohnnyMorganz/[email protected]"
selene = "Kampfkarren/[email protected]"
luau-lsp = "JohnnyMorganz/[email protected]"
Wally (Package Management)
# wally.toml
[package]
name = "author/my-game"
version = "1.0.0"
realm = "shared"
registry = "https://github.com/UpliftGames/wally-index"

[dependencies]
Promise = "evaera/[email protected]"
Signal = "sleitnick/[email protected]"

Packages install to Packages/ and must be mapped in project file.

Type Checking Setup
# Generate sourcemap for luau-lsp
rojo sourcemap default.project.json -o sourcemap.json

# Generate Wally package types
wally-package-types --sourcemap sourcemap.json Packages

After Cloning a Repo

If Packages/ is missing or you see "path does not exist" errors:

wally install                                           # Install packages from wally.toml
rojo sourcemap default.project.json -o sourcemap.json   # Regenerate sourcemap

Packages/ is gitignored - it must be regenerated after every clone.

Anti-Patterns

DON'T:

  • Edit files in Studio while Rojo is connected (changes will be overwritten)
  • Use spaces in file/folder names (use PascalCase or snake_case)
  • Forget $className for Roblox services
  • Mix .lua and .luau extensions inconsistently
  • Put server code in ReplicatedStorage (security risk)
  • Commit Packages/ to git (it's generated by wally install)
  • Forget to run wally install after cloning (Packages/ won't exist)

DO:

  • Use .luau extension consistently (Roblox's official Lua dialect)
  • Keep sourcemap updated after changing project structure
  • Use init.luau for folder-as-module pattern
  • Add Packages/ to .gitignore
  • Use multi-project setup for different environments

Comments

Markdown supported