Roblox LSP - Full Intellisense for Roblox and Luau!

Yes! Thank you so much for this release. This will be extremely useful to my workflow. Great work!


Absolute life saver! Thank you so much for creating this. <3

1 Like

This is amazing! I’ve been having a bunch of fun playing around with it, and it has made me love using Rojo w/ VSC even more.

Some things I’ve noticed:

  • Although game.Players:GetPlayers() returns Objects, there’s no way to declare an array of Objects? For example local Parts: Objects<BasePart>.
  • Type annotations cannot be applied to table properties. Table.Part: BasePart ="Part") (possible conflict with declaring a method)

I think thats more a restriction of Luau and not this itself? I don’t have much experience with typed Lua so don’t quote me on that, though.

1 Like

From the luau website the syntax of a table type annotation is actually local Parts: {[number] : BasePart} = workspace.Model:GetChildren() which imo is really weird compared to simply Objects<BasePart> but given that Nightrains stated that there is basic luau support perhaps that could be the reason. However, I think that having support for type annotated tables would provide a bunch of functionality.


The only things you can do so far with Luau syntax is what i showed, but if you want to use it to have better intellisense, use EmmyLua annotations.


I would have loved to use this, and I’ve been trying to for the past ~3 hours, but unfortunately, I keep getting lag spikes and stuttering once every few seconds, as well as syntax highlighting sometimes being completely out of sync. I don’t know if the non-Luau version of this LSP is the same way, or if it is just this version. :sad:

I’m using VSCode, with Rojo and Selene, on a machine with a 9900KS and way too much RAM, so specs shouldn’t be the reason (I think). Nothing is maxing out in the Task Manager, either.

How long are your scripts?, and could you also test if it works the same with Lua by sumneko?

It shouldn’t work that bad on such a computer, so something is going wrong.

Do you think we could see nevermore support? And support for end completion?

There is some kind of end completion
And I was planning to add NevermoreEngine API, but it’s too long, unless I can parse it but I haven’t tried.

Just installed it in vscode, really enjoying it so far!


Only thing that I’ve noticed so far is that using HttpService:JSONEncode() doesn’t make the intellisense interpret the variable as a string, instead thinking it’s still a dictionary.

A few more issues:

1 Like

Did you do in some part of your script “payload: Dictionary” or something like that? doing that will change its type until you change it again in the same way, or using EmmyLua annotations.

1 Like

Yes, payload is defined as a dictionary earlier in the script.

local payload = {

module:PostWebhook("webhook", payload)
1 Like

Thanks for making this! I wanted to use Luau syntax with sumneko’s version and tried to make a simple fork, but I couldn’t figure out how to compile/install my changes - and even if I had, it wouldn’t have had nearly as many features!

1 Like

You are a savior. This is what brings me back to my Rojo + VSC workflow. Thank you so much for this extension.


I’ve been scripting for 1 year but why do people use Visual Studio?

1 Like

I use Visual Studio Code because it lets me use Git and it offers better Intellisense. VSC is a very mainstream tool in development, but Roblox does not offer native support for tools like those, so I use Rojo to sync my code across studio and VSC.

This is so helpful!

But, there’s one thing I’m confused on:

How do I get a “project file” or a “workspace”? I don’t know what either of those are, or how to make one. Does “workspace” have anything to do with the “Open Workspace” button in File window? It says I need a code workspace and I don’t know how to get one of those either.

I have been using the “Open Folder” button instead since I don’t know how to get a workspace file.

1 Like

A workspace would be the folder that you have open in VSCode.

I guess is the first time you try to code from an external code editor, for that, you have to use Rojo.

The project file is a json file that Rojo needs.

1 Like

I may be missing something completely obvious here, but does Instance tree autocompletion only work with descendants indexed under the DataModel, or is it also compatible with the script global (ex. script.ModuleHere or script.Parent.ModuleHere)? From what I’ve tested, all references under script were marked as undefined members.