RobloxBridge 1.0.1

dotnet add package RobloxBridge --version 1.0.1
                    
NuGet\Install-Package RobloxBridge -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="RobloxBridge" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="RobloxBridge" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="RobloxBridge" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add RobloxBridge --version 1.0.1
                    
#r "nuget: RobloxBridge, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package RobloxBridge@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=RobloxBridge&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=RobloxBridge&version=1.0.1
                    
Install as a Cake Tool

RobloxBridge

A .NET 8 memory SDK for Roblox externals on Windows x64.

RobloxBridge is a focused library for building Roblox external tools in C#. It handles process attach, offset loading, live pointer resolution, session monitoring across teleports and server hops, and the universal game APIs most externals need — players, characters, world-to-screen, camera control, and Win32 window projection.

Game-specific logic (custom ESP paths, mob lists, etc.) stays in your app. RobloxBridge provides the shared foundation.

Features

  • Process attach — finds RobloxPlayerBeta (and fallbacks), opens memory, downloads version-matched offsets
  • Live pointers — re-resolves VisualEngine, DataModel, Workspace, Players, and LocalPlayer instead of caching stale addresses
  • Session monitor — tracks menu vs in-game, detects server switches (JobId changes), refreshes caches on teleport
  • Auto-recovery — optionally re-attaches when Roblox restarts without manual intervention
  • Universal APIs — players, characters, view matrix, world-to-screen, camera subject, game context (PlaceId, GameId, JobId)
  • Win32 projection — maps 3D positions to screen coordinates relative to the Roblox client window
  • Thread-safe connectionBridgeConnection.TryWithClient for safe access from UI and background threads

Requirements

Requirement Details
OS Windows 10/11 x64
Runtime .NET 8.0+
Target RobloxPlayerBeta (desktop client)
Permissions Run your app as the same user as Roblox (standard external setup)

Installation

dotnet add package RobloxBridge

Or in your .csproj:

<PackageReference Include="RobloxBridge" Version="1.0.0" />

Quick start

using RobloxBridge.Session;
using RobloxBridge.Roblox.Characters;
using RobloxBridge.Roblox.Players;
using RobloxBridge.Roblox.Rendering;

await using var connection = new BridgeConnection(new BridgeConnectionOptions
{
    AutoRecoverProcess = true,
    Logger = myLogger // optional ILogger implementation
});

connection.SessionChanged += (_, e) =>
    Console.WriteLine($"Phase: {e.Phase}  JobId: {e.JobId ?? "(none)"}");

await connection.AttachAsync();

if (connection.TryWithClient(client =>
{
    foreach (var player in PlayerService.GetPlayers(client))
    {
        if (player.Humanoid is { } hum
            && CharacterReader.TryGetHealth(hum, out var hp, out var maxHp))
            Console.WriteLine($"{player.Name}  {hp:F0}/{maxHp:F0}");
        else
            Console.WriteLine(player.Name);
    }

    if (VisualEngineReader.TryGetViewData(client, out var view))
        Console.WriteLine($"Viewport: {view.Dimensions.X}×{view.Dimensions.Y}");
}, out _))
{
    // success
}

API reference

RobloxBridge.Core

Low-level attach and client access.

Type Description
ProcessAttach AttachAsync() — finds Roblox, loads offsets, returns BridgeAttachResult
BridgeClient Main handle: Memory, DataModel, Workspace, Players, LocalPlayer
BridgeClientOptions ProcessName, ProcessNames[], ValidateOffsets, Logger
BridgeContext Shared memory, offset manager, string caches
BridgeAttachResult Success, Client, FailureReason, Message

Direct attach (no session monitor):

using var client = BridgeClient.Attach();
var workspace = client.Workspace;

With session monitor (recommended):

await using var connection = new BridgeConnection();
await connection.AttachAsync();
connection.TryWithClient(c => { /* use c */ }, out _);

RobloxBridge.Session

High-level connection with monitoring and recovery.

Type Description
BridgeConnection Attach, detach, events, TryWithClient, IsMemoryReady
BridgeConnectionOptions AutoRecoverProcess, MonitorInterval (default 250ms), RecoveryRetryDelay
BridgeSessionPhase Detached, Attached, InMenu, InGame, Switching
BridgeDetachReason User, Shutdown, ProcessLost

Session phases

Phase Meaning
Detached Not connected to a Roblox process
Attached Process open, offsets loaded, not yet classified
InMenu Main menu (LuaApp DataModel)
InGame Active server session with a valid JobId
Switching Teleport or server hop in progress — pause overlays / reads

Subscribe to SessionChanged to react to teleports. Use IsMemoryReady before per-frame reads (true only when InGame and not mid-refresh).

Events

Event When
Attached Successfully connected to Roblox
Detaching / Detached Connection closing (user, shutdown, or process lost)
SessionChanged Phase or JobId changed
connection.SessionChanged += (_, e) =>
{
    switch (e.Phase)
    {
        case BridgeSessionPhase.Switching:
            overlay.Hide();
            break;
        case BridgeSessionPhase.InGame:
            overlay.Show();
            break;
    }
};

RobloxBridge.Roblox.Pointers

Live resolution — prefer these over cached addresses after teleports.

Method Returns
ResolveDataModel / ResolveDataModelAddress Current DataModel
ResolveVisualEngineAddress VisualEngine pointer
ResolveWorkspace Workspace service
ResolvePlayers Players service
ResolveLocalPlayer Local Player instance
ResolveCurrentCamera Workspace camera

RobloxBridge.Roblox.Game

Universal session context from the DataModel.

Method Description
TryRead Full GameContext (JobId, PlaceId, GameId, menu flag)
IsInGameSession Quick check + JobId out param
IsMainMenu LuaApp DataModel detection
TryGetPlaceId Current PlaceId
if (GameContextReader.TryRead(client, out var ctx))
{
  Console.WriteLine($"Place: {ctx.PlaceId}  Game: {ctx.GameId}  Menu: {ctx.IsMenu}");
}

RobloxBridge.Roblox.Players

Method Description
GetPlayers All players as PlayerSnapshot list (local player first)
TryGetLocalPlayer Local player snapshot
TryGetByName Lookup by username

PlayerSnapshot includes Name, UserId, DisplayName, IsLocal, HasCharacter, and live BridgeInstance refs for Player, Character, Humanoid.


RobloxBridge.Roblox.Characters

Method Description
TryResolve Head, HumanoidRootPart, tag part, ESP position
TryReadTagPosition World position above character for name tags
TryGetHealth Current / max health from Humanoid

RobloxBridge.Roblox.Rendering

Type Description
VisualEngineReader.TryGetViewData View matrix + viewport dimensions
WorldToScreen.Project 3D world point → 2D screen (with depth)
ViewData Matrix4x4 + Vector2 dimensions
if (VisualEngineReader.TryGetViewData(client, out var view)
    && WorldToScreen.Project(worldPos, view, out var screen, out var depth)
    && depth > 0)
{
    DrawAt(screen.X, screen.Y);
}

RobloxBridge.Roblox.Camera

Method Description
GetCurrent Workspace Camera instance
TrySetSubject Point camera at a Humanoid
TrySetSubjectToLocalPlayer Spectate-style local player camera

RobloxBridge.Platform.Windows

Method Description
FindRobloxWindow HWND for the Roblox client
TryGetClientBounds Client area size and screen origin
ProjectToScreen World position → absolute screen pixels

Use with VisualEngineReader for overlay windows aligned to the Roblox client.


RobloxBridge.RobloxBridgeInstance

Represents any Roblox instance in memory.

var part = workspace.FindFirstChild("SomePart");
if (part.TryGetProperty("Position", out Vector3 pos))
    Console.WriteLine(pos);

foreach (var child in workspace.GetChildren())
    Console.WriteLine($"{child.Name} ({child.ClassName})");

Common members: Name, ClassName, Parent, GetChildren(), FindFirstChild(), IsA(), typed properties (Position, Health, Character, etc.).


RobloxBridge.Utilities

Type Description
ILogger LogDebug, LogInformation, LogWarning, LogError
LogFormatter Safe formatting for named placeholders like {ProcessId}
NullLogger No-op default

Implement ILogger in your app to pipe library logs into your UI or file.


Example: ESP overlay loop

while (running)
{
    if (!connection.IsMemoryReady)
    {
        await Task.Delay(50);
        continue;
    }

  connection.TryWithClient(client =>
  {
    if (!VisualEngineReader.TryGetViewData(client, out var view))
      return;

    foreach (var player in PlayerService.GetPlayers(client))
    {
      if (player.IsLocal || player.Character is null)
        continue;

      if (!CharacterReader.TryResolve(player.Character, out var snap)
          || snap.TagPosition is not { } pos)
        continue;

      if (WindowProjection.ProjectToScreen(client, pos, out var screen))
        overlay.DrawLabel(screen, player.Name);
    }
  });

  await Task.Delay(16);
}

Building locally

dotnet build -c Release
dotnet pack -c Release -o ./packages

Project structure

RobloxBridge/
├── Core/              BridgeClient, BridgeContext, ProcessAttach
├── Session/           BridgeConnection, session monitor
├── Memory/            Process memory read/write
├── Offsets/           Offset download, validation, caching
├── Roblox/
│   ├── Pointers/      Live pointer resolution
│   ├── Game/          GameContext, menu detection
│   ├── Players/       Player roster
│   ├── Characters/    Character / ESP helpers
│   ├── Rendering/     View matrix, world-to-screen
│   └── Camera/        Camera control
├── Platform/Windows/  Win32 window projection
├── Models/            Vector2/3, Matrix4x4, CFrame
└── Utilities/         Logging, guards, formatting

License

MIT

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 140 6/10/2026
1.0.0 117 6/10/2026

1.0.1: NuGet readme fix (plain markdown, no HTML header).