├── .travis.yml ├── contributing.md └── readme.md /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | - 2.2 4 | before_script: 5 | - gem install awesome_bot 6 | script: 7 | - awesome_bot readme.md --allow-dupe --white-list https://fosdem.org/ https://moaifiddle.com 8 | notifications: 9 | email: false 10 | -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | # Purpose and Goal 2 | This list is meant to give a high-quality overview of the best parts of the Lua ecosystem, covering all aspects and uses (although with some tilt toward web technologies). Someone out of touch or unfamiliar with Lua (or even just with a particular aspect of Lua) should be able to look at this list and find: 3 | - Starting points to explore from and resources to consume. 4 | - The best tools and packages to work with. 5 | - The most up-to-date practices to follow. 6 | - An overview of the ways people are actually doing things and the packages people are actually using. 7 | 8 | Because of this goal, contributions from the community are welcomed and wanted! 9 | 10 | # Contribution Guidelines 11 | 12 | The following are **desirable properties** of a package/library on this list: 13 | - An active maintainer and recent development. 14 | - Documentation, examples, and tests. 15 | - Authoritative, of high quality, and not overly specific. 16 | - Is the best library or package of its kind, or contributes heavily to the overall picture of what's available and possible with Lua. 17 | - Hosted on GitHub (or at least somewhere reliable). 18 | - Can be installed with LuaRocks, or is a single pure Lua file, or is otherwise easy to set up. 19 | - Relatively production-ready, or headed that way; people might actually use it for real projects. 20 | 21 | What this list **doesn't need** or have much room for: 22 | - A laundry list of every JSON parser, or every database driver, or every web framework; just the really good ones will suffice. 23 | - Unfinished, unmaintained, or unadopted packages. 24 | - Packages that do a specific, niche sort of thing that few people will use. 25 | - Ancient packages that haven't been touched or used in years, or that are just past their time. 26 | - Packages which have a strictly better alternative available, or which don't add to the picture of what's out there. 27 | 28 | Of course, there are exceptions, because meeting all of the good properties and avoiding all the bad ones is hard. For example, the experimental section exists for packages which are particularly awesome, but not close to production-ready. 29 | 30 | In general, a useful, high-quality, up-to-date package probably has a place on this list, and the more useful and awesome it is, the more leeway it has. If your suggestion falls under a bad property, or doesn't meet very many of the good properties, you might reconsider. 31 | 32 | When making a **pull request**, please make sure to: 33 | - Search previous suggestions before making a new one, as yours may be a duplicate. 34 | - Make a separate pull request for each suggestion. 35 | - Include a link to the package and briefly describe why it should be included. 36 | - Add new categories or improve existing categorization when appropriate. 37 | - Have your description: 38 | - Be short and simple, descriptive but not pitchy or promotional. 39 | - Follow this format: `[package](link) - Description.` 40 | - Start with a capital and end with a full stop/period; no trailing whitespace. 41 | - Checked for spelling and grammar. 42 | - Not say `for Lua` unnecessarily; it's implied. 43 | 44 | Thank you for your suggestions! 45 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Awesome Lua [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome) 2 | 3 | > A curated list of quality Lua [packages](#packages) and [resources](#resources). 4 | 5 | Inspired by the lists [awesome](https://github.com/sindresorhus/awesome), [awesome-awesomeness](https://github.com/bayandin/awesome-awesomeness), and [awesome-nodejs](https://github.com/sindresorhus/awesome-nodejs). 6 | 7 | 8 | ## Packages 9 | - [Implementations, Interpreters, and Bindings](#implementations-interpreters-and-bindings) 10 | - [Package Managers](#package-managers) 11 | - [Build Tools and Standalone Makers](#build-tools-and-standalone-makers) 12 | - [Debugging and Profiling](#debugging-and-profiling) 13 | - [IDEs and Plugins](#ides-and-plugins) 14 | - [Utility Belts](#utility-belts) 15 | - [Game Engines](#game-engines) 16 | - [Game Development](#game-development) 17 | - [Logging](#logging) 18 | - [Web/Networking Platforms](#webnetworking-platforms) 19 | - [OpenResty](#openresty) 20 | - [Command-line Utilities](#command-line-utilities) 21 | - [Concurrency and Multithreading](#concurrency-and-multithreading) 22 | - [Templating](#templating) 23 | - [Documentation](#documentation) 24 | - [Object-oriented Programming](#object-oriented-programming) 25 | - [File system and OS](#file-system-and-os) 26 | - [Time and Date](#time-and-date) 27 | - [Image Manipulation](#image-manipulation) 28 | - [Digital Signal Processing](#digital-signal-processing) 29 | - [Hardware and Embedded Systems](###hardware-and-embedded-systems) 30 | - [Math and Scientific Computing](#math-and-scientific-computing) 31 | - [Parsing and Serialization](#parsing-and-serialization) 32 | - [Humanize](#humanize) 33 | - [Compression](#compression) 34 | - [Cryptography](#cryptography) 35 | - [Network](#network) 36 | - [Data Stores](#data-stores) 37 | - [Message Brokers](#message-brokers) 38 | - [Testing](#testing) 39 | - [Foreign Function Interfaces](#foreign-function-interfaces) 40 | - [Analysis Tools and ASTs](#analysis-tools-and-asts) 41 | - [Experimental, etc](#experimental-etc) 42 | - [Scriptable by Lua](#scriptable-by-lua) 43 | - [Miscellaneous](#miscellaneous) 44 | 45 | 46 | ## Resources 47 | - [Community](#community) 48 | - [References](#references) 49 | - [Style Guides](#style-guides) 50 | - [Tutorials](#tutorials) 51 | - [Articles](#articles) 52 | - [Talks & Slides](#talks--slides) 53 | - [Books](#books) 54 | - [Other Lists](#other-lists) 55 | 56 | 57 | ### Implementations, Interpreters, and Bindings 58 | - [Lua](http://www.lua.org/download.html) - Lua's original ANSI C interpreter. 59 | - [Lua Repo](https://github.com/lua/lua) - The official Lua repo, as seen by the Lua team, mirrored to GitHub. 60 | - [LuaJIT](http://luajit.org/luajit.html) - High-performance Just-In-Time compiler for Lua. 61 | - [LLVM-Lua](https://github.com/neopallium/llvm-lua) - Compiles Lua to LLVM. 62 | - [lua.vm.js](https://github.com/daurnimator/lua.vm.js) - Lua VM on the web; a direct port of the C interpreter via LLVM, emscripten, and asm.js. 63 | - [Moonshine](https://github.com/gamesys/moonshine) - A Lua VM implemented in JavaScript. Slower than lua.vm.js, but with better docs, examples, and JS interfacing. 64 | - [Fengari](https://fengari.io/) - The Lua VM rewritten in Javascript with seamless JS and DOM interoperability. 65 | - [MoonSharp](https://github.com/xanathar/moonsharp) - A Lua interpreter written entirely in C# for the .NET, Mono and Unity platforms. 66 | - [UniLua](https://github.com/xebecnan/UniLua) - A pure C# implementation of Lua 5.2, focused on compatibility with the Unity game engine. 67 | - [lupa](https://github.com/scoder/lupa) - Python bindings to LuaJIT2. 68 | - [golua](https://github.com/aarzilli/golua) - Golang bindings to the Lua C API. 69 | - [GopherLua](https://github.com/yuin/gopher-lua) - Lua 5.1 VM and compiler implemented in Go with Go APIs. 70 | - [LuaBridge](https://github.com/vinniefalco/LuaBridge) - A lightweight library for mapping data, functions, and classes back and forth between C++ and Lua. 71 | 72 | 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. 73 | 74 | 75 | ### Package Managers 76 | - [LuaRocks](https://luarocks.org/) - De-facto tool for installing Lua modules as packages called "rocks", plus public rock repository and website. Much like npm or pip. 77 | 78 | 79 | ### Build Tools and Standalone Makers 80 | - [Lake](https://github.com/stevedonovan/Lake) - A build engine written in Lua, similar to Ruby's rake. 81 | - [Luabuild](https://github.com/stevedonovan/luabuild) - Highly customizable Lua 5.2 build system. 82 | - [luastatic](https://github.com/ers35/luastatic) - Simple tool for turning Lua programs into standalone executables. 83 | - [omnia](https://github.com/tongson/omnia) - A batteries-included creator of standalone executables, built on top of luastatic. 84 | 85 | 86 | ### Debugging and Profiling 87 | - [ProFi](https://gist.github.com/perky/2838755) - Simple profiler that works with LuaJIT and produces a report file. 88 | - [luatrace](https://github.com/geoffleyland/luatrace) - Toolset for tracing/analyzing/profiling script execution and generating detailed reports. 89 | - [StackTracePlus](https://github.com/ignacio/StackTracePlus) - Drop-in upgrade to Lua's stack traces which adds local context and improves readability. 90 | - [MobDebug](https://github.com/pkulchenko/MobDebug) - Powerful remote debugger with breakpoints and stack inspection. Used by ZeroBraneStudio. 91 | - [lovebird](https://github.com/rxi/lovebird) - Browser-based debug console. Originally made for LÖVE, but works in any project with LuaSocket support. 92 | 93 | 94 | ### IDEs and Plugins 95 | - [Lua Development Tools](https://eclipse.org/ldt/) - Eclipse plugin which provides code completion, debugging, and more. Built on Metalua. 96 | - [Lua for IDEA](https://bitbucket.org/sylvanaar2/lua-for-idea/wiki/Home) - IntelliJ IDEA plugin which, among other things, provides code completion, smart highlighting, and experimental debugging. 97 | - [ZeroBraneStudio](https://studio.zerobrane.com/) - Lightweight, customizable, cross-platform Lua-dedicated IDE with code completion and analysis, written in Lua. Has broad debugging support for numerous Lua engines. 98 | - [BabeLua](https://archive.codeplex.com/?p=babelua) - Lua editor/debugger extension for VS2012-13 with highlighting, auto-completion, linting, and formatting capabilities. 99 | - [lua-mode](https://github.com/immerrr/lua-mode) - Emacs major mode for editing Lua. 100 | - [vscode-lua](https://github.com/trixnz/vscode-lua) - VSCode intellisense and linting. 101 | 102 | 103 | ### Utility Belts 104 | - [Lua Fun](https://github.com/luafun/luafun) - High-performance functional programming library designed for LuaJIT. 105 | - [Moses](https://github.com/Yonaba/Moses) - Functional programming utility belt, inspired by Underscore.js. 106 | - [Penlight](https://github.com/stevedonovan/Penlight) - Broad, heavyweight utility library, inspired by Python's standard libs. Provides the batteries that Lua doesn't. 107 | - [lua-stdlib](https://github.com/lua-stdlib/lua-stdlib) - Middle-weight standard library extension; adds some useful data structures, utility functions, and basic functional stuff. 108 | - [Microlight](https://github.com/stevedonovan/Microlight) - A little library of useful Lua functions; the 'extra light' version of Penlight. 109 | - [compat53](https://luarocks.org/modules/siffiejoe/compat53) - Compatibility module providing Lua-5.3-style APIs for Lua 5.2 and 5.1. 110 | - [RxLua](https://github.com/bjornbytes/RxLua) - Reactive Extensions, Observables, etc. 111 | 112 | 113 | ### Game Engines 114 | - [LÖVE 2D](http://love2d.org/) - Desktop game development platform. Cross-platform, feature-complete, well-adopted. 115 | - [Corona SDK](https://coronalabs.com/) - Development platform for iOS and Android. Proprietary, but used by numerous top games and apps, totaling over 150 million downloads. 116 | - [MOAI](http://getmoai.com/) - Open source, cross-platform, mobile game development framework. Minimalist C++ engine powered by Lua scripting. 117 | - [Drystal](https://drystal.github.io/) - Open source, games can run on Linux or on any platform with a recent web browser. 118 | - [Amulet](http://www.amulet.xyz/) - Open source, audio/visual toolkit suitable for small games and experimentation. It runs on Windows, Mac, Linux, HTML5 and iOS. 119 | - [LÖVR](https://lovr.org) - 3D framework for creating virtual reality experiences, inspired by LÖVE 2D. 120 | 121 | 122 | ### Game Development 123 | - Corona 124 | - [Coronium](https://develephant.github.io/coronium-core-docs/) - Simple cloud platform supporting analytics, data objects, user management, and more. 125 | - LÖVE 126 | - [awesome-love2d](https://github.com/love2d-community/awesome-love2d) - A list like this one, but focused on game dev and the LÖVE platform. 127 | - [lurker](https://github.com/rxi/lurker) - Shortens the iteration cycle by auto-swapping changed Lua files in a running LÖVE project. 128 | - [HUMP](http://vrld.github.io/hump/) - A set of lightweight helpers for LÖVE; a game-oriented utility belt. 129 | - MOAI 130 | - [moaifiddle](https://moaifiddle.com) - Edit and share short scripts for the MOAI game engine and run them in the browser using WebGL. 131 | - [Jumper](https://github.com/Yonaba/Jumper) - Fast, lightweight, and easy-to-use pathfinding library for grid-based games. 132 | - [lume](https://github.com/rxi/lume/) - Utility belt library geared toward game development. 133 | - [NoobHub](https://github.com/Overtorment/NoobHub) - Network multiplayer for Corona, LÖVE, and more, following a simple pub-sub model. 134 | - Collision detection 135 | - [bump.lua](https://github.com/kikito/bump.lua) - Minimal rectangle-based collision detection which handles tunnelling and basic collision resolution. 136 | - [HardonCollider](http://vrld.github.io/HardonCollider/) - Detect collisions between arbitrarily positioned and rotated shapes of any type. 137 | - Tweening 138 | - [flux](https://github.com/rxi/flux) - A fast, lightweight tweening library for Lua with easing functions and the ability to group tweens together. 139 | - [tween.lua](https://github.com/kikito/tween.lua) - Small library for tweening, with several easing functions. 140 | - Examples 141 | - [termtris](https://github.com/tylerneylon/termtris) - A tetris clone, written in literate style with "an emphasis on learn-from-ability". 142 | - [PacPac](https://github.com/tylerneylon/pacpac) - A Pac-man clone, made with LÖVE. 143 | - [Mari0](https://github.com/Stabyourself/mari0) - Fusion of Mario and Portal, made with LÖVE. See also its [wikipedia entry](https://en.wikipedia.org/wiki/Mari0). 144 | - [Journey to the Center of Hawkthorne](https://github.com/hawkthorne/hawkthorne-journey) - 2D platformer based on Community's [Digital Estate Planning](https://en.wikipedia.org/wiki/Digital_Estate_Planning) episode, made with LÖVE. 145 | 146 | 147 | ### Logging 148 | - [lua-log](https://github.com/moteus/lua-log) - Asynchronous logging library with pluggable writers for file system, network, ZeroMQ, and more. 149 | - [LuaLogging](https://github.com/Neopallium/lualogging) - Log4j-inspired logging library supporting various appenders. 150 | - [luasyslog](https://luarocks.org/modules/luarocks/luasyslog) - Log to syslog, based on LuaLogging. 151 | 152 | 153 | ### Web/Networking Platforms 154 | - [OpenResty](http://openresty.org/en/) - 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. 155 | - [turbo](https://turbo.readthedocs.io/en/latest/) - Event-driven, non-blocking, LuaJIT-based networking suite and framework, inspired by Tornado. 156 | - [Kepler Project](https://github.com/keplerproject) - A collection of web-oriented projects using a common set of standards and components. 157 | - [Pegasus.lua](https://github.com/EvandroLG/pegasus.lua) - Pegasus.lua is a http server to work with web applications written in Lua language. 158 | 159 | 160 | ### OpenResty 161 | - [awesome-resty](https://github.com/bungle/awesome-resty) - A list like this one, but focused on OpenResty. 162 | - Core platform 163 | - [ngx_lua](https://www.nginx.com/resources/wiki/modules/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). 164 | - [OpenResty GitHub Organization](https://github.com/openresty) - Home of the repositories for ngx_lua, ngx_openresty, and many related modules. 165 | - Third-party modules 166 | - [lua-resty-http](https://github.com/pintsized/lua-resty-http) - Lua HTTP client driver, built on the cosocket API. 167 | - Frameworks & tools 168 | - [Lapis](http://leafo.net/lapis/) - Full-stack framework for Lua and OpenResty. Like the Django or Rails of Lua. Supports Moonscript. 169 | - [ledge](https://github.com/pintsized/ledge) - Lua module providing scriptable, RFC-compliant HTTP cache functionality. 170 | - [Sailor](https://github.com/sailorproject/sailor) — An MVC web framework compatible with OpenResty, Apache and other webservers. 171 | - [Kong](https://github.com/Kong/kong) - Microservice & API Management Layer. 172 | 173 | Search this page for 'OpenResty' to find related packages under other categories (data stores in particular). 174 | 175 | 176 | ### Command-line Utilities 177 | - [ansicolors](https://github.com/kikito/ansicolors.lua) - Simple function for printing to the console in color. 178 | - [cliargs](https://github.com/amireh/lua_cliargs) - A simple command-line argument parsing module. 179 | - [lua-term](https://github.com/hoelzro/lua-term) - Terminal operations and manipulations. 180 | - [argparse](https://github.com/mpeterv/argparse) - A feature-rich command line parser inspired by argparse for Python. 181 | 182 | ### Concurrency and Multithreading 183 | - Coroutine-based multitasking: 184 | - [Lumen](https://github.com/xopxe/Lumen) - Simple concurrent task scheduling. 185 | - [ConcurrentLua](https://github.com/lefcha/concurrentlua) - Implements an Erlang-style message-passing concurrency model. 186 | - [cqueues](http://25thandclement.com/~william/projects/cqueues.html) - Library for managing sockets, signals, and threads based on an event loop with coroutines. 187 | - Multithreading: 188 | - [llthreads](https://github.com/Neopallium/lua-llthreads) - A simple wrapper for low-level pthreads & WIN32 threads. 189 | - [llthreads2](https://github.com/moteus/lua-llthreads2) - Newer rewrite of llthreads. 190 | - [lanes](https://github.com/LuaLanes/lanes) - Library implementing a message passing model with one OS thread per Lua thread. 191 | - [luaproc](https://github.com/askyrme/luaproc) - Message-passing model which allows multiple threads per OS thread and easily generalizes across a network. See also [the paper](http://www.inf.puc-rio.br/~roberto/docs/ry08-05.pdf) where it originated. 192 | 193 | For more on the differences (particularly between `lanes` and `luaproc`), see this [comparison](http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_For_Windows/lanes/comparison.html) of options; somewhat dated, but covers how each one works and the significant differences. 194 | 195 | 196 | ### Templating 197 | - [lustache](http://olivinelabs.com/lustache/) - Mustache template implementation. 198 | - [etlua](https://github.com/leafo/etlua) - Embedded Lua templates, ERB-style. 199 | - [lua-resty-template](https://github.com/bungle/lua-resty-template) - Lua-oriented template engine for OpenResty, somewhat Jinja-like. 200 | 201 | 202 | ### Documentation 203 | - [LDoc](http://stevedonovan.github.io/ldoc/) - Documentation generator which modernizes and extends [LuaDoc](http://keplerproject.github.io/luadoc/). 204 | - [Locco](http://rgieseke.github.io/locco/) - Lua port of [Docco](http://ashkenas.com/docco/), the "quick-and-dirty, hundred-line-long, literate-programming-style documentation generator". 205 | - [docroc](https://github.com/bjornbytes/docroc) - Parse comments into a Lua table to generate documentation. 206 | 207 | 208 | ### Object-oriented Programming 209 | - [30log](https://github.com/Yonaba/30log) - Minimalist OOP library with basic classes, inheritance, and mixins in 30 lines. 210 | - [middleclass](https://github.com/kikito/middleclass) - Simple but robust OOP library with inheritance, methods, metamethods, class variables and mixins. 211 | 212 | 213 | ### File system and OS 214 | - [LuaFileSystem](http://keplerproject.github.io/luafilesystem/) - Extends and complements Lua's built-in set of file system functions. 215 | - [luaposix](https://github.com/luaposix/luaposix) - Bindings for POSIX APIs, including curses. 216 | - [lunix](http://25thandclement.com/~william/projects/lunix.html) - Bindings to common Unix system APIs, striving for thread-safety. 217 | - [lua-path](https://github.com/moteus/lua-path) - File system path manipulation library. 218 | 219 | 220 | ### Time and Date 221 | - [LuaDate](https://github.com/Tieske/date) - Date and time module with parsing, formatting, addition/subtraction, localization, and ISO 8601 support. 222 | - [cron.lua](https://github.com/kikito/cron.lua) - Time-related functions for Lua, inspired by JavaScript's setTimeout and setInterval. 223 | - [luatx](https://github.com/daurnimator/luatz) - Time, date, and timezone library. 224 | 225 | 226 | ### Image Manipulation 227 | - [magick](https://github.com/leafo/magick) - Lua bindings to ImageMagick for LuaJIT using FFI. 228 | 229 | 230 | ### Digital Signal Processing 231 | - [LuaFFT](https://github.com/h4rm/luafft) - An easy to use Fast Fourier Transformation package in pure Lua. 232 | - [Worp](http://worp.zevv.nl/about.html) - Sound/music/DSP engine written for LuaJIT. 233 | 234 | 235 | ### Hardware and Embedded Systems 236 | - [eLua](http://www.eluaproject.net/) - Lua, extended with optimizations and specific features for efficient and portable embedded software development. 237 | 238 | 239 | ### Math and Scientific Computing 240 | - [SciLua](http://scilua.org/) - Numerical/scientific computing framework built on LuaJIT, with an interface to R. 241 | - [Torch7](http://torch.ch/) - Scientific computing framework with wide support for machine learning algorithms, used by Facebook, Google, and more. 242 | - [lhf's Lua Tools](http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/) - Assorted libraries and tools, many math- or data-related. 243 | 244 | 245 | ### Parsing and Serialization 246 | - JSON 247 | - [lua-cjson](https://github.com/mpx/lua-cjson/) - Blazing fast JSON encoding/decoding implemented in C and exposed to Lua. 248 | - [luajson](https://github.com/harningt/luajson) - JSON encoder/decoder implemented in Lua on top of LPeg. 249 | - [dkjson](http://dkolf.de/src/dkjson-lua.fsl/home) - JSON encoder/decoder implemented in pure Lua. 250 | - [json.lua](https://github.com/rxi/json.lua) - A fast and tiny JSON library in pure Lua. 251 | - XML 252 | - [LuaExpat](https://matthewwild.co.uk/projects/luaexpat/) - SAX XML parser via binding to the Expat library. 253 | - [SLAXML](https://github.com/Phrogz/SLAXML) - Pure Lua SAX-like streaming XML parser. 254 | - MessagePack 255 | - [lua-MessagePack](https://github.com/fperrad/lua-MessagePack) - Pure Lua implementation of MessagePack. 256 | - [lua-cmsgpack](https://github.com/antirez/lua-cmsgpack) - A MessagePack C implementation with Lua bindings, as used by Redis.= 257 | - LPeg 258 | - [LPeg](http://www.inf.puc-rio.br/~roberto/lpeg/) - A pattern-matching library for Lua, based on Parsing Expression Grammars. 259 | - [lpeg_patterns](https://github.com/daurnimator/lpeg_patterns) - A collection of LPeg patterns. 260 | - [LuLPeg](https://github.com/pygy/LuLPeg) - A pure Lua implementation of LPeg v0.12. 261 | - [LPegLJ](https://github.com/sacek/LPegLJ) - A pure LuaJIT implementation of LPeg v1.0. 262 | - [LPegLabel](https://github.com/sqmedeiros/lpeglabel) - An extension of LPeg adding support for labeled failures. 263 | - [lyaml](https://github.com/gvvaughan/lyaml) - YAML encoding/decoding via binding to LibYAML. 264 | - [lunamark](https://github.com/jgm/lunamark) - Converts Markdown to other textual formats including HTML and LaTeX. Uses LPeg for fast parsing. 265 | - [LXSH](https://github.com/xolox/lua-lxsh) - A collection of lexers and syntax highlighters written with LPeg. 266 | - [lua-pb](https://github.com/Neopallium/lua-pb) - Protocol Buffers implementation. 267 | 268 | 269 | ### Humanize 270 | - [i18n.lua](https://github.com/kikito/i18n.lua) - Internationalization library with locales, formatting, and pluralization. 271 | - [inspect.lua](https://github.com/kikito/inspect.lua) - Human-readable representation of Lua tables. 272 | - [serpent](https://github.com/pkulchenko/serpent) - Serializer and pretty printer. 273 | - [Ser](https://github.com/gvx/Ser) - Dead simple serializer with good performance. 274 | - [say](https://github.com/Olivine-Labs/say) - Simple string key-value store for i18n. 275 | 276 | 277 | ### Compression 278 | - [lua-zlib](https://github.com/brimworks/lua-zlib) - Simple streaming interface to zlib for gzip/gunzip. 279 | - [lua-zip](https://github.com/brimworks/lua-zip) - Lua binding to libzip. Reads and writes zip files. 280 | 281 | 282 | ### Cryptography 283 | - [LuaCrypto](https://github.com/mkottman/luacrypto) - Lua bindings to OpenSSL. 284 | - [lua-lockbox](https://github.com/somesocks/lua-lockbox) - A collection of cryptographic primitives written in pure Lua. 285 | - [luatweetnacl](https://github.com/philanc/luatweetnacl) - Bindings to tweetnacl, modern high-security cryptographic library. 286 | - [luaossl](https://github.com/wahern/luaossl) - "Most comprehensive OpenSSL module in the Lua universe" - used by lapis, kong, and lua-http. 287 | 288 | 289 | ### Network 290 | - [LuaSocket](https://github.com/diegonehab/luasocket) - Networking extension which provides a socket API for TCP and UDP, and implements HTTP, FTP, and SMTP. 291 | - [lua-websockets](https://github.com/lipp/lua-websockets) - WebSocket client and server modules. Webserver-agnostic, implemented in Lua on top of LuaSocket. 292 | - [lua-cURLv3](https://github.com/Lua-cURL/Lua-cURLv3) - Lua binding to libcurl. 293 | - [lua-http](https://github.com/daurnimator/lua-http) - Asynchronous HTTP and WebSocket library with client and server APIs, TLS, and HTTP/2; based on cqueues. 294 | 295 | 296 | ### Data Stores 297 | - [LuaSQL](http://keplerproject.github.io/luasql/) - Simple interface for connecting to ODBC, ADO, Oracle, MySQL, SQLite and PostgreSQL. 298 | - [pgmoon](https://github.com/leafo/pgmoon) - Lua PostgreSQL driver for OpenResty, LuaSocket, and cqueues. 299 | - [lua-resty-mysql](https://github.com/openresty/lua-resty-mysql) - Lua MySQL driver for OpenResty. 300 | - [lua-resty-cassandra](https://github.com/jbochi/lua-resty-cassandra) - Lua Cassandra client driver for OpenResty and others. 301 | - Redis 302 | - [redis-lua](https://github.com/nrk/redis-lua) - Pure Lua client library for Redis. 303 | - [lua-resty-redis](https://github.com/openresty/lua-resty-redis) - Lua Redis client driver for OpenResty. 304 | - [lredis](https://github.com/daurnimator/lredis) - Asynchronous Redis client with pipelining and Pub/Sub support; based on cqueues. 305 | 306 | 307 | ### Message Brokers 308 | - [lua-zmq](https://github.com/Neopallium/lua-zmq) - Lua bindings to ZeroMQ. 309 | - [lzmq](https://github.com/zeromq/lzmq) - A newer Lua binding to ZeroMQ. 310 | - [lua-resty-kafka](https://github.com/doujiang24/lua-resty-kafka) - Kafka client driver based on OpenResty cosockets. 311 | - [lua-resty-rabbitmqstomp](https://github.com/wingify/lua-resty-rabbitmqstomp) - RabbitMQ client library based on OpenResty cosockets. 312 | 313 | 314 | ### Testing 315 | - [busted](http://olivinelabs.com/busted/) - BDD-style unit testing framework with great docs and Moonscript support. 316 | - [telescope](https://github.com/norman/telescope) - Flexible and highly customizable testing library. 317 | - [luassert](https://github.com/Olivine-Labs/luassert) - Assertion library extending Lua's built-in assertions. 318 | - [lust](https://github.com/bjornbytes/lust) - Minimal test framework. 319 | 320 | 321 | ### Foreign Function Interfaces 322 | - [LuaJIT FFI](http://luajit.org/ext_ffi.html) - LuaJIT's mechanism for calling external C functions and using C data structures from pure Lua code. 323 | - [luaffi](https://github.com/jmckaskill/luaffi) - Standalone FFI library, compatible with the LuaJIT FFI interface. 324 | 325 | 326 | ### Analysis Tools and ASTs 327 | - [luadec51](https://github.com/sztupy/luadec51) - Lua Decompiler for Lua version 5.1. 328 | - [luacov](http://keplerproject.github.io/luacov/) - Simple coverage analyzer, used by busted and telescope for checking test coverage. 329 | - [luacov-coveralls](https://github.com/moteus/luacov-coveralls) - LuaCov reporter for coveralls.io. 330 | - [luacheck](https://github.com/mpeterv/luacheck) - Simple static analyzer which detects accidental globals and undefined or shadowed locals. 331 | - [Metalua](https://github.com/fab13n/metalua) - Pure Lua parser and compiler, used for generating ASTs. A number of other tools make use of the Metalua parser in this way. 332 | - [LuaInspect](https://github.com/davidm/lua-inspect) - Lua's most powerful code analysis and linting tool, built on Metalua. Used by ZeroBraneStudio, among others. 333 | - [LuaMinify](https://github.com/stravant/LuaMinify) - Minifier which also brings its own static analysis tools, lexer, and parser. 334 | - [Typed Lua](https://github.com/andremm/typedlua) - A typed superset of Lua that compiles to plain Lua. 335 | - [lua-parser](https://github.com/andremm/lua-parser) - A Lua 5.3 parser written using LPegLabel, with improved error messages. 336 | 337 | 338 | ### Experimental, etc 339 | - [punchdrunk.js](https://github.com/TannerRogalsky/punchdrunk) - Moonshine + LÖVE API reimplementation = run LÖVE games in the browser. 340 | - [luvit](https://github.com/luvit/luvit) - Node.js's underlying architecture (libUV) with Lua on top instead of JavaScript. 341 | - [graphql-lua](https://github.com/bjornbytes/graphql-lua) - Lua implementation of [GraphQL](http://graphql.org/). 342 | 343 | 344 | ### Scriptable by Lua 345 | - [luakit](https://luakit.github.io/luakit/) - Fast, small, webkit based browser framework extensible by Lua. 346 | - [Hammerspoon](http://www.hammerspoon.org) - A powerful, extensible OS X automation tool. A community-maintained fork of [Mjolnir](http://www.mjolnir.io/). 347 | - [kpie](https://github.com/skx/kpie) - A scripting utility to juggle windows. 348 | - [lumail](https://lumail.org/) - A console-based mail client, with extensive scripting capabilities. 349 | - [AwesomeWM](https://awesomewm.org/) - A highly configurable and extensible window manager for X, scripted and configured by Lua. 350 | - [Textadept](https://foicica.com/textadept/) - Extremely lightweight, customizable, cross-platform editor, written (mostly) in (and scripted by) Lua. 351 | - [KoReader](https://github.com/koreader/koreader) - An ebook reader application supports PDF, DJVU, EPUB, FB2 and much more, running on Kindle, Kobo, PocketBook and Android devices. 352 | 353 | 354 | ### Miscellaneous 355 | - [MoonScript](http://moonscript.org/) - 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'. 356 | - [sitegen](http://leafo.net/sitegen/) - A static site generator which uses MoonScript and supports HTML and Markdown, page grouping, and plugins. 357 | 358 | 359 | ## Resources 360 | 361 | ### Community 362 | - [lua-l](http://www.lua.org/lua-l.html) - The official Lua mailing list, and one of the focal points of the Lua community. 363 | - [Lua.Space](http://lua.space/) - The Lua community blog. 364 | - [Lua Users Foundation](https://github.com/lua-users-foundation) - An association of individuals with the mission of supporting and promoting Lua and its community and ecosystems. 365 | - [lua-users.org](http://lua-users.org/) - A site for and by users of Lua, featuring an IRC channel, a web archive of lua-l, and a large wiki. 366 | - Conferences/Meetups 367 | - [Lua Workshop](https://www.lua.org/community.html#workshop) - Annual 2-day meeting of the Lua community, in rotating locations. 368 | - [Lua Conf](http://luaconf.com/) - Annual 1-day Lua conference in Brazil. 369 | - [FOSDEM](https://fosdem.org/) - Annual 2-day gathering of F/OSS developers in Brussels which sometimes has a "Lua devroom". 370 | 371 | 372 | ### References 373 | - [Reference Manual](http://www.lua.org/manual/5.3/) - The official definition of the Lua language. 374 | - [lua-users wiki](http://lua-users.org/wiki/) - A large community-maintained collection of Lua information and resources, supplementing the official website. 375 | - [Lua Unofficial FAQ](http://www.luafaq.org/) - Answers all sorts of Lua-related questions, including many of the form 'How to ___?'. 376 | 377 | 378 | ### Glossaries 379 | - [Lua 5.3 Glossary](https://rawgit.com/dlaurie/lua-notes/master/glossary.html) - A glossary of some essential Lua terms. 380 | 381 | 382 | ### Style Guides 383 | - [Lua-users style guide](http://lua-users.org/wiki/LuaStyleGuide) - A general, high-level style guide; unopinionated, easily agreed on. 384 | - [Olivine style guide](https://github.com/Olivine-Labs/lua-style-guide) - A more opinionated and specific, and therefore more rigorous, guide. 385 | 386 | 387 | ### Tutorials 388 | - [Lua Crash Course](http://www.coppeliarobotics.com/helpFiles/en/luaCrashCourse.htm) - Short crash course readover, or reference for when you forget the basics. 389 | - [Learn Lua in 15 Minutes](http://tylerneylon.com/a/learn-lua/) - A well-commented example file which covers the basics. 390 | - [Learning Lua from JS](http://phrogz.net/lua/LearningLua_FromJS.html) - An overview of the similarities and differences between Lua and JS; a great start for JavaScript folks looking to pick up Lua. 391 | - [lua-users tutorial](http://lua-users.org/wiki/LuaTutorial) - In-depth collection of tutorials aimed at newcomers. 392 | - [Lua Missions](https://github.com/kikito/lua_missions) - A series of 'Missions' to work through which are designed to teach aspects of Lua along the way. 393 | - [Creating an Image Server](http://leafo.net/posts/creating_an_image_server.html) - Walks through setting up and using OpenResty to build a simple image processing server; a great starting point for playing with OpenResty. 394 | 395 | 396 | ### Articles 397 | - [Embedding Lua in C](https://debian-administration.org/article/264/Embedding_a_scripting_language_inside_your_C/C_code) - An introductory walkthrough of embedding Lua in a C program. A bit dated, but still a great walkthrough. 398 | - [Lua: Good, bad, and ugly parts](http://notebook.kulchenko.com/programming/lua-good-different-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. 399 | - [Lua states, libraries, coroutines and memory](http://www.thijsschreijer.nl/blog/?p=693) - Diagrams and explains some more advanced concepts of the Lua VM, particularly when interfacing with C. 400 | 401 | 402 | ### Talks & Slides 403 | - [Roberto's Talks](http://www.inf.puc-rio.br/~roberto/talks/index.html) - History of talks given by Lua's chief architect, with slides for each. 404 | - [Lua Workshop Talks](http://www.lua.org/wshop14.html#abstracts) - High-quality talks are given at each ~annual Lua Workshop, and a history of them is online, slides included. 405 | 406 | 407 | ### Books 408 | - [Programming in Lua](http://www.lua.org/pil/) - The authoritative intro to all aspects of Lua programming, written by Lua's chief architect. Three editions released; first edition available online. 409 | - [Lua Quick Reference](https://foicica.com/lua/) - A quick reference on how to program in and embed Lua 5.1 through 5.3, by the creator of Textadept. 410 | - [Programming Gems](http://www.lua.org/gems/) - A collection of articles covering existing wisdom and practices on programming well in Lua, in a broad variety of use cases. 411 | - [Lua Programming](https://en.wikibooks.org/wiki/Lua_Programming) - A shorter overview of the language, up to date for Lua 5.2, and available online. 412 | 413 | 414 | ### Other Lists 415 | - [awesome-resty](https://github.com/bungle/awesome-resty) - A list like this one, but focused on OpenResty. 416 | - [awesome-love2d](https://github.com/love2d-community/awesome-love2d) - A list like this one, but focused on game dev and the LÖVE platform. 417 | - [Where Lua is Used](https://sites.google.com/site/marbux/home/where-lua-is-used) - A comprehensive list of stand-alone programs written in or extensible using Lua. 418 | 419 | 420 | ## Contribute 421 | 422 | Contributions welcome and wanted! Read the [contribution guidelines](contributing.md) first. 423 | 424 | ## License 425 | 426 | [![CC0](https://licensebuttons.net/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/) 427 | 428 | To the extent possible under law, Lewis Ellis has waived all copyright and related or neighboring rights to this work. 429 | --------------------------------------------------------------------------------