Please feel free to file any issues you have. Note this does not have LÖVE 2D definitions, but you can get some there.
A LÖVE 2D VSCode extension in the form of an LSP server, and a few files to add to your project to enable live coding, and live feedback.
Note: I also added a neovim plugin and a zed plugin, if you'd prefer them over vs code. They do not support the live number slider and live color palette features, but do support live coding and live feedback.
"Live coding" here means, when you change the code, you'll see the changes reflected instantly / as you type them. If there are errors, it'll use the last valid code.
"Live feedback" here means, you'll see every value of variables you created, updated live, next to any reference to it (as an inlay hint). Any variable prefixed with _ like _foo will not be tracked. You can disable this entirely with live_vars = false at the top of livelove.lua.
- Install the vs code extension. (You can build it yourself, or download the one I built here.) or install the neovim plugin (
cdinto the folder and runnpm run install) (similar for zed). - Add the
.luafiles other thanmain.luato your project (color.luais optional). - As soon as you open a file like
main.luaafter installing the extension, it will automatically start the LSP. Then, just run the project / main.lua, and you should see inlay hints in the editor. Edit your file and see the changes instantly (glsl shaders work too)!
There are a few additional features included. You can select a hex color string or a number, then click once on it. It'll pop up a slider / color palette (click to modify) you can use to edit the values using a good UX, live.
Screen.Recording.2025-04-07.at.9.56.20.PM.mov
I've included main.lua to provide an example of how to use it.
But, here's a template:
if not IMAIN then
livelove = require("livelove")
-- Add state that you want to persist across hot reload here (probably most everything)
-- You'll want something like this in every file, but choose a unique variable each time.
IMAIN = true
end
local function hotreload()
-- (optional) whatever you want here (fires any time there's a hot reload)
end
livelove.postswap = function(f)
hotreload()
end
function love.update(dt)
livelove.instantupdate()
-- whatever you want here
end
function love.draw()
-- whatever you want here
livelove.postdraw()
end