2 min read

Lua: a small language

Lua is one of those programming languages that does not try to impress you by being huge. It does almost the opposite. It stays small, quiet, and practical — and that is exactly why it has lasted.

Created in 1993 at PUC-Rio, the Pontifical Catholic University of Rio de Janeiro, Lua was designed by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, and Waldemar Celes. Its origin was not some abstract academic exercise or a corporate attempt to dominate software development. Lua came from a real engineering need: the team at Tecgraf, a computer graphics technology group at PUC-Rio, needed a flexible scripting language that could be embedded into larger applications.

That detail matters. Lua was not born to replace C, C++, Java, or any other major language. It was born to live beside them. Its job was to make big systems more flexible, easier to configure, and easier to extend without forcing developers to rebuild everything from scratch. In that sense, Lua’s personality was clear from the beginning: small core, clean syntax, fast execution, and easy integration with other software.

The name “Lua” means “moon” in Portuguese, and it followed an earlier internal language called SOL, which means “sun.” The naming is charming, but the design is very serious. Lua became known for being lightweight, portable, and surprisingly powerful for its size. Its implementation is compact, written in ANSI C, and easy to embed in applications. That made it attractive in places where a larger runtime would be awkward or simply too heavy.

Its most famous territory is probably game development. Lua has been used as a scripting language in many games and engines because it lets developers separate the core engine from gameplay logic, configuration, artificial intelligence behaviors, user interfaces, and modding systems. In plain English: Lua lets a game be changed without tearing the whole machine apart. That is why it became popular in game studios and modding communities. Games like World of Warcraft helped make Lua visible to millions of players, even if most of them never realized they were touching a Brazilian programming language behind the scenes.

But Lua is not just a “game language.” That label is too narrow. Lua has been used in embedded systems, network software, scientific tools, media applications, and extensible programs such as Adobe Lightroom and Neovim. Its strength is not that it dominates one field. Its strength is that it fits into many fields without demanding much space.

One of Lua’s most distinctive features is its use of tables. In Lua, tables are the main data structure, and they can behave like arrays, dictionaries, objects, modules, and records depending on how they are used. This gives the language a strange kind of elegance: instead of giving you a huge toolbox full of specialized structures, Lua gives you a small set of flexible tools and expects you to use them well.

That minimalism is both Lua’s advantage and its limitation. If you want a language with enormous built-in libraries, industrial frameworks, and endless ready-made packages, Python or JavaScript will usually feel more comfortable. Lua is not trying to win that contest. Its ecosystem is smaller, and its simplicity can feel too bare if you expect the language to solve everything for you.

But that is also the point. Lua is important because it proves that a programming language does not need to be massive to be influential. It shows the value of restraint. It shows that design choices like portability, embeddability, and simplicity can matter more than hype. While many languages grow by adding more and more features, Lua has survived by knowing what not to become.

In a world where software often gets heavier every year, Lua remains almost stubbornly light. It is not the loudest language, and it is not the most fashionable. But it is one of the clearest examples of a language built around a precise purpose — and built well enough that people are still using it decades later.

Lua matters because it found power in being small.