5 reasons you should learn Lua

jwoertink profile image Jeremy Woertink Updated on ・3 min read

If you haven't heard of Lua, it's a really small programming language. Maybe you have heard of it, but never had a reason to learn it because your programming language of choice does everything you need it to. Well, here are a few reasons you should learn Lua anyway.


Have you heard/used nginx? You can use mini Lua scripts inside of nginx with the openresty setup. This would allow you to do things like dynamically assign SSL certs through Let's Encrypt to different domains.

auto_ssl:set("allow_domain", function(domain)
  return ngx.re.match(domain, "^(mysite.com|yoursite.com)$", "ijo")

Use Apahce instead of nginx? Lua still has you covered.


Another popular tool that is used in the web is Redis. If you use redis to store lists of timeline event IDs or something, you may need to do some crazy sorting on this data. Writing RPOPLPUSH statements in redis can get a little crazy, and sometimes the language you choose may not be as fast as you'd like. For example, if you're using ruby, there's a gem called Wolverine. You write a Lua script that does all the crazy sorting you need, and then pass that data back to your rails app. This gives you a massive performance boost.


If you need lots of performance for your web app, but you don't have the capacity to re-write in something different, then you may employ heavy cache in to your app. One way to do this is to throw Varnish in front of your app. Varnish will handle all the cache, and only proxy back to your app when the cache is expired.

Varnish uses these vcl scripts which can get a little confusing. With a little lua magic you can write some nice programmatic cacheing. Maybe cache different lengths based on the domain in a multi-tenant situation?


Are you big in to playing video games? Maybe you've heard of some of these?

  • Angry Birds
  • Civilization V
  • Far Cry
  • Garry's Mod
  • Heroes of Might and Magic V
  • L.A. Noire
  • Mafia II
  • Roblox
  • Saints Row 2
  • SimCity 4
  • Star Wars Battlefront
  • Stepmania
  • Warhammer
  • World of Warcraft

All of these games use Lua in some capacity, and there's MANY more. Most games or game engines will be written in C++ or C#, but using Lua on the front end for scripting allows for rapid development of these games. No need to re-compile each time. Compile your engine, and have it run the lua scripts. You can get started with Love2d or defold


Because Lua is fun to write! If you don't know it, it wouldn't hurt to learn a new language. If you already know how to program, picking up lua should be pretty quick. Read over this 15 min of lua, and you will have a decent understanding of the syntax. At that point it's just a matter of digging in!

Posted on by:

jwoertink profile

Jeremy Woertink


Software Dev in Las Vegas. CTO for Namechk.com. I work for another company too. I also teach programming for UNLV


markdown guide

Another reason - Nmap is written in Lua; customize your Nmap!


That's true. Look like a movie hacker with a little lua :D


Yeah, why not? :) Btw I was joking a little - it's great to customize your nmap, but Lua is also good general scripting language. Sadly, not much used in comparison with Python/Ruby.


Ha! Yeah, there's a few weird things in Lua, but once you learn that, then it opens your mind to the fact that not all languages are created equal. Now, if we were to not use a language because it had something weird, we'd all have dropped javascript by now :p lol


Minecraft with computercraft mod has computers and robots(turtle) which are programmed in Lua to do things like dig a strip mine or control machinery with redstone.


I have for the 3rd time looked at Lua but this time with an open mind. I'm interested in webdev. I see LuaRocks and some JavaScript or C like familiarity but also some quirks. I am very excited to try writing something, but I'm not sure what.


Making a game love2d.org/wiki/Getting_Started is fun way to start. Or just start by making a small console app and getting that to work. That will help you feel out the flow of lua.


Very nice idea! Segway: what is the dotnotation in this function declaration function love.load().

Lua has 2 different type of notations. Since it's not an object oriented language, you can think of . like a class method, and : like an instance method. So love.load() vs love:load(). Lua basically determines what self is based on how you call the functions (if that makes sense)..


I’ll admit that Lua was actually my first programming language.


Great post Jeremy,

For me as Brazilian is an honor see people write about Lua <3
I'd like to recommend exercism.io, I think that it can be useful to improve the learning.


It's been a little while since I commented about wanting to learn Lua. I lovit ha, see what I did... Anyway I'l start with what I dislike.

  1. ~= is not !=
  2. Braces are not a thing, I write in braced languages and I find this a little jarring.
  3. require is not node js require

What I love, Lua is tiny, fast and I can change it as I like. I'm currently hijacking V8 to launch the majority of my node js web app in Lua. That includes using the c binding directly from node with node require and a js proxy.

Because why not, it's fun.


Awesome! Yeah, I agree with the ~= thing. That throws me off all the time especially since my main languages (Ruby & Crystal) use =~ for regex matching lol. But I don't work in curly brace languages, so for me I love that it doesn't have those :D

Sounds like you found a great use for using Lua! Thanks for sharing.


I was introduced to Lua in ComputerCraft, a Minecraft mod. Most recently I've been diving into the Advent of Code challenges in it, although I'm falling behind. I find it a flexible language to use when solving fun problems.


I don't like Lua as a programming language. It is nice to use to extend a language. I like using LuaD to add runtime configuration and logic. The simplicity of the structures and something else I don't know haw to describe is really cool.


It's definitely not a primary language for me. Not one of those "do everything" tools, but it has it's place. Almost like that weird screw driver you use on faucets. Most people never need one, but the second you do, it's a nice thing to have.

  1. It takes very little time! There's not too much to Lua so you can pick it up quickly.

Recently I wrote a script to authenticate users against Redis with Lua on Nginx. The result was great in simplicity and performance. The code is available on my Github github.com/waldyrfelix/nginx_lua_auth


I want to learn it I'm learning ERB, And I just learned the basics of INK. I would like to learn Lau where can I start?


When you say ERB, do you mean in ruby? I'm not sure what INK is... but you can start here to learn Lua tylerneylon.com/a/learn-lua/


Yes, I started learning Rails and Middleman but then I hit a wall. I was like whats ERB? I got it but not I have to learn just how the layouts work? Like how to I make a picture go into the place I want it to go with <%yeild%> I have not found a place that explained how outside of the super basic layouts. And INK is cool inklestudios.com/ink/ thanks so much for your response.

Not really the place for these, but ERB is just HTML where you can use ruby code to extend, and dynamically generate HTML. If you don't know HTML that well, then you should start there. Placing an image is as easy as just using <img src="" > where you want it. The only difference being that your src attribute has to be dynamic based on the asset pipeline or however you serve up your images. Rails also gives you the image_tag helper method to make it more ruby-like.

That ink looks cool.

Lau looks like a really good language, I interested in starting to learn it it seems that you you can do alot with it


Lua is a great language, only thing I don't like about it is that arrays start at 1 instead of 0


I've started my first line of code in Lua to build game using Corona SDK :D


Also, the Luajit Lua implementation is very fast.
Kong is made with Lua.
Moonscript and Haxe transpile to Lua.



for video games is behind c ++ or c #, I think execelent that has a lot of weight, very strong in video games