Skip to content

bharath1097/awesome-lua

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 

Repository files navigation

Awesome Lua

A curated list of quality Lua packages and resources.

Inspired by the lists awesome, awesome-awesomeness, and awesome-nodejs.

Packages

Implementations and Interpreters

  • Lua - Lua's original ANSI C interpreter.
  • LuaJIT - High-performance Just-In-Time compiler for Lua.
  • LLVM-Lua - Compiles Lua to LLVM.
  • lua.vm.js - Lua VM on the web; a direct port of the C interpreter via LLVM, emscripten, and asm.js.
  • Moonshine - A Lua VM implemented in JavaScript. Slower than lua.vm.js, but with better docs, examples, and JS interfacing.

Note: From LuaJIT to Lua to lua.vm.js to Moonshine, a basic benchmark sees performance drop by roughly a factor of 6 with each hop.

Package Managers

  • LuaRocks - Allows you to install Lua modules as packages called "rocks", which contain version and dependency information. Much like npm or pip.
  • MoonRocks - Public Lua rock repository, website, and uploading tool. Default server used by LuaRocks.

Debugging and Profiling

  • ProFi - Simple profiler that works with LuaJIT and produces a report file.
  • luatrace - Toolset for tracing/analyzing/profiling script execution and generating detailed reports.
  • StackTracePlus - Drop-in upgrade to Lua's stack traces which adds local context and improves readability.
  • MobDebug - Powerful remote debugger with breakpoints and stack inspection. Used by ZeroBraneStudio.

IDEs and Plugins

  • Lua Development Tools - Eclipse plugin which provides code completion, debugging, and more. Built on Metalua.
  • Lua for IDEA - IntelliJ IDEA plugin which, among other things, provides code completion, smart highlighting, and experimental debugging.
  • ZeroBraneStudio - Lightweight, customizable, cross-platform Lua-dedicated IDE with code completion and analysis, written in Lua. Has broad debugging support for numerous Lua engines.

Utility Belts

  • Lua Fun - High-performance functional programming library designed for LuaJIT.
  • Moses - Functional programming utility belt, inspired by Underscore.js.
  • Penlight - Broad, heavyweight utility library, inspired by Python's standard libs. Provides the batteries that Lua doesn't.
  • lua-stdlib - Middle-weight standard library extension; adds some useful data structures, utility functions, and basic functional stuff.
  • Microlight - A little library of useful Lua functions; the 'extra light' version of Penlight.

Game Engines

  • LÖVE 2D - Desktop game development platform. Cross-platform, feature-complete, well-adopted.
  • Corona SDK - Development platform for iOS and Android. Used by numerous top games and apps, totaling over 150 million downloads.

Game Development

  • Jumper - Fast, lightweight, and easy-to-use pathfinding library for grid-based games.
  • tween.lua - Small library for tweening, with several easing functions.
  • lume - Utility belt library geared toward game development.
  • NoobHub - Network multiplayer for Corona, LÖVE, and more, following a simple pub-sub model.
  • Collision detection
    • bump.lua - Minimal rectangle-based collision detection which handles tunnelling and basic collision resolution.
    • HardonCollider - Detect collisions between arbitrarily positioned and rotated shapes of any type.

Logging

  • log-lua - Asynchronous logging library with pluggable writers for filesystem, network, ZeroMQ, and more.

Web Platforms

  • OpenResty - A fast and scalable web application platform created by extending Nginx with Lua. Today's de-facto Lua web platform, used heavily by Cloudflare, Taobao, Tencent, and others.
  • turbo - Event-driven, non-blocking, LuaJIT-based framework inspired by Tornado.

OpenResty

  • Core platform
    • ngx_lua - The core piece of OpenResty. Embeds Lua in Nginx and exposes, among other things, the cosocket API for non-blocking sockets (compatible with LuaSocket's API).
    • OpenResty GitHub Organization - Home of the repositories for ngx_lua, ngx_openresty, and many related modules.
  • Third-party modules
  • Frameworks & tools
    • Lapis - Full-stack framework for Lua and OpenResty. Like the Django or Rails of Lua. Supports Moonscript.
    • ledge - Lua module providing scriptable, RFC-compliant HTTP cache functionality.

Search this page for 'OpenResty' to find related packages under other categories (data stores in particular).

Command-line Utilities

  • ansicolors - Simple function for printing to the console in color.
  • cliargs - A simple command-line argument parsing module.
  • lua-term - Terminal operations and manipulations.

Concurrency and Multithreading

  • Coroutine-based multitasking:
    • Lumen - Simple concurrent task scheduling.
    • ConcurrentLua - Implements an Erlang-style message-passing concurrency model.
  • Multithreading:
    • llthreads - A simple wrapper for low-level pthreads & WIN32 threads.
    • lanes - Library implementing a message passing model with one OS thread per Lua thread.
    • luaproc - Message-passing model which allows multiple threads per OS thread and easily generalizes across a network. See also the paper where it originated.

For more on the differences (particularly between lanes and luaproc), see this comparison of options; somewhat dated, but covers how each one works and the significant differences.

Templating

  • lustache - Mustache template implementation.
  • etlua - Embedded Lua templates, ERB-style.
  • lua-resty-template - Lua-oriented template engine for OpenResty, somewhat Jinja-like.

Documentation

  • LDoc - Documentation generator which modernizes and extends LuaDoc.

Object-oriented Programming

  • 30log - Minimalist OOP library with basic classes, inheritance, and mixins in 30 lines.
  • middleclass - Simple but robust OOP library with inheritance, methods, metamethods, class variables and mixins.

Filesystem and OS

  • LuaFileSystem - Extends and complements Lua's built-in set of filesystem functions.
  • luaposix - Bindings for POSIX APIs, including curses.

Time and Date

  • LuaDate - Date and time module with parsing, formatting, addition/subtraction, localization, and ISO 8601 support.
  • cron.lua - Time-related functions for Lua, inspired by JavaScript's setTimeout and setInterval.

Image Manipulation

  • magick - Lua bindings to ImageMagick for LuaJIT using FFI.

Math and Scientific Computing

  • SciLua - Numerical/scientific computing framework built on LuaJIT, with an interface to R.
  • Torch7 - Scientific computing framework with wide support for machine learning algorithms, used by Facebook, Google, and more.
  • lhf's Lua Tools - Assorted libraries and tools, many math-related.

Parsing

  • JSON
    • lua-cjson - Blazing fast JSON encoding/decoding implemented in C and exposed to Lua.
    • luajson - JSON encoder/decoder implemented in Lua on top of LPeg.
    • dkjson - JSON encoder/decoder implemented in pure Lua.
  • XML
    • LuaExpat - SAX XML parser via binding to the Expat library.
    • SLAXML - Pure Lua SAX-like streaming XML parser.
  • LPeg - A pattern-matching library for Lua, based on Parsing Expression Grammars.
  • lunamark - Converts Markdown to other textual formats including HTML and LaTeX. Uses LPeg for fast parsing.

Humanize

  • i18n.lua - Internationalization library with locales, formatting, and pluralization.
  • inspect.lua - Human-readable representation of Lua tables.
  • serpent - Serializer and pretty printer.
  • Ser - Dead simple serializer with good performance.

Compression

  • lua-zlib - Simple streaming interface to zlib for gzip/gunzip.
  • lua-zip - Lua binding to libzip. Reads and writes zip files.

Network

  • LuaSocket - Networking extension which provides a socket API for TCP and UDP, and implements HTTP, FTP, and SMTP.

Data Stores

Testing

  • busted - BDD-style unit testing framework with great docs and Moonscript support.
  • telescope - Flexible and highly customizable testing library.
  • luassert - Assertion library extending Lua's built-in assertions.

Foreign Function Interfaces

  • LuaJIT FFI - LuaJIT's mechanism for calling external C functions and using C data structures from pure Lua code.
  • luaffi - Standalone FFI library, compatible with the LuaJIT FFI interface.

Analysis Tools and ASTs

  • luacov - Simple coverage analyzer, used by busted and telescope for checking test coverage.
  • luacheck - Simple static analyzer which detects accidental globals and undefined or shadowed locals.
  • Metalua - Pure Lua parser and compiler, used for generating ASTs. A number of other tools make use of the Metalua parser in this way.
  • LuaInspect - Lua's most powerful code analysis and linting tool, built on Metalua. Used by ZeroBraneStudio, among others.
  • LuaMinify - Minifier which also brings its own static analysis tools, lexer, and parser.

Experimental, etc

  • punchdrunk.js - Moonshine + LÖVE API reimplementation = run LÖVE games in the browser.
  • luvit - Node.js's underlying architecture (libUV) with Lua on top instead of JavaScript.

Scriptable by Lua

  • luakit - Fast, small, webkit based browser framework extensible by Lua.
  • mjolnir - OS X desktop environment manager, scripted with Lua. Under development, formerly known as hydra.
  • kpie - A scripting utility to juggle windows.
  • lumail - A console-based mail client, with extensive scripting capabilities.

Miscellaneous

  • MoonScript - Moonscript is a dynamic scripting language that compiles to Lua. It reduces verbosity and provides a rich set of features like comprehensions and classes. Its author calls it 'CoffeeScript for Lua'.
  • sitegen - A static site generator which uses MoonScript and supports HTML and Markdown, page grouping, and plugins.

Resources

References

  • Reference Manual - The official definition of the Lua language.
  • lua-users wiki - A large community-maintained collection of Lua information and resources, supplementing the official website.

Style Guides

Tutorials

  • Lua Crash Course - Short crash course readover, or reference for when you forget the basics.
  • Learn Lua in 15 Minutes - A well-commented example file which covers the basics.
  • Learning Lua from JS - An overview of the similarities and differences between Lua and JS; a great start for JavaScript folks looking to pick up Lua.
  • lua-users tutorial - In-depth collection of tutorials aimed at newcomers.
  • Lua Missions - A series of 'Missions' to work through which are designed to teach aspects of Lua along the way.
  • Creating an Image Server - Walks through setting up and using OpenResty to build a simple image processing server; a great starting point for playing with OpenResty.

Articles

  • Embedding Lua in C - An introductory walkthrough of embedding Lua in a C program. A bit dated, but still a great walkthrough.
  • Lua: Good, bad, and ugly parts - A thorough summary of the good, different, bad, and ugly aspects of Lua, including many subtle quirks, by the author of ZeroBraneStudio.

Talks & Slides

  • Roberto's Talks - History of talks given by Lua's chief architect, with slides for each.
  • Lua Workshop Talks - High-quality talks are given at each ~annual Lua Workshop, and a history of them is online, slides included.

Books

  • Programming in Lua - The authoritative intro to all aspects of Lua programming, written by Lua's chief architect. Three editions released; first edition available online.
  • Programming Gems - A collection of articles covering existing wisdom and practices on programming well in Lua, in a broad variety of use cases.
  • Lua Programming - A shorter overview of the language, up to date for Lua 5.2, and available online.

Contribute

Contributions welcome and wanted! Read the contribution guidelines first.

License

CC0

To the extent possible under law, Lewis Ellis has waived all copyright and related or neighboring rights to this work.

About

A curated list of quality Lua packages and resources.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published