Installation
Three ways to install | pick the one that fits your workflow. The Studio command bar option gets you running in under 30 seconds without leaving Studio.
Open Roblox Studio, press View → Command Bar, paste the line below, and hit Enter.
RoExpress is downloaded from the Creator Store and placed in ReplicatedStorage automatically.
When it runs you should see this in the Output window:
Then require it from any script:
local RoExpress = require(game.ReplicatedStorage.RoExpress)
What the installer does
-
Uses
HttpService:GetAsyncto fetchinstall.luafrom the GitHub repository. -
Runs the fetched script with
loadstring().loadstringis available in Studio's command bar context. -
The installer fetches each of the 22 module source files directly from GitHub raw, creates
ModuleScriptinstances, and sets theirSourceproperty. -
Parents the completed
RoExpresshierarchy toReplicatedStorage. Re-running removes the old install first so you always get a clean copy.
Full install.lua
The script fetched from GitHub. You can read it before running: raw.githubusercontent.com →
local HttpService = game:GetService("HttpService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local BRANCH = "main"
local BASE = "https://raw.githubusercontent.com/unofficialrobloxtutor/RoExpress/" .. BRANCH .. "/src/"
local function fetch(path)
local ok, r = pcall(HttpService.GetAsync, HttpService, BASE .. path)
if not ok then error("[RoExpress] Failed to fetch " .. path) end
return r
end
local function ms(name, source, parent)
local m = Instance.new("ModuleScript")
m.Name, m.Source, m.Parent = name, source, parent
return m
end
local existing = ReplicatedStorage:FindFirstChild("RoExpress")
if existing then existing:Destroy() end
print("[RoExpress] Downloading from GitHub (" .. BRANCH .. ")...")
local root = ms("RoExpress", fetch("init.luau"), ReplicatedStorage)
for _, name in { "App","Base64","Benchmark","Bridge","Broadcast","Harpy",
"Listener","Network","Port","Promise","Router","Tamper",
"TokenBucket","TypeCoercer","Version" } do
ms(name, fetch(name .. ".luau"), root)
end
local codec = ms("Codec", fetch("Codec/init.luau"), root)
ms("LZ77", fetch("Codec/LZ77.luau"), codec)
ms("LZH", fetch("Codec/LZH.luau"), codec)
local stream = ms("Stream", fetch("Stream/init.luau"), root)
ms("Channel", fetch("Stream/Channel.luau"), stream)
ms("Schema", fetch("Stream/Schema.luau"), stream)
ms("Types", fetch("Stream/Types.luau"), stream)
print("[RoExpress] Done -> ReplicatedStorage/RoExpress (22 modules)")
Wally is the standard Roblox package manager. Use this method if your project already uses Rojo and a CI pipeline.
-
Add RoExpress to your
wally.toml:
[dependencies]
RoExpress = "unofficialrobloxtutor/roexpress@2.4.0"
-
Run the install:
wally install
-
Require from any script (Wally places packages in
ReplicatedStorage/Packagesby default):
local RoExpress = require(game.ReplicatedStorage.Packages.RoExpress)
Download the latest release from GitHub and drop it into your place file manually.
-
Go to the GitHub releases page and download
RoExpress.rbxmfrom the latest release. -
In Roblox Studio, right-click
ReplicatedStoragein the Explorer → Insert from File → select the downloaded file. -
Require it:
local RoExpress = require(game.ReplicatedStorage.RoExpress)
Next steps
Once RoExpress is in ReplicatedStorage, head to the quick start:
| Where to go | What you will find |
|---|---|
| Quick Start | Server and client setup in under 20 lines |
| App | Full routing and middleware API |
| Network | Client request, retry, and Promise API |
| Route Organisation | Keeping routes clean as the project grows |