Keyboard for mobile!!
Key RequiredUniversal

Keyboard for mobile!!

Universal Scriptarketa1256arketa1256 80 views 5 executesUpdated Oct 7, 2026
Unrated
00
Lua Script•346 lines (13105 chars)
local CoreGui = game:GetService("CoreGui")
local Players = game:GetService("Players")
local VirtualInputManager = game:GetService("VirtualInputManager")
local UserInputService = game:GetService("UserInputService")
local StarterGui = game:GetService("StarterGui")
local Player = Players.LocalPlayer

pcall(function()
    StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat, true)
end)

if CoreGui:FindFirstChild("MobileKeyboard") then
    CoreGui.MobileKeyboard:Destroy()
end

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "MobileKeyboard"
ScreenGui.ResetOnSpawn = false
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ScreenGui.Parent = CoreGui

local function makeDraggable(guiObject)
    local dragging, dragInput, dragStart, startPos

    guiObject.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
            dragStart = input.Position
            startPos = guiObject.Position
            
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    dragging = false
                end
            end)
        end
    end)

    guiObject.InputChanged:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement then
            dragInput = input
        end
    end)

    UserInputService.InputChanged:Connect(function(input)
        if input == dragInput and dragging then
            local delta = input.Position - dragStart
            guiObject.Position = UDim2.new(
                startPos.X.Scale, 
                startPos.X.Offset + delta.X, 
                startPos.Y.Scale, 
                startPos.Y.Offset + delta.Y
            )
        end
    end)
end

local ToggleButton = Instance.new("TextButton")
ToggleButton.Name = "CenterToggleBtn"
ToggleButton.Size = UDim2.new(0, 50, 0, 50)
ToggleButton.Position = UDim2.new(0.5, -25, 0, 10)
ToggleButton.BackgroundColor3 = Color3.fromRGB(80, 150, 255)
ToggleButton.BorderSizePixel = 0
ToggleButton.Text = "⌨"
ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ToggleButton.TextSize = 22
ToggleButton.ZIndex = 100
ToggleButton.Active = true
ToggleButton.Parent = ScreenGui

local UICornerBtn = Instance.new("UICorner")
UICornerBtn.CornerRadius = UDim.new(0, 10)
UICornerBtn.Parent = ToggleButton

makeDraggable(ToggleButton)

local KeyboardFrame = Instance.new("Frame")
KeyboardFrame.Name = "FullKeyboardPanel"
KeyboardFrame.Size = UDim2.new(0, 680, 0, 210)
KeyboardFrame.Position = UDim2.new(0.5, -340, 0, 65)
KeyboardFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
KeyboardFrame.BorderSizePixel = 0
KeyboardFrame.Visible = false
KeyboardFrame.ZIndex = 99
KeyboardFrame.Active = true
KeyboardFrame.Parent = ScreenGui

local FrameCorner = Instance.new("UICorner")
FrameCorner.CornerRadius = UDim.new(0, 8)
FrameCorner.Parent = KeyboardFrame

makeDraggable(KeyboardFrame)

local function createKey(name, text, keyCode, sizeX, sizeY, posX, posY)
    local btn = Instance.new("TextButton")
    btn.Name = name
    btn.Size = UDim2.new(0, sizeX, 0, sizeY)
    btn.Position = UDim2.new(0, posX, 0, posY)
    btn.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
    btn.BorderSizePixel = 0
    btn.Text = text
    btn.TextColor3 = Color3.fromRGB(255, 255, 255)
    btn.TextSize = 11
    btn.ZIndex = 100
    btn.Active = true
    btn.Parent = KeyboardFrame
    
    local corner = Instance.new("UICorner")
    corner.CornerRadius = UDim.new(0, 4)
    corner.Parent = btn
    
    if keyCode then
        btn.MouseButton1Down:Connect(function()
            pcall(function()
                VirtualInputManager:SendKeyEvent(true, keyCode, false, game)
            end)
            btn.BackgroundColor3 = Color3.fromRGB(50, 200, 100)
        end)
        
        btn.MouseButton1Up:Connect(function()
            pcall(function()
                VirtualInputManager:SendKeyEvent(false, keyCode, false, game)
            end)
            btn.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
        end)
        
        btn.MouseLeave:Connect(function()
            pcall(function()
                VirtualInputManager:SendKeyEvent(false, keyCode, false, game)
            end)
            btn.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
        end)
    end
    return btn
end

createKey("Esc", "Esc", Enum.KeyCode.Escape, 40, 24, 10, 8)
createKey("F1", "F1", Enum.KeyCode.F1, 35, 24, 55, 8)
createKey("F2", "F2", Enum.KeyCode.F2, 35, 24, 95, 8)
createKey("F3", "F3", Enum.KeyCode.F3, 35, 24, 135, 8)
createKey("F4", "F4", Enum.KeyCode.F4, 35, 24, 175, 8)
createKey("F5", "F5", Enum.KeyCode.F5, 35, 24, 215, 8)
createKey("F6", "F6", Enum.KeyCode.F6, 35, 24, 255, 8)
createKey("F7", "F7", Enum.KeyCode.F7, 35, 24, 295, 8)
createKey("F8", "F8", Enum.KeyCode.F8, 35, 24, 335, 8)
createKey("F9", "F9", Enum.KeyCode.F9, 35, 24, 375, 8)
createKey("F10", "F10", Enum.KeyCode.F10, 35, 24, 415, 8)
createKey("F11", "F11", Enum.KeyCode.F11, 35, 24, 455, 8)
createKey("F12", "F12", Enum.KeyCode.F12, 35, 24, 495, 8)

createKey("Tilde", "`", Enum.KeyCode.Backquote, 38, 26, 10, 36)
createKey("1", "1", Enum.KeyCode.One, 38, 26, 51, 36)
createKey("2", "2", Enum.KeyCode.Two, 38, 26, 92, 36)
createKey("3", "3", Enum.KeyCode.Three, 38, 26, 133, 36)
createKey("4", "4", Enum.KeyCode.Four, 38, 26, 174, 36)
createKey("5", "5", Enum.KeyCode.Five, 38, 26, 215, 36)
createKey("6", "6", Enum.KeyCode.Six, 38, 26, 256, 36)
createKey("7", "7", Enum.KeyCode.Seven, 38, 26, 297, 36)
createKey("8", "8", Enum.KeyCode.Eight, 38, 26, 338, 36)
createKey("9", "9", Enum.KeyCode.Nine, 38, 26, 379, 36)
createKey("0", "0", Enum.KeyCode.Zero, 38, 26, 420, 36)
createKey("Dash", "-", Enum.KeyCode.Minus, 38, 26, 461, 36)
createKey("Equals", "=", Enum.KeyCode.Equals, 38, 26, 502, 36)

createKey("Tab", "Tab", Enum.KeyCode.Tab, 50, 26, 10, 64)
createKey("Q", "Q", Enum.KeyCode.Q, 38, 26, 63, 64)
createKey("W", "W", Enum.KeyCode.W, 38, 26, 104, 64)
createKey("E", "E", Enum.KeyCode.E, 38, 26, 145, 64)
createKey("R", "R", Enum.KeyCode.R, 38, 26, 186, 64)
createKey("T", "T", Enum.KeyCode.T, 38, 26, 227, 64)
createKey("Y", "Y", Enum.KeyCode.Y, 38, 26, 268, 64)
createKey("U", "U", Enum.KeyCode.U, 38, 26, 309, 64)
createKey("I", "I", Enum.KeyCode.I, 38, 26, 350, 64)
createKey("O", "O", Enum.KeyCode.O, 38, 26, 391, 64)
createKey("P", "P", Enum.KeyCode.P, 38, 26, 432, 64)
createKey("LBracket", "[", Enum.KeyCode.LeftBracket, 38, 26, 473, 64)
createKey("RBracket", "]", Enum.KeyCode.RightBracket, 38, 26, 514, 64)
createKey("Slash", "\\", Enum.KeyCode.BackSlash, 45, 26, 555, 64)

createKey("Caps", "Caps", Enum.KeyCode.CapsLock, 58, 26, 10, 92)
createKey("A", "A", Enum.KeyCode.A, 38, 26, 71, 92)
createKey("S", "S", Enum.KeyCode.S, 38, 26, 112, 92)
createKey("D", "D", Enum.KeyCode.D, 38, 26, 153, 92)
createKey("F", "F", Enum.KeyCode.F, 38, 26, 194, 92)
createKey("G", "G", Enum.KeyCode.G, 38, 26, 235, 92)
createKey("H", "H", Enum.KeyCode.H, 38, 26, 276, 92)
createKey("J", "J", Enum.KeyCode.J, 38, 26, 317, 92)
createKey("K", "K", Enum.KeyCode.K, 38, 26, 358, 92)
createKey("L", "L", Enum.KeyCode.L, 38, 26, 399, 92)
createKey("Semi", ";", Enum.KeyCode.Semicolon, 38, 26, 440, 92)
createKey("Quote", "'", Enum.KeyCode.Quote, 38, 26, 481, 92)
createKey("Enter", "Enter", Enum.KeyCode.Return, 75, 26, 522, 92)

createKey("LShift", "Shift", Enum.KeyCode.LeftShift, 70, 26, 10, 120)
createKey("Z", "Z", Enum.KeyCode.Z, 38, 26, 83, 120)
createKey("X", "X", Enum.KeyCode.X, 38, 26, 124, 120)
createKey("C", "C", Enum.KeyCode.C, 38, 26, 165, 120)
createKey("V", "V", Enum.KeyCode.V, 38, 26, 206, 120)
createKey("B", "B", Enum.KeyCode.B, 38, 26, 247, 120)
createKey("N", "N", Enum.KeyCode.N, 38, 26, 288, 120)
createKey("M", "M", Enum.KeyCode.M, 38, 26, 329, 120)
createKey("Comma", ",", Enum.KeyCode.Comma, 38, 26, 370, 120)
createKey("Dot", ".", Enum.KeyCode.Period, 38, 26, 411, 120)
createKey("Slash2", "/", Enum.KeyCode.Slash, 38, 26, 452, 120)
createKey("RShift", "RShift", Enum.KeyCode.RightShift, 70, 26, 493, 120)

createKey("LCtrl", "Ctrl", Enum.KeyCode.LeftControl, 55, 26, 10, 148)
createKey("LAlt", "Alt", Enum.KeyCode.LeftAlt, 50, 26, 68, 148)
createKey("Space", "Spacebar", Enum.KeyCode.Space, 220, 26, 121, 148)
createKey("RAlt", "Alt", Enum.KeyCode.RightAlt, 50, 26, 344, 148)
createKey("RCtrl", "Ctrl", Enum.KeyCode.RightControl, 55, 26, 397, 148)
createKey("Left", "◄", Enum.KeyCode.Left, 38, 26, 455, 148)
createKey("Down", "▼", Enum.KeyCode.Down, 38, 26, 496, 148)
createKey("Right", "►", Enum.KeyCode.Right, 38, 26, 537, 148)

local StickZone = Instance.new("TextButton")
StickZone.Name = "StickTouchZone"
StickZone.Size = UDim2.new(0, 120, 0, 120)
StickZone.Position = UDim2.new(0, 15, 1, -135)
StickZone.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
StickZone.BackgroundTransparency = 0
StickZone.BorderSizePixel = 0
StickZone.Text = ""
StickZone.Active = true
StickZone.ZIndex = 99
StickZone.Parent = ScreenGui

local StickZoneCorner = Instance.new("UICorner")
StickZoneCorner.CornerRadius = UDim.new(1, 0)
StickZoneCorner.Parent = StickZone

local StickKnob = Instance.new("Frame")
StickKnob.Name = "Knob"
StickKnob.Size = UDim2.new(0, 40, 0, 40)
StickKnob.Position = UDim2.new(0.5, -20, 0.5, -20)
StickKnob.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
StickKnob.BackgroundTransparency = 0.2
StickKnob.BorderSizePixel = 0
StickKnob.ZIndex = 101
StickKnob.Parent = StickZone

local StickKnobCorner = Instance.new("UICorner")
StickKnobCorner.CornerRadius = UDim.new(1, 0)
StickKnobCorner.Parent = StickKnob

local activeInput = nil
local knobCenter = Vector2.new(60, 60)
local maxDist = 35

local function resetMovement()
    activeInput = nil
    StickKnob.Position = UDim2.new(0.5, -20, 0.5, -20)
    pcall(function()
        VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.W, false, game)
        VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.S, false, game)
        VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.A, false, game)
        VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.D, false, game)
    end)
end

StickZone.InputBegan:Connect(function(input)
    if (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1) and not activeInput then
        activeInput = input
    end
end)

UserInputService.InputEnded:Connect(function(input)
    if input == activeInput then
        resetMovement()
    end
end)

UserInputService.InputChanged:Connect(function(input)
    if input == activeInput and (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement) then
        local absPos = StickZone.AbsolutePosition
        local touchPos = Vector2.new(input.Position.X, input.Position.Y)
        local relPos = touchPos - absPos - knobCenter
        
        if relPos.Magnitude > maxDist then
            relPos = relPos.Unit * maxDist
        end
        
        StickKnob.Position = UDim2.new(0.5, relPos.X - 20, 0.5, relPos.Y - 20)
        
        pcall(function()
            VirtualInputManager:SendKeyEvent(relPos.Y < -8, Enum.KeyCode.W, false, game)
            VirtualInputManager:SendKeyEvent(relPos.Y > 8, Enum.KeyCode.S, false, game)
            VirtualInputManager:SendKeyEvent(relPos.X < -8, Enum.KeyCode.A, false, game)
            VirtualInputManager:SendKeyEvent(relPos.X > 8, Enum.KeyCode.D, false, game)
        end)
    end
end)

local JumpButton = Instance.new("TextButton")
JumpButton.Name = "CustomJumpBtn"
JumpButton.Size = UDim2.new(0, 70, 0, 70)
JumpButton.Position = UDim2.new(1, -90, 1, -90)
JumpButton.BackgroundColor3 = Color3.fromRGB(255, 90, 90)
JumpButton.BackgroundTransparency = 0.2
JumpButton.BorderSizePixel = 0
JumpButton.Text = "JUMP"
JumpButton.TextColor3 = Color3.fromRGB(255, 255, 255)
JumpButton.TextSize = 16
JumpButton.ZIndex = 100
JumpButton.Active = true
JumpButton.Parent = ScreenGui

local JumpCorner = Instance.new("UICorner")
JumpCorner.CornerRadius = UDim.new(1, 0)
JumpCorner.Parent = JumpButton

local isHoldingJump = false

JumpButton.MouseButton1Down:Connect(function()
    isHoldingJump = true
end)

JumpButton.MouseButton1Up:Connect(function()
    isHoldingJump = false
end)

JumpButton.MouseLeave:Connect(function()
    isHoldingJump = false
end)

task.spawn(function()
    while true do
        if isHoldingJump then
            local char = Player.Character
            if char then
                local humanoid = char:FindFirstChildOfClass("Humanoid")
                if humanoid and humanoid:GetState() == Enum.HumanoidStateType.Running then
                    humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
                end
            end
        end
        task.wait(0.1)
    end
end)

local isOpen = false
ToggleButton.MouseButton1Click:Connect(function()
    isOpen = not isOpen
    KeyboardFrame.Visible = isOpen
    ToggleButton.BackgroundColor3 = isOpen and Color3.fromRGB(50, 200, 100) or Color3.fromRGB(80, 150, 255)
end)

Features & Information

This script works for mobile players: it has a full keyboard that is similar to a regular real keyboard, and you can walk, jump, etc.
#Keyboard#Keyboard mobile#Keyless#Keyboards

Community Comments (1)

ElitxElitxOct 12, 2026

Peak

More Scripts for Universal Scripts