How to make a “Grow a Garden”-style game in Roblox Studio
Plant seeds, let them grow in real time — even while players are away — then harvest and sell. The growth system behind garden games, as a complete script.
Updated November 1, 20268 min read
Garden games are calm tycoons built on real time: a seed takes minutes or hours to grow, so players come back later. Store when something was planted instead of counting seconds, and growth keeps working while nobody is online.
The core loop
Every garden game comes down to one loop that players repeat. Build this first, in grey blocks:
- Buy seeds
- Plant them on your plot
- Wait (or come back later)
- Harvest, sell, buy better seeds
Systems you need
Plots
Soil parts that belong to one player, each with a ProximityPrompt.
Seeds
A table of seed types with grow time, sell value and color.
Real-time growth
Store PlantedAt = os.time() and compare with the current time — not a countdown.
Harvest and sell
A grown plant gives a fruit; a sell stand turns fruit into coins.
Saving plots
Save each plot's seed and PlantedAt so the garden grows between sessions.
Build order
- 1
One plot, one seed
The script below on a single soil part.
- 2
Seed shop
A stand that sells seeds for coins; store seed counts as attributes or values.
- 3
A plot per player
Claim a garden on join; only the owner's prompts work there.
- 4
Saving
Save plots with a data store, and restore plants on join.
- 5
Rare variants
Small chances of golden or giant fruit that sell for much more — the genre's long-term chase.
The key script: Plant, grow in real time and harvest
Where it goes: Workspace > Garden > Plot (Part) > PlotScript (Script).
- The plot is an anchored Part (the soil) with a
ProximityPromptinside and this Script. - Players have
leaderstats > Coins(IntValue).
local Players = game:GetService("Players")
local plot = script.Parent
local prompt = plot:WaitForChild("ProximityPrompt")
local SEED = { name = "Carrot", growSeconds = 60, value = 15, color = Color3.fromRGB(255, 140, 40) }
local plant -- the growing part
local function progress()
local plantedAt = plot:GetAttribute("PlantedAt")
if not plantedAt then return nil end
return math.clamp((os.time() - plantedAt) / SEED.growSeconds, 0, 1)
end
local function updatePlant()
local p = progress()
if not p then
prompt.ActionText = "Plant " .. SEED.name
return
end
if not plant then
plant = Instance.new("Part")
plant.Anchored = true
plant.CanCollide = false
plant.Material = Enum.Material.SmoothPlastic
plant.Parent = plot
end
local height = 0.5 + p * 3
plant.Size = Vector3.new(1 + p, height, 1 + p)
plant.CFrame = plot.CFrame * CFrame.new(0, plot.Size.Y / 2 + height / 2, 0)
plant.Color = p < 1 and Color3.fromRGB(90, 170, 70) or SEED.color
prompt.ActionText = p < 1 and ("Growing " .. math.floor(p * 100) .. "%") or "Harvest"
end
prompt.Triggered:Connect(function(player)
local p = progress()
if not p then
plot:SetAttribute("PlantedAt", os.time()) -- growth is based on time, not a timer
elseif p >= 1 then
player.leaderstats.Coins.Value += SEED.value
plot:SetAttribute("PlantedAt", nil)
plant:Destroy()
plant = nil
end
updatePlant()
end)
while true do
updatePlant()
task.wait(1)
endHow it works
- Because growth is
os.time() - PlantedAt, a plant saved with itsPlantedAtkeeps growing while the player is offline — restore the attribute on join and it's already further along. - To limit a plot to its owner, give it an
OwnerIdattribute and return early inTriggeredfor anyone else. - For many plots, move this logic into one script in ServerScriptService that loops over plots tagged
Plot.
How garden games make Robux
- Grow-speed boosts and extra plot space.
- Rare seed packs as developer products, with odds shown.
- Cosmetic garden decorations.
You receive 70% of what players spend on game passes and developer products; Roblox keeps 30%.
Common mistakes
Countdown timers
A task.wait(60) timer stops when the server shuts down. Timestamps survive servers and sessions.
Copying a hit game's look
Use your own plants, art and name. The genre is fine; copied assets and branding are not.
Nothing to do while waiting
Give players short tasks between harvests — decorating, trading, small quests — or they leave and don't come back.
FAQ
How do plants grow while players are offline in Roblox?
Store the time a seed was planted (os.time()) and save it. When the player returns, compare it with the current time to know how grown the plant is.
Can I make a game like Grow a Garden?
You can make a game in the same genre. Don't copy its name, art, characters or assets — make your own theme and plants.
Is a garden game good for beginners?
Yes. The core is one growth script and a shop, and it doesn't need combat or complex physics.