Lua is an extension programming language designed to support general procedural programming with data description facilities. It also offers good support for object-oriented programming, functional programming, and data-driven programming. Lua is intended to be used as a powerful, light-weight scripting language for any program that needs one. Lua is implemented as a library, written in clean C (that is, in the common subset of ANSI C and C++).

Being an extension language, Lua has no notion of a “main” program: it only works embedded in a host client, called the embedding program or simply the host. This host program can invoke functions to execute a piece of Lua code, can write and read Lua variables, and can register C functions to be called by Lua code. Through the use of C functions, Lua can be augmented to cope with a wide range of different domains, thus creating customized programming languages sharing a syntactical framework. The Lua distribution includes a sample host program called lua, which uses the Lua library to offer a complete, stand-alone Lua interpreter.

The primary web site for Lua is www.lua.org; the reference manual is available from that site. Roberto Ierusalimshy, the primary designer of Lua, has written the definitive book about Lua, Programming in Lua; an earlier but still useful version of the book is available at http://www.lua.org/pil/. Another book, Lua Programming Gems, by Luiz Henrique de Figueiredo, Waldemar Celes, and Roberto Ierusalimshy, provides a useful collection of articles on programming with Lua.

There are several other web sites of interest to those who program with Lua. Lua-users provides a wiki with community-maintained information and resources. LuaForge hosts projects written in Lua. The Kepler Project provides an open-source web development platform written in Lua. Metalua gives Lua a macro system similar to lisp. Lua has an active mailing list that is one of the focal points of the Lua community.