33882. The status pill in the top-left shows ws :33882 when running.The Lua client connects to ws://127.0.0.1:33882 and sends an auth handshake with your username, userId, and executor name. NyxUI assigns a stable client ID (saved to nyx_client_id.txt) so console logs stay consistent across reconnects. A keep-alive ping runs every 5 seconds. If the connection drops, the loop reconnects automatically.
print("hello from NyxUI")Click + in the tab bar or press Ctrl+T to open a new tab. Each tab is an independent buffer. Right-click a tab to rename, save, hide, move to a folder, or close it. Drag tabs left or right to reorder. Unsaved tabs show a small dot indicator.
Click the Folder button in the tab bar to create a folder group. Drag a tab onto a folder header (hover 500 ms) to move it in. Folders can be collapsed to keep the tab bar tidy. Right-click a folder to rename or delete it.
Right-click a tab and choose Hide Script to obscure its name and content. Hidden tabs show as ••••••. An eye icon in the tab bar temporarily reveals them.
NyxUI uses a start/chunk/end framing protocol. Each chunk is 32 KB. The Lua client reassembles chunks and runs the script with loadstring(script, "@script"), which resets line numbers so error messages like @script:5: refer to your actual script lines.
Select your clients in the Clients panel, then press Ctrl+Enter or click Execute. The Execute button shows a badge for how many clients are currently selected.
| Shortcut | Action |
|---|---|
| Ctrl+Enter | Execute script on all selected clients |
| Ctrl+S | Save current tab to the Scripts folder |
| Ctrl+T | Open a new editor tab |
| Ctrl+F | Open the find / replace widget |
| Escape | Close the find widget |
| Alt+Z | Toggle word wrap |
| Enter (open block) | Auto-insert end / until — works even when the opener has body on the same line, e.g. while true do task.wait() |
| Ctrl+Click URL | Open https://... URLs in the system browser |
| Right-click URL | Same — opens the URL in the system browser |
| Right-click tab | Rename · Save · Hide · Move to folder · Close |
| Right-click script | Open · Rename · Favorite · AutoExec · Hide · Delete |
All standard Roblox API members — services, instances, properties, methods, events — are available as completions. Type game:GetService(" to get service name suggestions.
When an executor is connected, type workspace. (or any service) to get live children from the running game, fetched directly from the connected Roblox session.
Functions exposed by the executor (getgenv, hookfunction, readfile, etc.) appear as completions based on what the connected executor actually provides.
Type fn, for, while, if, local, pcall, etc. to expand common Lua code blocks. Smart End Insertion adds end automatically when you press Enter after a block opener.
Press Ctrl+S or click Save to save the active tab to the Scripts folder. Saved scripts appear instantly. The sidebar has two tabs at the top: Scripts lists all saved files, AutoExec lists scripts set to auto-run on connect.
| Right-click option | Description |
|---|---|
| Open | Load the script into a new editor tab |
| Rename | Rename the file on disk (updates open tabs too) |
| Favorite | Pin to the top of the list with a star icon |
| AutoExec | Toggle auto-run when an executor connects |
| Hide | Obscure name and content with •••••• |
| Delete | Permanently delete the file from disk |
To add a script: right-click it in the sidebar and choose Add to AutoExec. The script must be saved first. AutoExec scripts are shown with an orange play badge and listed in the AutoExec sidebar tab. Remove them via right-click.
Scripts run in the order they appear, sent as soon as the executor completes the auth handshake.
if _G.__ran then return end; _G.__ran = true
Click a client to toggle selection. The Execute button badge shows how many are selected. Each entry shows the Roblox username, avatar headshot, executor name, and connection status. Use the All / None buttons at the bottom of the panel to select or deselect everything at once.
The client ID (a stable NYX-... identifier) is saved to nyx_client_id.txt in the executor workspace so the same client gets the same ID and console tab across reconnects.
Drag the top edge of the console to resize it. There is a Global tab for system messages (server start, connections, execution results) and one tab per connected client for their individual output. Client tabs are created automatically on connect.
| Type | Color | Source |
|---|---|---|
| [SYS] | Dim grey / italic | NyxUI internal system events |
| (output) | Light | print(), rconsoleprint(), and rconsoleinfo() calls |
| [WARN] | Orange | warn() calls |
| [ERR] | Red | error() calls and runtime errors |
Click and drag to select text, then release to copy to clipboard. Use the Export button to save all logs to a .txt file, or Clear to wipe the active tab.
Go to Settings → Controls and enable Route Console to NyxUI. When an executor connects, NyxUI automatically installs hook scripts that mirror output through the WebSocket while preserving the executor's normal console behavior.
Each connected client gets its own console tab. Output from print, warn, rconsole*, and error is tagged with the client ID and routed to the correct tab — messages never mix between sessions.
A small Lua script runs on the executor at connect time. On executors that support hookfunction, it hooks print, warn, and rconsole functions directly so later loadstring chunks still route stdout. On executors without hook support, the globals are replaced as a fallback. Runtime errors are also captured via ScriptContext.Error and execution failures.
Hooks are installed once per connection, guarded by _G.__nyx_routing_installed. Disabling the toggle sends _G.__nyx_routing_enabled = false to all clients, silencing the hooks without removing them.
LocalScript or ModuleScript.fn.fn to env.n.LocalScript and ModuleScript instances running in the game.ModuleScript instances.nil.data to the file at path. Creates the file if it doesn't exist.data to the end of a file.true if a file exists at path.true if a folder exists at path.path.path.fn with hook. Returns the original so you can call it inside the hook.__index, __newindex) on the given object's metatable.true if fn is a C closure.true if fn is a Lua closure.true if the current function was called from an executor script.fn, sharing the same upvalues.fn.idx of fn.idx of fn to val.fn.idx inside fn.fn's bytecode.idx from fn's bytecode.idx of fn's bytecode to val.Instance objects currently in memory.nil but are still in memory.RBXScriptSignal (event).ClickDetector on part as if clicked from dist studs.ProximityPrompt as if the player interacted with it.part and target. toggle: 0 = touch, 1 = touch end.src. Optional chunk name appears in error messages.text to the system clipboard.0 to uncap.flags controls button style (e.g. 0 = OK only).consoleclear() to clear, consoledestroy() to close.options: { Url, Method, Headers, Body }. Returns { Body, StatusCode, Headers, Success }.data. Common modes: "CBC", "CFB".data. Algorithms: "sha256", "md5", "sha1".fn(packet) receives raw bytes. Return modified bytes or nil to block.fn(packet) receives raw bytes. Return modified bytes or nil to drop.WebSocket object with a :Send(msg) method. nil when disconnected.NYX-... client ID for this session. Persisted across reconnects via nyx_client_id.txt.false to silence console routing. Set to true to re-enable it. Does not remove hooks.true after routing hooks are installed. Guards against double-installation on reconnect.getgenv().Forward any message to the NyxUI console from your own scripts using the WebSocket connection:
The type field controls color in the console: "output" (light), "warn" (orange), "error" (red), "system" (grey italic).
Go to Settings → Appearance. Choose from 33 built-in accents or create a fully custom theme with your own accent, background, panel, and border colors. Right-click a custom theme to edit or delete it.
21 dark backgrounds (Default, Midnight, Ocean, Abyss, and more) and 10 light backgrounds (White, Paper, Snow, Cream, etc.). Light mode is fully supported across all UI components.
12 Monaco syntax themes including Nyx Dark (default), Dracula, Nord, One Dark, Monokai, Solarized Dark/Light, and more.
Choose from JetBrains Mono, Fira Code, Cascadia Code, Consolas, Inconsolata, Source Code Pro, or Ubuntu Mono. Applied to both the editor and monospace UI elements.
Three presets — compact, normal, spacious — that scale the spacing of every panel and row. Useful on small laptop screens or 4K monitors.
sharp for a flat, rectilinear editor look, normal for the default rounded corners, or round for softer pill-style edges. Affects every panel, button, and input simultaneously.
| Setting | Location | Description |
|---|---|---|
| Route Console to NyxUI | Controls | Hook print, warn, rconsole, and error output in Roblox and route it to the NyxUI console |
| Auto-blur Editor | Controls | Blur the code editor when the app loses focus |
| Auto-hide Keys | Controls | Automatically censor script content in selected tabs |
| Hide Client Names | Controls | Replace usernames with Client_N labels across the entire UI |
| Show Minimap | Editor | Toggle the Monaco editor minimap |
| Word Wrap | Editor | Soft-wrap long lines (also toggled with Alt+Z) |
| WebSocket Port | WebSocket | Port the server listens on (default: 33882) |
| Scripts Sidebar Side | Layout | Left or right placement of the scripts sidebar |
| Clients Panel Side | Layout | Left or right placement of the clients panel |
| Console Height | Layout | Drag the resize handle above the console — persists across sessions |
| Accent Color | Appearance | Choose a built-in accent or create a fully custom theme |
| Background | Appearance | Dark and light background presets |
| Code Theme | Appearance | Monaco editor syntax highlighting theme |
| Font | Appearance | Monospace font for the editor and UI elements |
Scripts are split into 32 KB chunks to avoid WebSocket frame limits:
| Message | Direction | Purpose |
|---|---|---|
| ping / pong | Client ↔ Server | Keep-alive heartbeat every 5 s |
| compile_err:... | Client → Server | Lua parse or runtime error from a script |
| funcs:[...] | Client → Server | Executor function list for autocomplete |