ScriptKeyless
Auto Buy, Auto Collect, Open Source, Keyless
[RELEASE] Kitten Farm! 🐱Desktop compatibleReal
Description
-Auto Buy Kittens {1,5,25,100} -Auto Collect Yarn -Auto Deposit Yarn -Auto Collect Money -Auto Upgrade Selling Yarn -Auto Upgrade Buy Tier -Auto Rebirth -Auto Merge
GAME[RELEASE] Kitten Farm! 🐱
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6ab5c7b331334ea70a7293e6"))()
end)
end)
--[[rscripts:analytics:end]]
--// @hidevin | Kitten Farm | PlaceId lock 77813828595591
if game.PlaceId ~= 77813828595591 then
warn("[hidevin] Wrong game. Expected Kitten Farm (77813828595591).")
return
end
local repo = "https://raw.githubusercontent.com/joustingmatch/ObsidianUltra/main/"
local Library = loadstring(game:HttpGet(repo .. "Library.lua"))()
local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))()
local SaveManager = loadstring(game:HttpGet(repo .. "addons/SaveManager.lua"))()
local Options = Library.Options
local Toggles = Library.Toggles
--// Design tokens (UI_STYLE.json)
--// background #0d0d0d, card #282828, border #3a3a3a +10px, heading #ffffff, label #a0a0a0
--// toggle pill green/blue, slider track #444444 fill #5865F2 white handle
pcall(function()
Library.Scheme.BackgroundColor = Color3.fromRGB(13, 13, 13)
Library.Scheme.MainColor = Color3.fromRGB(40, 40, 40)
Library.Scheme.OutlineColor = Color3.fromRGB(58, 58, 58)
Library.Scheme.FontColor = Color3.fromRGB(255, 255, 255)
Library.Scheme.AccentColor = Color3.fromRGB(88, 101, 242)
Library.Scheme.BlueColor = Color3.fromRGB(88, 101, 242)
if Library.UpdateColorsUsingRegistry then
Library:UpdateColorsUsingRegistry()
end
end)
Library.ShowCustomCursor = true
local Window = Library:CreateWindow({
Title = "@hidevin",
Footer = "Kitten Farm | Leave a like on Rscripts if it works. @hidevin",
NotifySide = "Right",
ShowCustomCursor = true,
DisableSearch = true,
EnableSidebarResize = true,
Minimizable = true,
})
Window:SetCornerRadius(10)
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalPlayer = Players.LocalPlayer
--// Tabs (GAME_FEATURES.md mapping; Rebirth shown — Auto Rebirth unlocked)
local Tabs = {
Main = Window:AddTab("Main", "info"),
Farming = Window:AddTab("Farming", "sprout"),
Inventory = Window:AddTab("Inventory", "backpack"),
Rebirth = Window:AddTab("Rebirth", "refresh-cw"),
["UI Settings"] = Window:AddTab("UI Settings", "settings"),
}
--// Helpers
local function getOwnPlot()
local plots = workspace:FindFirstChild("Plots")
if not plots then return nil end
for _, p in ipairs(plots:GetChildren()) do
if p:GetAttribute("Owner") == LocalPlayer.UserId then
return p
end
end
return nil
end
local function getHRP()
local c = LocalPlayer.Character
return c and c:FindFirstChild("HumanoidRootPart")
end
local function pressButton(name)
local plot = getOwnPlot()
if not plot then return false end
local buttons = plot:FindFirstChild("Buttons")
local btn = buttons and buttons:FindFirstChild(name)
local press = btn and btn:FindFirstChild("Press")
local hrp = getHRP()
if not press or not hrp then return false end
pcall(function()
firetouchinterest(hrp, press, 1)
task.wait(0.08)
firetouchinterest(hrp, press, 0)
end)
return true
end
local function autoLoop(toggleIdx, fn)
task.spawn(function()
while not Library.Unloaded do
task.wait(1)
local t = Toggles[toggleIdx]
if t and t.Value then
pcall(fn)
end
end
end)
end
--// Main Tab: info only, no mechanics
local MainInfo = Tabs.Main:AddLeftGroupbox("Info")
MainInfo:AddLabel("Kitten Farm", true)
MainInfo:AddLabel("Session: osDevin", true)
local SessionLabel = MainInfo:AddLabel("Uptime: 0s", true, "SessionUptime")
local StatusLabel = MainInfo:AddLabel("Status: loading...", true, "StatusInfo")
task.spawn(function()
local t0 = os.clock()
while not Library.Unloaded do
task.wait(1)
pcall(function()
local plot = getOwnPlot()
local money = LocalPlayer:FindFirstChild("Money")
local yarn = LocalPlayer:FindFirstChild("Yarn")
Options.SessionUptime:SetText(string.format("Uptime: %ds", math.floor(os.clock() - t0)))
Options.StatusInfo:SetText(string.format(
"Plot: %s | Cash: %s | Yarn: %s",
plot and plot.Name or "?",
money and tostring(money.Value) or "?",
yarn and tostring(yarn.Value) or "?"
))
end)
end
end)
--// Farming Tab > sub-tabs (mandate: >1 feature per tab)
local FarmCollect = Tabs.Farming:AddSubTab("Collecting", "hand")
local FarmSell = Tabs.Farming:AddSubTab("Selling", "coins")
local CollectBox = FarmCollect:AddLeftGroupbox("Resource Collecting")
CollectBox:AddToggle("AutoCollectYarn", { Text = "Auto Collect Yarn", Default = false, Tooltip = "Fires Yarn.Collect for nearby yarn (1s)." })
CollectBox:AddToggle("AutoCollectMoney", { Text = "Auto Collect Money", Default = false, Tooltip = "Touches CollectCash on own plot (1s)." })
local SellBox = FarmSell:AddLeftGroupbox("Selling")
SellBox:AddToggle("AutoDepositYarn", { Text = "Auto Deposit Yarn", Default = false, Tooltip = "Touches DepositYarn on own plot (1s)." })
Toggles.AutoCollectYarn:OnChanged(function() end)
Toggles.AutoCollectMoney:OnChanged(function() end)
Toggles.AutoDepositYarn:OnChanged(function() end)
autoLoop("AutoCollectYarn", function()
local folder = workspace:FindFirstChild("Yarn")
local collect = ReplicatedStorage:FindFirstChild("Remotes") and ReplicatedStorage.Remotes:FindFirstChild("Yarn") and ReplicatedStorage.Remotes.Yarn:FindFirstChild("Collect")
if not folder or not collect then return end
for _, m in ipairs(folder:GetChildren()) do
if not Toggles.AutoCollectYarn.Value then break end
pcall(function() collect:FireServer(m.Name) end)
end
end)
autoLoop("AutoCollectMoney", function() pressButton("CollectCash") end)
autoLoop("AutoDepositYarn", function() pressButton("DepositYarn") end)
--// Inventory Tab > sub-tabs (Purchasing vs Upgrades vs Misc per rule 4)
local InvBuy = Tabs.Inventory:AddSubTab("Purchasing", "shopping-cart")
local InvUpg = Tabs.Inventory:AddSubTab("Upgrades", "arrow-up")
local InvMisc = Tabs.Inventory:AddSubTab("Misc", "package")
local BuyBox = InvBuy:AddLeftGroupbox("Kitten Purchasing")
BuyBox:AddToggle("AutoBuy1", { Text = "Auto Buy 1 Kitten", Default = false })
BuyBox:AddToggle("AutoBuy5", { Text = "Auto Buy 5 Kittens", Default = false })
BuyBox:AddToggle("AutoBuy25", { Text = "Auto Buy 25 Kittens", Default = false })
BuyBox:AddToggle("AutoBuy100", { Text = "Auto Buy 100 Kittens", Default = false })
local UpgBox = InvUpg:AddLeftGroupbox("Stat Upgrades")
UpgBox:AddToggle("AutoUpgradeYarnRate", { Text = "Auto Upgrade Yarn Rate", Default = false, Tooltip = "Maps to 'Auto Upgrade Selling Yarn' (UpgradeYarnRate button, 1s)." })
UpgBox:AddToggle("AutoUpgradeBuyTier", { Text = "Auto Upgrade Buy Tier", Default = false, Tooltip = "Touches UpgradeBuyTier (1s)." })
autoLoop("AutoBuy1", function() pressButton("Buy1") end)
autoLoop("AutoBuy5", function() pressButton("Buy5") end)
autoLoop("AutoBuy25", function() pressButton("Buy25") end)
autoLoop("AutoBuy100", function() pressButton("Buy100") end)
autoLoop("AutoUpgradeYarnRate", function() pressButton("UpgradeYarnRate") end)
autoLoop("AutoUpgradeBuyTier", function() pressButton("UpgradeBuyTier") end)
local MiscBox = InvMisc:AddLeftGroupbox("Misc")
MiscBox:AddToggle("AutoMerge", { Text = "Auto Merge", Default = false, Tooltip = "Touches Merge button on own plot (1s)." })
autoLoop("AutoMerge", function() pressButton("Button") end)
--// Rebirth Tab (exists — Auto Rebirth unlocked; single feature so no sub-tab split)
local RebirthBox = Tabs.Rebirth:AddLeftGroupbox("Rebirth")
RebirthBox:AddToggle("AutoRebirth", { Text = "Auto Rebirth", Default = false, Tooltip = "Checks Prestige GetData (Price 1M), fires Prestige when affordable (1s)." })
autoLoop("AutoRebirth", function()
local prestige = ReplicatedStorage:FindFirstChild("Remotes") and ReplicatedStorage.Remotes:FindFirstChild("Prestige")
local money = LocalPlayer:FindFirstChild("Money")
if not prestige or not money then return end
local ok, data = pcall(function() return prestige:InvokeServer("GetData") end)
if not ok or type(data) ~= "table" then return end
if data.Maxed then return end
if typeof(data.Price) == "number" and money.Value >= data.Price then
pcall(function() prestige:InvokeServer("Prestige") end)
end
end)
--// UI Settings Tab: Anti-AFK (default ON) + Config + Theme + Menu bind
local MenuGroup = Tabs["UI Settings"]:AddLeftGroupbox("Menu")
MenuGroup:AddToggle("AntiAFK", { Text = "Anti-AFK", Default = true, Tooltip = "Blocks idle kick + rejoin triggers." })
MenuGroup:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", { Default = "RightShift", NoUI = true, Text = "Menu keybind" })
MenuGroup:AddButton("Unload", function() Library:Unload() end)
Toggles.AntiAFK:OnChanged(function(v)
if v then
pcall(function()
for _, c in ipairs(getconnections(LocalPlayer.Idled)) do c:Disable() end
end)
Library:Notify({ Title = "Anti-AFK", Description = "Enabled.", Time = 3, Type = "Success" })
end
end)
--// enforce default ON at startup
task.spawn(function()
task.wait(1)
pcall(function()
if Toggles.AntiAFK.Value then
for _, c in ipairs(getconnections(LocalPlayer.Idled)) do c:Disable() end
end
end)
LocalPlayer.Idled:Connect(function()
if Toggles.AntiAFK and Toggles.AntiAFK.Value then
pcall(function()
local vu = getgenv().VirtualUser or cloneref and cloneref(game:GetService("VirtualUser"))
if vu then vu:CaptureController(); vu:ClickButton2(Vector2.new()) end
end)
end
end)
end)
Library.ToggleKeybind = Options.MenuKeybind
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ "MenuKeybind" })
ThemeManager:SetFolder("hidevin")
SaveManager:SetFolder("hidevin/Kitten Farm")
SaveManager:BuildConfigSection(Tabs["UI Settings"])
ThemeManager:ApplyToTab(Tabs["UI Settings"])
SaveManager:LoadAutoloadConfig()
Library:OnUnload(function()
print("[hidevin] Kitten Farm unloaded.")
end)
Library:Notify({ Title = "@hidevin", Description = "Kitten Farm loaded.", Time = 4, Type = "Success" })
Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place