If I’m not wrong, Roblox uses green threading, meaning that your code looks like it is using multiple threads but it’s actually just very intelligently swapping whenever you yield.
So yeah, Roblox is single-threaded.
By “spawning” a new thread, you can let code run on another thread without yielding the script which is creating the thread.