ZetSharpRoblox (ZSR)

Write Roblox games the easy way. ZetSharpRoblox (ZSR) is a beginner-friendly programming language that transpiles to Roblox Luau. This extension gives you full editor support for .zsr files.
What is ZSR?
ZSR simplifies Roblox scripting by replacing verbose Luau patterns with clean, readable syntax:
ZSR Luau
───────────────────────────────── ─────────────────────────────────────────
var hp = 100 → local hp = 100
still MAX = 999 → local MAX = 999 -- const
log("HP: {hp}") → print("HP: " .. tostring(hp))
get("Players") → game:GetService("Players")
v3(0, 10, 0) → Vector3.new(0, 10, 0)
tween(part, 0.5, Quad, Out, {}) → TweenService:Create(...):Play()
No semicolons. No local function. No game:GetService boilerplate. Just write and transpile.
Features
- Syntax Highlighting — keywords, macros, Roblox APIs, string interpolation, enums, and method calls all get distinct colors
- 25+ Snippets — type
tween, get, v3, func, fore, rep and hit Tab to expand
- File Icon — purple ZSR icon for
.zsr files in the explorer sidebar
- Bracket Matching — auto-close and colorize
{ }, [ ], ( )
- Comment Toggling —
Ctrl+/ for // line comments, block comments with /* */
- Auto-Indent — smart indentation inside
{ } blocks
Quick Start
- Install this extension from the marketplace (or install the
.vsix file)
- Create a file called
hello.zsr
- Start typing — you'll see syntax highlighting and snippets immediately:
// hello.zsr — your first ZSR script!
var Players = get("Players")
still MAX_HP = 100
func onJoin(player) {
log("{player.Name} joined!")
}
Players.PlayerAdded:Connect(onJoin)
- Transpile to Luau using the ZSR transpiler and paste the output into Roblox Studio
ZSR Syntax at a Glance
Variables & Constants
var score = 0 // mutable variable
still MAX = 100 // constant (cannot change)
Functions
func greet(name) {
log("Hello {name}!")
}
Control Flow
if score >= MAX {
log("Winner!")
} elif score > 50 {
log("Almost there")
} else {
log("Keep going")
}
for i = 1 to 10 { log("{i}") }
foreach p in Players:GetPlayers() {
log("{p.Name}")
}
while running { twait(0.1) }
repeat { tries += 1 } until tries == 3
Roblox Macros
get("TweenService") // game:GetService(...)
v3(0, 10, 0) // Vector3.new(...)
v2(0.5, 0.5) // Vector2.new(...)
cf(0, 5, 0) // CFrame.new(...)
cf.angles(0, 3.14, 0) // CFrame.Angles(...)
part.find("Child") // part:FindFirstChild("Child")
part.waitfor("Child") // part:WaitForChild("Child")
twait(1) // task.wait(1)
tween(part, 0.5, Quad, Out, { // Full TweenService:Create():Play()
Position = v3(0, 20, 0)
})
Snippets
Type any prefix and press Tab:
| Prefix |
What it does |
func |
Function declaration |
if / ife / ifeif |
If / if-else / if-elif-else |
forn / fore |
For loop / foreach loop |
while / rep |
While loop / repeat-until |
var / still |
Variable / constant |
log / logi |
Print / interpolated print |
tween |
Tween animation macro |
get |
Get Roblox service |
v3 / v2 / cf / cfa |
Vector3 / Vector2 / CFrame / CFrame.Angles |
find / waitfor / twait |
FindFirstChild / WaitForChild / task.wait |
inst |
Instance.new + parent |
conn |
Event:Connect handler |
Recommended Themes
Works beautifully with:
- Monokai Pro — vibrant macro colors
- One Dark Pro — clean and readable
- Dracula — excellent contrast
- Dark+ — VS Code default, solid baseline
Links
License
MIT — see LICENSE.md