Lua (por.: "Mjesec") višeplatformski je skriptni programski jezik visoke razine. Osmišljen je 1993. kao jezik za proširivanje softvera radi udovoljavanja sve zahtjevnijim standardima prilagodljivosti sučelja. Pružao je osnovne značajke proceduralnih jezika (poput COBOL-a, BASIC-a i C-a), kao i mehanizme proširivanja sintakse i funkcionalnosti jezika.
Kao što je slučaj s Javom, programi pisani na Lui prevode se u zasebnu datoteku koja sadrži računalni bytecode pogodan za izvođenje na jezičnom prevoditelju napisanom na ANSI C-u. Interpreter Luina koda uz potpunu podršku svih standardnih biblioteka ima svega 278 kilobajta,[1] što sam taj jezik čini prenosivim, brzim i neovisnim o uređaju na kojem se izvodi; sve što je potrebno za izvođenje tog koda jest običan C-ov jezični prevoditelj.
Lua podržava minimalan broj atomskih tipova podataka i podršku dinamičkog usklađivanja tipova podataka. Među podržanim su tipovima podataka boolean, cijeli broj (int), decimalni zapis s pomičnim zarezom (float), string i jedna inačica heterogenog asocijativnog polja (table) koja se može koristiti za implementaciju nizova (array), setova (set), popisa (list) i rječnika (dictionary).
Lua podržava manji skup naprednijih mogućnosti poput sakupljanja smeća (garbage collection), prvorazredne funkcije (prenošenje funkcija kao argumenata drugih funkcija), leksički obuhvaćenog vezanja anonimnih funkcija, repne rekurzije, paralelizacije potprograma, dinamičkog učitavanja modula, dinamičkog usklađivanja tipova podataka i sličnog.
Korištenjem prvoklasnih funkcija i heterogenih tablica koje mogu sadržavati funkcije moguće je stvoriti strukture podataka koje su u mnogočemu slične objektima.