Skip to content
All guides

Making games with LÖVE

Not an engine — a framework. You write Lua, it draws. Balatro was made with it.

LÖVE (also written Love2D) is not an engine. There's no editor, no scene view, no inspector — it's a framework: you write Lua, LÖVE draws it. That sounds like more work, and it is, but it's also why people who use it tend to love it. Nothing is hidden and nothing is in your way.

*Balatro* was made with it, which did a lot for its reputation.

Who it's for

People who'd rather write code than click through an interface, and people making 2D games with unusual mechanics that an engine's assumptions would fight. Also an excellent teaching tool — the entire API is small enough to hold in your head.

Not for you if you want a visual editor or you're not comfortable programming.

What it's good at

  • **Simplicity.** The whole framework is a handful of modules. You can read the manual in an afternoon.
  • **Lua.** Small, fast to learn, genuinely pleasant. Also worth knowing — it's embedded in a lot of other software.
  • **Instant iteration.** Save the file, restart, see the change. No build step.
  • **Tiny output.** Games ship as a few megabytes.
  • **Total control.** No engine conventions to work around.

Where it fights you

  • **You build everything.** No physics-editor, no scene system, no animation state machine unless you write or import one.
  • **No visual editor at all.** Level design means writing data files or building your own tool.
  • **Small community** compared with the big engines — fewer tutorials, fewer answers.
  • **No console support.** PC, Mac, Linux, Android, iOS. Consoles need a rewrite.
  • **Lua has no type checking**, which is fine at small scale and gets less fine as a project grows.

Your first hour

  • Download from **love2d.org**.
  • Make a folder with a file called `main.lua`.
  • Three functions is the whole API surface you need to start: `love.load()`, `love.update(dt)`, `love.draw()`.
  • Draw a rectangle. Move it with the arrow keys in `update`. That's a game loop.
  • Read the wiki — it's compact and complete, and unlike most documentation you can finish it.

Shipping it here

A LÖVE game is a zip of your project folder renamed to `.love`. That runs anywhere LÖVE is installed, but most players won't have it, so bundle:

  • **Windows:** concatenate your `.love` onto `love.exe` (the wiki has the one-line command) and ship that with the DLLs beside it, zipped.
  • **Mac:** drop your `.love` inside the `LÖVE.app` bundle's Resources folder and zip it.
  • Always include a plain `.love` alongside for people who already have LÖVE — it's a courtesy the community appreciates.

Where to learn more

Made something with it? Publish it here — rough and unfinished is welcome.