§ How to · with Picoo

How to teleport players in Roblox

By Sametcan Tasgiran, Founder & Developer·Published ·Updated

Two completely different things are called teleporting in Roblox, and using the wrong one is why players end up stuck, split up, or missing their data.

Moving a character inside a place is one line and cannot fail. Sending them to another place is a network call that fails regularly and needs handling.

In-place teleport

PivotTo the character model — arenas, spawn pads, checkpoint returns. Instant, no failure case.

Cross-place teleport

TeleportService to another place in the same experience, with pcall and retry.

Party teleport

Move a group into the same server instead of scattering them.

Teleport data

Carry state across places safely — and why it must be re-validated on arrival.

Reserved servers

Private match servers for a queue or a party.

Failure UX

TeleportInitFailed handling so a failed jump says something instead of doing nothing.

Files Picoo ships for this prompt

1 files · 95 lines · ~20s · 1 credit

TeleportManager

Both paths: local PivotTo helpers and TeleportService with retry + failure reporting.

95 lines

Sample output: ServerScriptService.TeleportManager

-- WITHIN a place: move the whole character model. Setting HumanoidRootPart.CFrame
-- alone can leave limbs behind or fight the physics solver — PivotTo moves the
-- assembly as one.
local function moveTo(plr: Player, cf: CFrame)
	local char = plr.Character
	if not char then return end
	char:PivotTo(cf + Vector3.new(0, 3, 0))   -- lift slightly so you don't spawn in the floor
end

-- BETWEEN places: a network call that fails. Always pcall, always handle failure.
local TeleportService = game:GetService("TeleportService")

local function sendTo(placeId: number, players: { Player })
	local options = Instance.new("TeleportOptions")
	options:SetTeleportData({ fromLobby = true, score = 0 })

	local ok, err = pcall(function()
		TeleportService:TeleportAsync(placeId, players, options)
	end)
	if not ok then
		warn("[Teleport] failed: " .. tostring(err))
		-- tell the player; a silent failure looks like a broken button
	end
end

-- Arrival: teleport data is CLIENT-INFLUENCED in the sense that it survives a
-- place the player may have exploited. Treat it as a hint, never as authority
-- for currency or progress — read those from your DataStore.
local data = plr:GetJoinData().TeleportData

How to teleport players in Roblox

"Teleport" covers two unrelated operations in Roblox, and most teleport bugs come from reaching for the wrong one.

Inside a place, teleporting is just moving a model: character:PivotTo(cf). It cannot fail, it needs no error handling, and it is what checkpoints, arenas, spawn pads and admin commands should use. The one detail is to move the whole character rather than only the HumanoidRootPart, and to add a little height so nobody lands inside the floor.

Between places it is a network request to Roblox's matchmaking, and it fails routinely — the target place must belong to the same experience, rate limits apply, a player can disconnect mid-call, and Studio behaves differently from a live server. Wrap it in pcall, listen for TeleportInitFailed, and tell the player something when it fails. A teleport that silently does nothing is indistinguishable from a broken button, and players retry it until they leave.

Groups need TeleportPartyAsync (or a single call with the whole list). Teleporting players one by one hands each to the matchmaker separately, which is exactly how friends end up in different servers.

Teleport data deserves suspicion. It travels with the player from a place you may not fully control, so it is fine for context — which lobby, which difficulty — and wrong for anything that matters. Currency, inventory and progress come from your DataStore on arrival, every time. The convenience of passing a coin balance through is exactly the convenience an exploiter is looking for.

See more on the Luau generator, the game builder, or browse the full blog.

Frequently asked

How do I teleport a player to a position in the same place?+

character:PivotTo(CFrame) — it moves the whole assembly. Setting HumanoidRootPart.CFrame directly is the older habit and can leave the character fighting the physics solver or partially behind. Add a few studs of height so they do not arrive inside the floor.

Why does my TeleportService call do nothing?+

Teleports fail more often than people expect: the target place must be in the same experience, teleporting from Studio behaves differently than live, and rate limits apply. Wrap it in pcall and listen for TeleportInitFailed — most "nothing happened" reports are an error nobody caught.

Can I trust teleport data?+

Only as a hint. It travels with the player and the place they came from may be one you do not control. Never restore currency, inventory or progress from it — read those from your DataStore on arrival. Use it for harmless context like which lobby they came from.

How do I keep a group together?+

TeleportPartyAsync, or TeleportAsync with the whole player list. Teleporting individually sends each player to a separately chosen server.

What is a reserved server for?+

A private server instance nobody can join by chance — the standard way to run a match for a specific queue or party. Get an access code with ReserveServer, then teleport the group in with it.

Related Picoo prompts