Junkie UI Source that isnt bloatware and doesnt cause lag
Key RequiredUniversal

Junkie UI Source that isnt bloatware and doesnt cause lag

Universal ScriptExploitKingsExploitKings 593 views 97 executesUpdated Mar 9, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•315 lines (12747 chars)
--[[
	WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
]]
-- ============================================
-- CONFIGURATION - Edit these values only
-- ============================================
local CONFIG = {
    SERVICE_NAME   = "YOUR_SERVICE_NAME",    -- Your Junkie service name
    IDENTIFIER     = "YOUR_IDENTIFIER",      -- Your Junkie identifier
    PROVIDER_NAME  = "YOUR_PROVIDER_NAME",   -- Your Junkie provider name
    KEY_FILENAME   = "YOUR_KEY_FILENAME.txt",-- Filename to save the key locally
    GUI_NAME       = "YOUR_GUI_NAME",        -- ScreenGui name (hidden from user)
    UI_TITLE       = "YOUR_TITLE_HERE",      -- Title shown on the key UI
    DISCORD_INVITE = "YOUR_DISCORD_INVITE",  -- Your Discord invite link
}
-- ============================================

local Junkie = loadstring(game:HttpGet("https://jnkie.com/sdk/library.lua"))()
Junkie.service = CONFIG.SERVICE_NAME
Junkie.identifier = CONFIG.IDENTIFIER
Junkie.provider = CONFIG.PROVIDER_NAME

local result = (function()
    getgenv().UI_CLOSED = false
    getgenv().SCRIPT_KEY = nil

    local function SaveKey(key)
        pcall(function() writefile(CONFIG.KEY_FILENAME, key) end)
    end

    local function LoadKey()
        if pcall(function() return isfile(CONFIG.KEY_FILENAME) and isfile end) and isfile(CONFIG.KEY_FILENAME) then
            local success, key = pcall(function() return readfile(CONFIG.KEY_FILENAME) end)
            if success then return key:gsub("%s+", "") end
        end
        return nil
    end

    local function DeleteKey()
        pcall(function() if isfile(CONFIG.KEY_FILENAME) then delfile(CONFIG.KEY_FILENAME) end end)
    end

    local function IsExpiredResponse(res)
        if not res then return false end
        local statusText = tostring(res.error or res.message or res.reason or res.status or ""):lower()
        if statusText:find("expired", 1, true) or statusText == "key_expired" then
            return true
        end
        local expiresAt = tonumber(res.expires_at or res.expiresAt or res.expires or res.expiry or res.expiry_at)
        if expiresAt and expiresAt > 0 and expiresAt <= os.time() then
            return true
        end
        local globalExpiresAt = tonumber(getgenv().JD_EXPIRES_AT)
        if globalExpiresAt and globalExpiresAt > 0 and globalExpiresAt <= os.time() then
            return true
        end
        return false
    end

    local function GetValidationMessage(res)
        if IsExpiredResponse(res) then return "Expired Key" end
        local raw = tostring((res and (res.error or res.message or res.reason or res.status)) or "")
        local lowered = raw:lower()
        if lowered:find("hwid", 1, true) then
            return "HWID Mismatch"
        elseif lowered:find("service", 1, true) then
            return "Wrong Service"
        end
        return "Invalid Key"
    end

    local function CheckKeyStrict(key)
        getgenv().JD_EXPIRES_AT = nil
        local ok, res = pcall(function()
            return Junkie.check_key(key)
        end)
        if not ok then return false, nil, "Check Failed" end
        if not res or not res.valid or IsExpiredResponse(res) then
            return false, res, GetValidationMessage(res)
        end
        return true, res, "Valid"
    end

    local SavedKey = LoadKey()
    if SavedKey then
        local valid = CheckKeyStrict(SavedKey)
        if valid then
            getgenv().SCRIPT_KEY = SavedKey
            getgenv().UI_CLOSED = true
            return getgenv().SCRIPT_KEY
        else
            DeleteKey()
        end
    end

    -- FIX 1: Robust parent resolution for mobile executors
    -- Many mobile executors silently fail when parenting to CoreGui.
    -- We probe with a dummy folder first; fall back to PlayerGui if needed.
    local function GetScreenParent()
        local ok, cg = pcall(function() return game:GetService("CoreGui") end)
        if ok and cg then
            local probe = Instance.new("Folder")
            local canUse = pcall(function() probe.Parent = cg end)
            probe:Destroy()
            if canUse then return cg end
        end
        local Players = game:GetService("Players")
        return Players.LocalPlayer:WaitForChild("PlayerGui", 10)
    end

    local TweenService       = game:GetService("TweenService")
    local UserInputService   = game:GetService("UserInputService")

    local ScreenGui = Instance.new("ScreenGui")
    ScreenGui.Name            = CONFIG.GUI_NAME
    ScreenGui.ZIndexBehavior  = Enum.ZIndexBehavior.Sibling
    ScreenGui.IgnoreGuiInset  = true
    ScreenGui.ResetOnSpawn    = false
    -- FIX 2: High DisplayOrder so the key UI renders above thumbsticks / chat on mobile
    ScreenGui.DisplayOrder    = 999
    ScreenGui.Parent          = GetScreenParent()

    local Frame = Instance.new("Frame")
    Frame.Size            = UDim2.new(0, 320, 0, 260)
    Frame.AnchorPoint     = Vector2.new(0.5, 0.5)
    Frame.Position        = UDim2.new(0.5, 0, 0.5, 0)
    Frame.BackgroundColor3 = Color3.fromRGB(22, 27, 34)
    Frame.BorderSizePixel = 0
    Frame.Parent          = ScreenGui
    Instance.new("UICorner", Frame).CornerRadius = UDim.new(0, 8)

    -- Auto-scale UI based on screen resolution (handles mobile aspect ratios)
    local Camera = workspace.CurrentCamera
    local UI_BASE_W, UI_BASE_H = 1920, 1080
    local UI_SCALE_BOOST = 1.15
    local uiScaleObj = Instance.new("UIScale")
    uiScaleObj.Parent = Frame
    local isCustomPosition = false

    local function updateUIScale()
        local vp = Camera.ViewportSize
        local rawScale = math.min(vp.X / UI_BASE_W, vp.Y / UI_BASE_H) * UI_SCALE_BOOST
        local ar = vp.X / vp.Y
        local target
        if ar < 1.0 then
            target = math.clamp(rawScale, 0.5, 0.8)
        elseif ar < 1.6 then
            target = math.clamp(rawScale, 0.65, 1.0)
        else
            target = math.clamp(rawScale, 0.8, 1.3)
        end
        target = math.floor(target * 10 + 0.5) / 10
        uiScaleObj.Scale = target
        if not isCustomPosition then
            Frame.Position = UDim2.new(0.5, 0, 0.5, 0)
        end
    end
    updateUIScale()
    if Camera then Camera:GetPropertyChangedSignal("ViewportSize"):Connect(updateUIScale) end

    local Title = Instance.new("TextLabel")
    Title.Size               = UDim2.new(1, 0, 0, 40)
    Title.BackgroundTransparency = 1
    Title.Text               = CONFIG.UI_TITLE
    Title.TextColor3         = Color3.fromRGB(230, 237, 243)
    Title.Font               = Enum.Font.GothamBold
    Title.TextSize           = 16
    Title.Parent             = Frame

    local TextBox = Instance.new("TextBox")
    TextBox.Size             = UDim2.new(0.9, 0, 0, 35)
    TextBox.Position         = UDim2.new(0.05, 0, 0.25, 0)
    TextBox.BackgroundColor3 = Color3.fromRGB(13, 17, 23)
    TextBox.TextColor3       = Color3.fromRGB(255, 255, 255)
    TextBox.PlaceholderText  = "Paste your license key here..."
    TextBox.Text             = ""
    TextBox.Font             = Enum.Font.Gotham
    TextBox.TextSize         = 13
    TextBox.ClearTextOnFocus = false
    TextBox.Parent           = Frame
    Instance.new("UICorner", TextBox).CornerRadius = UDim.new(0, 5)

    local GetLinkBtn = Instance.new("TextButton")
    GetLinkBtn.Size             = UDim2.new(0.42, 0, 0, 35)
    GetLinkBtn.Position         = UDim2.new(0.05, 0, 0.48, 0)
    GetLinkBtn.BackgroundColor3 = Color3.fromRGB(48, 54, 61)
    GetLinkBtn.TextColor3       = Color3.fromRGB(255, 255, 255)
    GetLinkBtn.Text             = "Copy Activation Link"
    GetLinkBtn.Font             = Enum.Font.GothamSemibold
    GetLinkBtn.TextSize         = 13
    GetLinkBtn.Parent           = Frame
    Instance.new("UICorner", GetLinkBtn).CornerRadius = UDim.new(0, 5)

    local VerifyBtn = Instance.new("TextButton")
    VerifyBtn.Size             = UDim2.new(0.42, 0, 0, 35)
    VerifyBtn.Position         = UDim2.new(0.53, 0, 0.48, 0)
    VerifyBtn.BackgroundColor3 = Color3.fromRGB(47, 183, 117)
    VerifyBtn.TextColor3       = Color3.fromRGB(255, 255, 255)
    VerifyBtn.Text             = "Verify Key"
    VerifyBtn.Font             = Enum.Font.GothamSemibold
    VerifyBtn.TextSize         = 13
    VerifyBtn.Parent           = Frame
    Instance.new("UICorner", VerifyBtn).CornerRadius = UDim.new(0, 5)

    local DiscordBtn = Instance.new("TextButton")
    DiscordBtn.Size             = UDim2.new(0.9, 0, 0, 35)
    DiscordBtn.Position         = UDim2.new(0.05, 0, 0.78, 0)
    DiscordBtn.BackgroundColor3 = Color3.fromRGB(114, 137, 218)
    DiscordBtn.TextColor3       = Color3.fromRGB(255, 255, 255)
    DiscordBtn.Text             = "Join Discord"
    DiscordBtn.Font             = Enum.Font.GothamSemibold
    DiscordBtn.TextSize         = 13
    DiscordBtn.Parent           = Frame
    Instance.new("UICorner", DiscordBtn).CornerRadius = UDim.new(0, 5)

    -- Guide text for activation link
    local GuideLabel = Instance.new("TextLabel")
    GuideLabel.Size                 = UDim2.new(0.9, 0, 0, 35)
    GuideLabel.Position             = UDim2.new(0.05, 0, 0.62, 0)
    GuideLabel.BackgroundTransparency = 1
    GuideLabel.Text                 = "Click 'Copy Activation Link', then paste in your browser to get your key."
    GuideLabel.TextColor3           = Color3.fromRGB(139, 148, 158)
    GuideLabel.Font                 = Enum.Font.GothamSemibold
    GuideLabel.TextSize             = 14
    GuideLabel.TextWrapped          = true
    GuideLabel.Parent               = Frame

    -- Dragging support (works for both mouse and touch)
    local dragging, dragInput, dragStart, startPos
    Frame.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1
        or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            isCustomPosition = true
            dragStart = input.Position
            startPos = Frame.Position
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    dragging = false
                end
            end)
        end
    end)
    Frame.InputChanged:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseMovement
        or input.UserInputType == Enum.UserInputType.Touch then
            dragInput = input
        end
    end)
    UserInputService.InputChanged:Connect(function(input)
        if input == dragInput and dragging then
            local delta = input.Position - dragStart
            local s = uiScaleObj.Scale
            Frame.Position = UDim2.new(
                startPos.X.Scale, startPos.X.Offset + delta.X / s,
                startPos.Y.Scale, startPos.Y.Offset + delta.Y / s
            )
        end
    end)

    -- FIX 3: Yield one render frame so Roblox actually draws the GUI on mobile
    -- before the spin-wait loop captures the thread.
    task.wait()

    GetLinkBtn.MouseButton1Click:Connect(function()
        local link = Junkie.get_key_link()
        if link and setclipboard then
            setclipboard(link)
            GetLinkBtn.Text = "Link Copied!"
            task.delay(2, function() GetLinkBtn.Text = "Copy Activation Link" end)
        end
    end)

    DiscordBtn.MouseButton1Click:Connect(function()
        if setclipboard then
            setclipboard(CONFIG.DISCORD_INVITE)
            DiscordBtn.Text = "Link Copied!"
            task.delay(2, function() DiscordBtn.Text = "Join Discord" end)
        end
    end)

    VerifyBtn.MouseButton1Click:Connect(function()
        local key = TextBox.Text:gsub("%s+", "")
        if key == "" then return end

        VerifyBtn.Text             = "Verifying..."
        VerifyBtn.BackgroundColor3 = Color3.fromRGB(58, 136, 225)

        local valid, _, message = CheckKeyStrict(key)
        if valid then
            VerifyBtn.BackgroundColor3 = Color3.fromRGB(37, 153, 97)
            VerifyBtn.Text             = "Success!"
            SaveKey(key)
            getgenv().SCRIPT_KEY = key
            task.wait(0.5)
            ScreenGui:Destroy()
            getgenv().UI_CLOSED = true
        else
            getgenv().SCRIPT_KEY = nil
            if message == "Expired Key" then DeleteKey() end
            VerifyBtn.BackgroundColor3 = Color3.fromRGB(248, 81, 73)
            VerifyBtn.Text             = message or "Invalid Key"
            task.delay(2, function()
                VerifyBtn.Text             = "Verify Key"
                VerifyBtn.BackgroundColor3 = Color3.fromRGB(47, 183, 117)
            end)
        end
    end)

    while not getgenv().UI_CLOSED do
        task.wait(0.1)
    end

    return getgenv().SCRIPT_KEY
end)()

Features & Information

all default junkie ui sources cause lag this wont

Community Comments (2)

low_cortisollow_cortisolMar 26, 2026

Plsss added expired check, key

Replying to @low_cortisol
ExploitKingsExploitKingsOct 3, 2026

@low_cortisol done gay

More Scripts for Universal Scripts