Skip to main content

Player ESP with every component

This example demonstrates a complete player ESP setup with all available components.
player_esp_full.lua
local ESPLibrary = loadstring(game:HttpGet("https://raw.githubusercontent.com/mstudio45/MSESP/refs/heads/main/source.luau"))()
local Players = game:GetService("Players")

local function playerAdded(player)
    if player == Players.LocalPlayer then return end

    local ESPInstance, RandomColor = nil, BrickColor.random().Color;
    local function onCharAdded(character)
        character:WaitForChild("HumanoidRootPart", math.huge)

        ESPInstance = ESPLibrary:Add({
            Name = player.Name,

            Model = character,
            -- TextModel = character.Head, 
            -- ↑ This would change the Billboard's Adornee to the Player's Head

            Color = RandomColor,
            MaxDistance = 1000,

            TextSize = 17,

            ESPType = "Highlight",
            
            FillColor = RandomColor,
            OutlineColor = RandomColor,
            FillTransparency = 0.5,
            OutlineTransparency = 0,

            Tracer = { 
                Enabled = true,
                Color = RandomColor,
                From = "Mouse"
            },

            Arrow = {
                Enabled = true,
                Color = RandomColor
            },

            Box2D = {
                Enabled = true,
                Color = RandomColor,
                Thickness = 2,
                Filled = false
            },

            Box3D = {
                Enabled = true,
                Color = RandomColor,
                Thickness = 1.5
            }
        })
    end

    onCharAdded(player.Character or player.CharacterAdded:Wait())
    player.CharacterAdded:Connect(onCharAdded)
end

for _, player in Players:GetPlayers() do playerAdded(player) end
Players.PlayerAdded:Connect(playerAdded)

Simple Player ESP

A minimal player ESP setup with just highlights and tracers.
player_esp_simple.lua
local ESPLibrary = loadstring(game:HttpGet("https://raw.githubusercontent.com/mstudio45/MSESP/refs/heads/main/source.luau"))()
local Players = game:GetService("Players")

local function playerAdded(player)
    if player == Players.LocalPlayer then return end

    local function onCharAdded(character)
        character:WaitForChild("HumanoidRootPart", math.huge)

        ESPLibrary:Add({
            Name = player.Name,
            Model = character,
            Color = Color3.fromRGB(255, 100, 100),
            
            ESPType = "Highlight",
            FillColor = Color3.fromRGB(255, 100, 100),
            OutlineColor = Color3.fromRGB(255, 255, 255),
            
            Tracer = { 
                Enabled = true,
                From = "Bottom"
            }
        })
    end

    onCharAdded(player.Character or player.CharacterAdded:Wait())
    player.CharacterAdded:Connect(onCharAdded)
end

for _, player in Players:GetPlayers() do playerAdded(player) end
Players.PlayerAdded:Connect(playerAdded)

Part ESP with 2D Boxes

Track specific parts in the workspace with 2D bounding boxes.
part_esp.lua
local ESPLibrary = loadstring(game:HttpGet("https://raw.githubusercontent.com/mstudio45/MSESP/refs/heads/main/source.luau"))()

local PartName = "Baseplate" -- change this to your part name
local PartColor = Color3.fromRGB(100, 255, 100)

local function partAdded(part)
    if part.Name ~= PartName then return end

    ESPLibrary:Add({
        Name = part.Name,
        Model = part,

        Color = PartColor,
        MaxDistance = 1000,
        TextSize = 17,

        ESPType = "Highlight",
        FillColor = PartColor,
        OutlineColor = PartColor,

        Box2D = { 
            Enabled = true,
            Color = PartColor,
            Thickness = 2,
            Filled = true
        },

        Tracer = { 
            Enabled = true,
            Color = PartColor
        }
    })
end

for _, part in workspace:GetDescendants() do partAdded(part) end
workspace.DescendantAdded:Connect(partAdded)

3D Box ESP for Models

Use 3D bounding boxes to visualize model boundaries.
model_esp_3d.lua
local ESPLibrary = loadstring(game:HttpGet("https://raw.githubusercontent.com/mstudio45/MSESP/refs/heads/main/source.luau"))()

local function partAdded(model)
    if not model:IsA("Model") then return end

    ESPLibrary:Add({
        Name = model.Name,
        Model = model,
        
        Color = Color3.fromRGB(255, 255, 100),
        MaxDistance = 500,
        
        ESPType = "Highlight",
        FillTransparency = 0.8,
        OutlineTransparency = 0.3,
        
        Box3D = {
            Enabled = true,
            Color = Color3.fromRGB(255, 255, 100),
            Thickness = 2
        }
    })
end

for _, part in workspace:GetChildren() do partAdded(part) end
workspace.ChildAdded:Connect(partAdded)

Dynamic ESP (using Callbacks)

Use callbacks to dynamically update ESP properties.
dynamic_esp.lua
local ESPLibrary = loadstring(game:HttpGet("https://raw.githubusercontent.com/mstudio45/MSESP/refs/heads/main/source.luau"))()
local Players = game:GetService("Players")

local function playerAdded(player)
    if player == Players.LocalPlayer then return end

    local function onCharAdded(character)
        character:WaitForChild("HumanoidRootPart", math.huge)
        local humanoid = character:WaitForChild("Humanoid")

        local ESP = ESPLibrary:Add({
            Name = player.Name,
            Model = character,
            
            ESPType = "Highlight",
            
            -- Update color based on health
            BeforeUpdate = function(self)
                local healthPercent = humanoid.Health / humanoid.MaxHealth
                local color = Color3.fromRGB(
                    255 * (1 - healthPercent),
                    255 * healthPercent,
                    0
                )
                
                self.CurrentSettings.FillColor = color
                self.CurrentSettings.OutlineColor = color
                self.CurrentSettings.Color = color
            end,
            
            Box2D = {
                Enabled = true,
                Thickness = 2
            }
        })
    end

    onCharAdded(player.Character or player.CharacterAdded:Wait())
    player.CharacterAdded:Connect(onCharAdded)
end

for _, player in Players:GetPlayers() do playerAdded(player) end
Players.PlayerAdded:Connect(playerAdded)

Rainbow ESP

Enable rainbow mode for animated color effects.
rainbow_esp.lua
local ESPLibrary = loadstring(game:HttpGet("https://raw.githubusercontent.com/mstudio45/MSESP/refs/heads/main/source.luau"))()
local Players = game:GetService("Players")

-- Enable rainbow mode globally
ESPLibrary.GlobalConfig.Rainbow = true

local function playerAdded(player)
    if player == Players.LocalPlayer then return end

    local function onCharAdded(character)
        character:WaitForChild("HumanoidRootPart", math.huge)

        ESPLibrary:Add({
            Name = player.Name,
            Model = character,
            
            ESPType = "Highlight",
            
            Tracer = { 
                Enabled = true 
            },

            Arrow = { 
                Enabled = true 
            },
        })
    end

    onCharAdded(player.Character or player.CharacterAdded:Wait())
    player.CharacterAdded:Connect(onCharAdded)
end

for _, player in Players:GetPlayers() do playerAdded(player) end
Players.PlayerAdded:Connect(playerAdded)

Skeleton ESP

This example shows how to enable skeleton visualization for players.
skeleton_esp.lua
local ESPLibrary = loadstring(game:HttpGet("https://raw.githubusercontent.com/mstudio45/MSESP/refs/heads/main/source.luau"))()
local Players = game:GetService("Players")

local function playerAdded(player)
    if player == Players.LocalPlayer then return end

    local function onCharAdded(character)
        character:WaitForChild("HumanoidRootPart", math.huge)

        ESPLibrary:Add({
            Name = player.Name,
            Model = character,
            
            Skeleton = {
                Enabled = true,
                Color = Color3.fromRGB(255, 255, 255),
                Thickness = 1
            }
        })
    end

    onCharAdded(player.Character or player.CharacterAdded:Wait())
    player.CharacterAdded:Connect(onCharAdded)
end

for _, player in Players:GetPlayers() do playerAdded(player) end
Players.PlayerAdded:Connect(playerAdded)