Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎮 Rojito

Switch which Roblox game Rojo is serving — from your menu bar, in one click.

Rojito turns juggling multiple Rojo projects into changing workspaces instead of babysitting servers and ports. Pick a game, and Rojito stops whatever was serving, starts the one you want on a fixed port, and opens its place in Studio. Only one game is ever live at a time.

macOS 14+ Swift 6 Menu bar app Rojo


Rojito menu bar popover showing a searchable list of Rojo projects with WavRider actively serving on port 34872, pinned to the top with a Stop button

Why Rojito?

If you build more than one Roblox game, you know the dance: cd into a project, rojo serve, remember which port, kill it, cd into the next one, reconnect the plugin, repeat. Switch to the wrong terminal and you sync the wrong game into the wrong place.

Rojito makes that a single click. It scans a folder full of Rojo projects, lists them all, and lets you flip between them like tabs — each on the same consistent port (34872) so your Studio plugin never loses track.

✨ Features

  • 🔎 Auto-discovery — point it at a root folder (default ~/Developer/Roblox) and it finds every *.project.json, listed and searchable. Repos that nest the Rojo project in a subfolder (PlayerLab/playerlab-roblox/) are found too, and still listed under the repo's name.
  • ⚡ One-click switch — click a game to serve it and open its place in Studio. The previous server stops automatically. Radio-style: one game live at a time, always the same port.
  • 🏠 Per-project places — each game gets its own PlaceId, so state never leaks between games. (See The state-bleed trap below — this is the whole reason Rojito exists.)
  • 🛡️ Cross-sync guard — if a project declares servePlaceIds and the PlaceId you saved isn't one of them, Rojito warns you before connecting, because Rojo would refuse to sync anyway.
  • 🟢 Live status — the menu-bar glyph and a status pill show Idle / Starting / Serving / Error, plus a dot for whether Roblox Studio is running.
  • 🛠️ Right-there actions — hover any row to open the folder in your IDE (Cursor by default), reveal it in Finder, open its place in Studio, or Focus IDE + Studio to bring both to the front.
  • 📜 Built-in logs, Restart & Stop — watch Rojo's output, restart the server, or stop everything, right from the footer.
  • 🪶 Genuinely lightweight — a native SwiftUI menu-bar app. No dock icon, no Electron, ~1 MB.

The state-bleed trap

The obvious approach is one clean test place that every game syncs into. It doesn't work — and Rojito was built the moment we hit the wall.

Rojo only writes the instances and properties in the current project's tree, and it never removes what a previous game left behind. So this, in one game:

// Riftfall/default.project.json
"StarterPlayer": {
  "$properties": { "CameraMode": "LockFirstPerson" }
}

...leaves your next game locked in first person, because that game doesn't manage StarterPlayer and Rojo has nothing to reset it back to. Camera modes, lighting, service properties, stray instances — they all pile up in a shared place.

Rojito's answer: give each game its own place. Assign a PlaceId per project (Rojito remembers it), and clicking a game opens that game's place. No shared state, no bleed, and it matches your real publish targets.

📦 Install

Requires macOS 14+, the Xcode command-line tools, and Rojo installed via Aftman/Rokit or on your PATH. Rojito resolves the newest concrete rojo binary itself, so it works even outside a project that lists Rojo in aftman.toml.

git clone <your-repo-url> Rojito && cd Rojito
./build.sh                       # compiles + assembles Rojito.app (ad-hoc signed)
cp -R Rojito.app /Applications/
open /Applications/Rojito.app    # look for the ◎ icon in your menu bar

Run at login: add Rojito.app under System Settings → General → Login Items.

🚀 Usage

  1. Click the menu-bar icon. Every Rojo project under your root folder is listed — start typing to filter.
  2. First time per game: hover a row → Set PlaceId…, and paste that game's PlaceId (the number in its Roblox place URL). Rows show no PlaceId in orange until you do.
  3. Click a game. Rojito serves it on port 34872 and opens its place in Studio. Connect the Rojo plugin in that place and go.
  4. Switch games by clicking another — the old server dies, the new one starts, the right place opens. Click the live game again (or Stop) to serve nothing.

Prefer to just swap what's served without Studio popping up? Toggle the little window icon in the footer to turn auto-open off.

⚙️ Configuration

Everything persists in UserDefaults:

Setting Default Where
Root folder ~/Developer/Roblox Footer folder button
Port 34872 (Rojo's default)
IDE Cursor (com.todesktop.230313mzl4w4u92)
PlaceId (per project) from servePlaceIds if present Row Set PlaceId
Auto-open Studio on switch On Footer window icon

🧱 How it's built

A small, readable SwiftUI codebase:

Sources/Rojito/
  RojitoApp.swift        MenuBarExtra entry (.window style)
  AppState.swift         scanning · the single serve process · actions · persistence
  ProjectScanner.swift   finds *.project.json under the root (up to 3 levels deep)
  RojoLocator.swift      resolves the newest concrete rojo binary
  MenuContentView.swift  header · search · list · footer · logs
  ProjectRow.swift       one project row + PlaceId editor
Resources/               Info.plist (LSUIElement) · icon generator
build.sh                 assembles the .app bundle

🗺️ Roadmap

  • Companion Studio plugin that reports the currently-open PlaceId, so Rojito can auto-highlight and activate the matching project — a hands-free publish loop.
  • MCP-connection status indicator.
  • Optional world-generation / preview actions.

License

MIT — do whatever you like. Not affiliated with or endorsed by Roblox Corporation.

Built with Swift, for people who ship more than one game.

About

macos menu bar app for serving rojo projects and opening the corresponding studio place id

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages