I have CharacterAutoLoad set to false and I have a menu gui but when the player joins the game there is no menu
If the UI is in the StarterGui, then the character must be loaded for the UI to be cloned into the player’s PlayerGui. But what you can do is clone the UI and put it in the player’s PlayerGui with a server-script when the player enters the game.
local Players = game:GetService("Players")
local ScreenGui = game.ServerStorage.ScreenGui -- set this variable to the location of your UI
Players.PlayerAdded:Connect(function(player)
ScreenGui:Clone().Parent = player.PlayerGui
end)