Lua on kevyt ja kooltaan pieniskriptikieli. Se on tarkoitettu lähinnä ohjelmien helppoon laajentamiseen, mutta sillä voi myös tehdä laajempiakin kokonaisuuksia. Kielen nimi tuleeportugalin sanastalua, joka tarkoittaa kuuta. Luan logona onkin kuu.
Lua on pääasiassaproseduraalinen kieli, mutta Lua tukee funktionaalisesta ohjelmoinnista ja olio-ohjelmoinnista tunnettuja ominaisuuksia. Luassa on muun muassa ensimmäisen kertaluokan funktiot täydellä leksikaalisella näkyvyydellä. Muita kielen ominaisuuksia ovat assosiatiiviset taulukot, vuoroittaisrutiinit sekä metataulut. Kielessä on mahdollista käyttäämoniperintää.[2]
Lua on julkaistuMIT-lisenssillä, joka sallii hyvin vapaan käytön jopa kaupallisiin tarkoituksiin. Luaa käytetäänkin paljon erilaisissa sovellusohjelmissa (esim.VLC,Lightroom) ja tietokonepelien sisäisenä skriptikielenä (esim.World of Warcraft).[3] Neovim-tekstieditori mahdollistaa lisäosien ja konfiguraation kirjoittamisenVimscriptin lisäksi Lualla.[4]
Lua on suunniteltu helposti yhdistettäväksi muihin ohjelmointikieliin. Alkuperäisessä toteutuksessa on rajapinta, jota voi käyttääC- jaC++-ohjelmointikielillä. Tämän lisäksi rajapintoja löytyy muun muassaPascalille,.NET:lle sekäAdalle.
Lua käännetään omalle virtuaalikoneelle. Ohjelmat voi kääntää virtuaalikoneen binääreiksi, mutta yleisempi käyttötapa on, että Lua-kääntäjä kääntää ohjelman muistiin ja suorittaa sen suoraan virtuaalikoneessa. Luan virtuaalikone on rekisteripohjainen erona pinopohjaisista virtuaalikoneista. Rekisteripohjainen virtuaalikone julkaistiin Lua-versiossa 5.0 vuonna 2003.[6]
Kielessä ei ole C-kielen kaltaistaswitch-lausetta, mutta vastaava toiminnallisuus voidaan toteuttaa käyttämällähakutaulua (lookup-taulua) apuna.[7]