Awesome
awesome-resty
A List of OpenResty / Nginx modules, Lua libraries, and related resources.
What is OpenResty
OpenResty is a full-fledged web platform by integrating the standard Nginx core, LuaJIT, many carefully written Lua libraries, lots of high quality 3rd-party Nginx modules, and most of their external dependencies. It is designed to help developers easily build scalable web applications, web services, and dynamic web gateways.
By taking advantage of various well-designed Nginx modules (most of which are developed by the OpenResty team themselves), OpenResty effectively turns the nginx server into a powerful web app server, in which the web developers can use the Lua programming language to script various existing nginx C modules and Lua modules and construct extremely high-performance web applications that are capable to handle 10K ~ 1000K+ connections in a single box.
OpenResty aims to run your server-side web app completely in the Nginx server, leveraging Nginx's event model to do non-blocking I/O not only with the HTTP clients, but also with remote backends like MySQL, PostgreSQL, Memcached, and Redis.
Real-world applications of OpenResty range from dynamic web portals and web gateways, web application firewalls, web service platforms for mobile apps/advertising/distributed storage/data analytics, to full-fledged dynamic web applications and web sites. The hardware used to run OpenResty also ranges from very big metals to embedded devices with very limited resources. It is not uncommon for our production users to serve billions of requests daily for millions of active users with just a handful of machines.
OpenResty is not an Nginx fork. It is just a software bundle. Most of the patches applied to the Nginx core in OpenResty have already been submitted to the official Nginx team and most of the patches submitted have also been accepted. We are trying hard not to fork Nginx and always to use the latest best Nginx core from the official Nginx team.
Official Channels
- Web Site: http://openresty.org/
- Mailing List: https://groups.google.com/forum/#!forum/openresty-en (Chinese List)
- Github Organization: https://github.com/openresty
- Lead Developer: @agentzh
- OpenResty Package Manager (
opm
): package repository, opm sources
How to Contribute on this List?
There are at least three different ways to contribute:
- Create a New Issue where you describe the needed additions, deletions or changes.
- Fork this repository and make the changes, and create a pull request.
- Post a reply in the awesome-resty thread in openresty-en mailing list.
Contents
- Modules
- Libraries
- Core Libraries
- Web Frameworks
- Web Development Essentials
- Routing Libraries
- Traffic Management
- Request Argments Parsers
- Middleware and API Tools
- Templating
- Validation
- Authentication and Authorization
- Cryptography
- Networking
- Databases and Storages
- Testing and Profiling
- Message Queuing and Task Management
- Bar Codes and QR Codes
- Utilities
- Date and Time
- Compression
- Text Formats
- Binary Formats
- Document Formats
- Image Formats
- Localization
- Caching
- Metrics and Statistics
- Logging
- Functional Programming
- Web APIs
- Security
- Other Sources for Libraries
- Books and Tutorials
- Videos
- Conferences, Workshops and Events
- Demo Applications
- See Also
- License
Modules
Core Modules
Core modules come bundled in OpenResty package.
- ngx_openresty — Turning Nginx into a full-fledged Web App Server - Sources for OpenResty Bundle Generation
- lua-nginx-module — Embed the power of Lua into Nginx
- stream-lua-nginx-module — Embed the power of Lua into Nginx stream/TCP Servers
- echo-nginx-module — An Nginx module for bringing the power of "echo", "sleep", "time" and more to Nginx's config file
- xss-nginx-module — Native support for cross-site scripting (XSS) in an nginx
- set-misc-nginx-module — Various set_xxx directives added to nginx's rewrite module (md5/sha1, sql/json quoting, and many more)
- encrypted-session-nginx-module — Encrypt and decrypt Nginx variable values
- srcache-nginx-module — Transparent subrequest-based caching layout for arbitrary nginx locations
- lua-upstream-nginx-module — Nginx C module to expose Lua API to ngx_lua for Nginx upstreams
- headers-more-nginx-module — Set and clear input and output headers...more than "add"!
- array-var-nginx-module — Add support for array variables to nginx config files
- memc-nginx-module — An extended version of the standard memcached module that supports set, add, delete, and many more memcached commands
- redis2-nginx-module — Nginx upstream module for the Redis 2.0 protocol
- rds-json-nginx-module — An nginx output filter that formats Resty DBD Streams generated by ngx_drizzle and others to JSON
- rds-csv-nginx-module — Nginx output filter module to convert Resty-DBD-Streams (RDS) to Comma-Separated Values (CSV)
- drizzle-nginx-module — An Nginx upstream module that talks to mysql and drizzle by libdrizzle
- ngx_postgres — Upstream module that allows Nginx to communicate directly with PostgreSQL database
- form-input-nginx-module — This is a nginx module that reads HTTP POST and PUT request body encoded in "application/x-www-form-urlencoded", and parse the arguments in request body into nginx variables.
- ngx_coolkit — Collection of small and useful nginx add-ons
- ngx_devel_kit — an Nginx module that adds additional generic tools that module developers can use in their own modules
Please also note that there is resty
command line client included in OpenResty bundle. The command line client sources can be found on Github.
Core Nginx Modules
To learn more about Nginx Core Modules, please refer Nginx Documentation. Some modules that come with Nginx are (not all of them are build by default):
- ngx_http_core_module
- ngx_http_ssl_module — The ngx_http_ssl_module module provides the necessary support for HTTPS
- ngx_http_v2_module — The ngx_http_v2_module module provides support for HTTP/2
- ngx_http_realip_module — The ngx_http_realip_module module is used to change the client address and optional port to the one sent in the specified header fields
- ngx_http_addition_module — The ngx_http_addition_module module is a filter that adds text before and after a response
- ngx_http_xslt_module — The ngx_http_xslt_module is a filter that transforms XML responses using one or more XSLT stylesheet
- ngx_http_image_filter_module — The ngx_http_image_filter_module module is a filter that transforms images in JPEG, GIF, and PNG formats
- ngx_http_geoip_module — The ngx_http_geoip_module module creates variables with values depending on the client IP address, using the precompiled MaxMind databases
- ngx_http_sub_module — The ngx_http_sub_module module is a filter that modifies a response by replacing one specified string by another
- ngx_http_dav_module — The ngx_http_dav_module module is intended for file management automation via the WebDAV protocol. The module processes HTTP and WebDAV methods PUT, DELETE, MKCOL, COPY, and MOVE
- ngx_http_flv_module — The ngx_http_flv_module module provides pseudo-streaming server-side support for Flash Video (FLV) files
- ngx_http_mp4_module — The ngx_http_mp4_module module provides pseudo-streaming server-side support for MP4 files. Such files typically have the .mp4, .m4v, or .m4a filename extensions
- ngx_http_gunzip_module — The ngx_http_gunzip_module module is a filter that decompresses responses with “Content-Encoding: gzip” for clients that do not support “gzip” encoding method. The module will be useful when it is desirable to store data compressed to save space and reduce I/O costs
- ngx_http_gzip_static_module — The ngx_http_gzip_static_module module allows sending precompressed files with the “.gz” filename extension instead of regular files
- ngx_http_auth_request_module — The ngx_http_auth_request_module module implements client authorization based on the result of a subrequest
- ngx_http_random_index_module — The ngx_http_random_index_module module processes requests ending with the slash character (‘/’) and picks a random file in a directory to serve as an index file
- ngx_http_secure_link_module — The ngx_http_secure_link_module module (0.7.18) is used to check authenticity of requested links, protect resources from unauthorized access, and limit link lifetime
- ngx_http_slice_module — The ngx_http_slice_module module is a filter that splits a request into subrequests, each returning a certain range of response
- ngx_http_stub_status_module — The ngx_http_stub_status_module module provides access to basic status information
- ngx_http_charset_module — The ngx_http_charset_module module adds the specified charset to the “Content-Type” response header field
- ngx_http_gzip_module — The ngx_http_gzip_module module is a filter that compresses responses using the “gzip” method
- ngx_http_ssi_module — The ngx_http_ssi_module module is a filter that processes SSI (Server Side Includes) commands in responses passing through it
- ngx_http_userid_module — The ngx_http_userid_module module sets cookies suitable for client identification
- ngx_http_access_module — The ngx_http_access_module module allows limiting access to certain client addresses
- ngx_http_auth_basic_module — The ngx_http_auth_basic_module module allows limiting access to resources by validating the user name and password using the “HTTP Basic Authentication” protocol
- ngx_http_autoindex_module — The ngx_http_autoindex_module module processes requests ending with the slash character (‘/’) and produces a directory listing
- ngx_http_geo_module — The ngx_http_geo_module module creates variables with values depending on the client IP address
- ngx_http_map_module — The ngx_http_map_module module creates variables whose values depend on values of other variables
- ngx_http_split_clients_module — The ngx_http_split_clients_module module creates variables suitable for A/B testing, also known as split testing
- ngx_http_referer_module — The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the “Referer” header field
- ngx_http_rewrite_module — The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions, return redirects, and conditionally select configurations
- ngx_http_proxy_module — The ngx_http_proxy_module module allows passing requests to another server
- ngx_http_fastcgi_module — The ngx_http_fastcgi_module module allows passing requests to a FastCGI server
- ngx_http_uwsgi_module — The ngx_http_uwsgi_module module allows passing requests to a uwsgi server
- ngx_http_scgi_module — The ngx_http_scgi_module module allows passing requests to an SCGI server
- ngx_http_memcached_module — he ngx_http_memcached_module module is used to obtain responses from a memcached server
- ngx_http_limit_conn_module — The ngx_http_limit_conn_module module is used to limit the number of connections per the defined key, in particular, the number of connections from a single IP address
- ngx_http_limit_req_module — he ngx_http_limit_req_module module is used to limit the request processing rate per a defined key, in particular, the processing rate of requests coming from a single IP address
- ngx_http_empty_gif_module — The ngx_http_empty_gif_module module emits single-pixel transparent GIF
- ngx_http_browser_module — The ngx_http_browser_module module creates variables whose values depend on the value of the “User-Agent” request header field
- ngx_http_upstream_module — http://nginx.org/en/docs/http/ngx_http_upstream_module.html
- ngx_http_perl_module — The ngx_http_perl_module module is used to implement location and variable handlers in Perl and insert Perl calls into SSI
- ngx_mail_core_module
- ngx_mail_ssl_module — The ngx_mail_ssl_module module provides the necessary support for a mail proxy server to work with the SSL/TLS protocol
- ngx_mail_smtp_module
- ngx_mail_imap_module
- ngx_mail_pop3_module
- ngx_stream_core_module
- ngx_stream_ssl_module — The ngx_stream_ssl_module module provides the necessary support for a stream proxy server to work with the SSL/TLS protocol
- ngx_stream_proxy_module — The ngx_stream_proxy_module module allows proxying data streams over TCP, UDP, and UNIX-domain sockets
Third-party Nginx Modules
- lua-var-nginx-module — Fetchs Nginx variable by Luajit with FFI way which is fast and cheap
- ngx_lua_ipc — Interprocess communication for Lua Nginx Module and OpenResty — send named alerts with string data between Nginx worker processes
- nchan (Github) — Fast, horizontally scalable, multiprocess pub/sub queuing server and proxy for HTTP, long-polling, Websockets and EventSource (SSE)
- ngx_pagespeed (Github) — Automatic PageSpeed optimization module for Nginx
- ModSecurity — Open Source Web Application Firewall
- NAXSI — NAXSI is an open-source, high performance, low rules maintenance WAF for NGINX; NAXSI means Nginx Anti Xss & Sql Injection
- nginx-upsync-module — Nginx C module, syncing upstreams from consul or others, dynamiclly adjusting backend servers weight, needn't reload nginx
- sass-nginx-module — Syntactically Awesome Nginx Module
- More 3rd Party Modules
Libraries
Core Libraries
Core Libraries are bundled in OpenResty package, and you don't need to separately install them.
- lua-resty-core — New FFI-based Lua API for the ngx_lua module
- lua-resty-upstream-healthcheck — Health Checker for Nginx Upstream Servers in Pure Lua
- lua-resty-string — String utilities and common hash functions for ngx_lua and LuaJIT
- lua-resty-lock — Simple nonblocking lock API for ngx_lua based on shared memory dictionaries
- lua-resty-lrucache — Lua-land LRU Cache based on LuaJIT FFI
- lua-resty-dns — DNS resolver for the Nginx Lua module
- lua-resty-resolver — Caching DNS resolver for ngx_lua and LuaJIT
- lua-resty-upload — Streaming reader and parser for HTTP file uploading based on ngx_lua cosocket
- lua-resty-websocket — Lua WebSocket implementation for the ngx_lua module
- lua-resty-mysql — Non-blocking Lua MySQL client driver for ngx_lua based on the cosocket API
- lua-resty-memcached — Lua memcached client driver for the ngx_lua based on the cosocket API
- lua-resty-redis — Lua Redis client driver for the ngx_lua based on the cosocket API
- lua-redis-parser — Redis reply parser and request constructor library for Lua
- lua-rds-parser — Resty-DBD-Stream (RDS) parser for Lua written in C
- lua-cjson — Lua cJSON is a fast JSON encoding / parsing module for Lua
- lua-resty-shdict-simple — Simple applicaton-oriented interface to the OpenResty shared dictionary API
- lua-resty-memcached-shdict — Powerful memcached client with a shdict caching layer and many other features
- lua-resty-signal — Lua library for killing or sending signals to Linux processes
- lua-tablepool — Lua table recycling pools for LuaJIT
- lua-resty-shell — Lua module for nonblocking system shell command executions
Web Frameworks
- Lapis — Lapis is a framework for building web applications using MoonScript or Lua that runs inside of a customized version of Nginx called OpenResty
- lor (Github) — A fast and minimalist web framework based on OpenResty
- Vanilla — An OpenResty Web Framework
- luastar — A HTTP server and web framework based on OpenResty
- Lusty — Lua RESTful Web Application Framework, an extensible and speedy web framework
- GIN — A fast, low-latency, low-memory footprint, web JSON-API framework with Test Driven Development helpers and patterns
- Quick Server — A Server Framework Based on OpenResty
- Sailor — A Lua MVC Web Framework
- lua-resty-rack — A simple and extensible HTTP server framework for OpenResty
- MOOCHINE — A simple and lightweight web framework based on OpenResty
- sinatra-openresty — Sinatra ported to OpenResty framework
- lj-web — Lightweight Web Framework Based On ngx_openresty
- Gimlet Cocktail — A micro web application framework for OpenResty written in Moonscript inspired by Martini & Sinatra
- durap — Durap is a Lua Web Framework based on OpenResty.
- Ziggy Stardust — Ziggy Stardust (or just "stardust") is a simple nginx/Lua framework inspired by Sinatra, Express, and Mercury
- zLua — A Codeigniter like Lua framework based on OpenResty
- lua-resty-stack — OpenResty Simple Application Stack
- dodolu — A lightweight web framework based on OpenResty
- Octopus — The Lua Web Platform
- vicky — A restful framework for openresty,inspired by expressjs and koa.
- fasty - A CMS based on openresty, arangoDB, lapis & riotjs
Web Development Essentials
- lua-resty-url — URL parser for OpenResty
- lua-resty-cookie — Lua library for HTTP cookie manipulations for OpenResty/ngx_lua
- lua-resty-cors — The Cross-Origin Resource Sharing (CORS) implementation for OpenResty
- lua-resty-session — Session library for OpenResty implementing Secure Cookie Protocol
- lua-resty-woothee — The Lua-Openresty implementation of Project Woothee, which is a multi-language user-agent strings parsers
- lua-resty-mobile — This library parses HTTP headers and detects mobile device
- lua-resty-jwt — JWT (JSON Web Tokens) for The Great OpenResty
- neturl — URL and Query string parser, builder, normalizer for Lua
- Mio — API statistics/summary and health datas in NGINX based on OpenResty, just like NGINX Plus
- lua-redis-admin — redis client tool,redis web client,redis web ui,openresty lor lua framework support
Routing Libraries
- lua-resty-route — A URL routing library for OpenResty supporting multiple route matchers, middleware, and HTTP and WebSockets handlers to mention a few of its features
- router.lua — A barebones router for Lua, it matches URLs and executes Lua functions
- lua-resty-r3 — libr3 OpenResty implementation, libr3 is a high-performance path dispatching library. It compiles your route paths into a prefix tree (trie). By using the constructed prefix trie in the start-up time, you may dispatch your routes with efficiency
- lua-resty-libr3 — High-performance path dispatching library base on libr3 for OpenResty
- lua-radix-router - A lightweight, high-performance, radix tree based and OpenAPI friendly API Router for Lua / LuaJIT / OpenResty.
Traffic Management
- lua-resty-redis-ratelimit — Limit the request processing rate between multiple NGINX instances backed by Redis
- lua-resty-limit-rate - Lua module for limiting request rate for OpenResty/ngx_lua, using the "token bucket" method
- lua-resty-global-throttle — Distributed rate limiter / throttler based on Cloudflare's blog post on approximate sliding window
Request Argments Parsers
- lua-resty-reqargs — Helper to Retrieve application/x-www-form-urlencoded, multipart/form-data, and application/json Request Arguments
- lua-resty-post — HTTP Post Utility for OpenResty (File Uploading Helper)
- lua-resty-multipart-parser — Simple multipart data parser for OpenResty / Lua
- lua-resty-multipart — Multipart parsing library for OpenResty
Middleware and API Tools
- Kong (GitHub) — KONG: Microservice Management Layer (Secure, Manage & Extend your APIs and Microservices)
- LSSO — A Lightweight SSO middleware for Nginx + Lua
- apigateway — A Performant API Gateway based on Nginx and OpenResty
- 3scale APIcast — API gateway module of Red Hat 3scale API Management
- Sumory Orange — API Gateway
- Monarch API Gateway — OpenResty-based API Gateway
- APISIX — APISIX is a Cloud-Native Microservices API Gateway
- lua-resty-grpc-gateway — Provides request transformation between REST <-> gRPC with Openresty
- Slardar - Updating your upstream list and run lua scripts without reloading Nginx
- tl-ops-manage - Framework for service management based on openresty
Templating
- lua-resty-template — A Compiling (HTML) templating engine for Lua and OpenResty
- lemplate — OpenResty/Lua template framework implementing Perl's TT2 templating language
- lua-resty-aries — OpenResty and Lua multi-function template, it can correct show your error line
- etlua — Embedded Lua templates
- liquid-lua — A Lua implementation of Liquid for OpenResty platform
- lua-resty-tmpl — A simple template engine for Lua and OpenResty, derived from lua-template.
- Alternatives — Some alternative Lua templating solutions that may work just fine with OpenResty
Validation
- lua-resty-validation — An extendable chaining validation and filtering library for Lua and OpenResty
- valua — Validation for lua! A module for making chained validations. Create your objects, append your tests, use and reuse it!
Authentication and Authorization
- lua-resty-macaroons — LuaJIT FFI Bindings to libmacaroons – Macaroons are flexible authorization credentials that support decentralized delegation, attenuation, and verification
- lua-resty-openidc — lua-resty-openidc is a library for NGINX implementing the OpenID Connect Relying Party (RP) and the OAuth 2.0 Resource Server (RS) functionality
- lua-resty-duo-mobile — OpenResty client for the Duo Mobile Auth API
- micro-auth — A microservice that makes adding authentication with Google and Github to your application easy (Note: before using it in production, see: https://news.ycombinator.com/item?id=13682682 — hopefully we can remove this remark in a future)
- lua-resty-casbin — Casbin is an authorization library that supports access control models like ACL, RBAC, ABAC in Lua (OpenResty). This is a Casbin authorization plugin for OpenResty.
Cryptography
- lua-resty-string — String utilities and common hash functions for ngx_lua and LuaJIT
- lua-resty-openssl — FFI-based OpenSSL binding for LuaJIT
- lua-resty-nettle — LuaJIT FFI bindings for Nettle (a low-level cryptographic library)
- lua-resty-chash — A generic consistent hash implementation for OpenResty/Lua
- lua-resty-jump-consistent-hash — Jump Consistent Hash for LuaJIT
- lua-resty-acme — Automatic Let's Encrypt certificate serving and Lua implementation of ACMEv2 procotol
- lua-resty-letsencrypt — Automatically fetch and renew TLS certificates on the fly using LetsEncrypt CA.
- lua-resty-auto-ssl — On the fly (and free) SSL registration and renewal inside OpenResty/nginx with Let's Encrypt
- lua-resty-peter_sslers — Automaticly loads/cache SSL certificates based on SNI from caches or backend json servers
- lua-resty-murmurhash2 — LuaJIT MurmurHash 2 bindings to Nginx / OpenResty murmurhash2 implementation
- lua-resty-hmac — Lua driver for making and receiving hmac signed requests
- lua-resty-scrypt — LuaJIT FFI-based scrypt library for OpenResty
- lua-resty-xxhash — LuaJIT FFI-bindings to xxHash, an Extremely fast non-cryptographic hash algorithm
- lua-resty-rsa — RSA functions for LuaJIT
- lua-resty-aead — AEAD cipher library for lua-nginx-module. BoringSSL only.
- lua-resty-hawk — Hawk authentication on Nginx with Lua and OpenResty
- lua-resty-urandom — Buffered wrapper for Linux/BSD kernel space CSPRNG
- lua-resty-fastpbkdf2 — Lua bindings to fastpbkdf2
- lua-argon2-ffi — LuaJIT FFI binding for the Argon2 password hashing algorithm
- lua-resty-des — Lua interface to make DES ECB encryption
- WXBizMsgCrypt — Lua version of the WeChat Message Cryptography
- luasodium - Lua bindings to libsodium, compatible with both Lua C and LuaJIT FFI APIs.
Networking
- lua-resty-http by @pintsized — Lua HTTP client cosocket driver for OpenResty / ngx_lua
- lua-resty-http by @liseen — Lua http client driver for the ngx_lua based on the cosocket API
- lua-resty-http by @DorianGray — Lua HTTP client driver for ngx_lua based on the cosocket API
- lua-resty-http-simple — Simple Lua HTTP client driver for ngx_lua
- lua-resty-httpipe — Lua HTTP client cosocket driver for OpenResty / ngx_lua
- lua-resty-httpclient — Nonblocking Lua HTTP Client library for aLiLua & ngx_lua
- lua-httpcli-resty — Lua HTTP client module for OpenResty
- lua-resty-requests — Yet Another HTTP Library for OpenResty
- lua-resty-websocket — Lua WebSocket implementation for the ngx_lua module
- lua-resty-ipmatcher — High performance match IP address for OpenResty Lua
- lua-resty-mediador — Determines address of proxied request and does IP address / CIDR blocks handling (both IPv4 and IPv6)
- lua-resty-iputils — Utility functions for working with IP addresses in OpenResty
- lua-resty-readurl — Lua library for capturing urls, decoding, and logging results
- lua-resty-dns-client — Lua library containing a DNS client, several utilities, and a load-balancer
- lua-resty-dns-server — Lua DNS server driver for the OpenResty
- lua-resty-upstream — Upstream connection load balancing and failover module
- lua-resty-checkups — Manage Nginx upstreams in pure ngx_lua
- lua-resty-socks5 — Lua SOCKS5 client for the ngx_lua based on the cosocket API
- lua-resty-waf — High-performance WAF built on the OpenResty stack
- lua-resty-tarpit — OpenResty response time inflation, capture and delay unwanted requests
- lua-resty-jsonrpc-batch — JSON-RPC 2.0 Batch Request protocol module for OpenResty
- lua-resty-limit-traffic — Lua library for limiting and controlling traffic in OpenResty/ngx_lua
- lua-resty-limits — Limits request every second or minute
- lua-resty-fastcgi — Lua FCGI client driver for ngx_lua based on the cosocket API
- lua-resty-ftpclient — Lua FTP client driver for the ngx_lua based on the cosocket API
- lua-capnproto — Cap’n Proto is an insanely fast data interchange format and capability-based RPC system
- lua-resty-tornera — A traffic replay tool with an easy to use HTTP API for OpenResty / LuaJIT
- lua-resty-consul — Library to interface with the consul HTTP API from ngx_lua
- lua-resty-upstream-etcd — A Lua module for OpenResty, can dynamically update the upstreams from etcd and Kubernetes
- lua-resty-healthcheck — Healthcheck library for OpenResty to validate upstream service status
- lua-resty-balancer — A generic consistent hash implementation for OpenResty
- lua-resty-sniproxy — SNI Proxy based on stream-lua-nginx-module
- lua-resty-multiplexer — Transparent port service multiplexer for stream subsystem
- lua-resty-http2 — The HTTP/2 Protocol (Client Side) Implementation for OpenResty
- lua-tus-server - Server-side implementation of the tus protocol in Lua
- lua-resty-wrr - weight round robin for Openresty. Similar to ngx_http/stream_upstream_round_robin module.
- lua-resty-dycert - Dynamically generate a certificate based on a CSR and sign it with a CA.
Databases and Storages
- lua-resty-mysql — Non-blocking Lua MySQL client driver for ngx_lua based on the cosocket API
- lua-resty-mysql-connector — Connection utilities for lua-resty-mysql, support for read and write separation,support for instantiating different databases
- lua-resty-postgres — Nonblocking Lua PostgreSQL driver library for ngx_lua
- pgmoon — A pure Lua Postgres driver for use in OpenResy & more
- lua-resty-couchbase — OpenResty CouchBase module
- iqiyi/lua-resty-couchbase — Lua couchbase client driver for the ngx_lua based on the cosocket API
- lua-resty-couchdb — Lua resty minimal couchdb client using nginx proxy ngx.location_capture
- lua-resty-orm — Simple ORM for OpenResty
- lua-resty-mvc — You don't need that complicated MVC framework! With just a plain folder with several simple files, you can enjoy basic but most frequently used MVC features.
- lua-resty-memcached — Lua memcached client driver for the ngx_lua based on the cosocket API
- lua-resty-redis — Lua Redis client driver for the ngx_lua based on the cosocket API
- lua-resty-redis-connector — Connection utilities for lua-resty-redis, making it easy and reliable to connect to Redis hosts, either directly or via Redis Sentinel
- resty-redis-cluster — OpenResty Redis cluster-aware client based on resty-redis-cluster
- lua-resty-redis-cluster — OpenResty Redis Cluster Client
- lua-resty-redis-util — Based on
lua-resty-redis
and makes it easier to operate the Redis - lua-cassandra - Pure Lua, feature-rich, and cluster-aware Cassandra client
- lua-resty-cassandra — Pure Lua Cassandra client using CQL binary protocol
- lua-resty-bloomd — A client library based on ngx_lua to interface with bloomd servers
- lua-resty-riak — Lua riak protocol buffer client driver for the ngx_lua based on the cosocket API
- lua-resty-moongoo — MongoDB library for OpenResty, highly inspired by Perl Mango
- lua-resty-mongol — Native Lua Mongodb driver which supports both luasocket and ngx_lua based on the cosocket API
- lua-resty-mongo — Lua mongodb client driver for the ngx_lua based on the cosocket API
- lua-mongo — A simple Lua Mongo driver (a fork made to work with co-sockets)
- lua-resty-influx — OpenResty client for InfluxDB
- lua-telegraf — Lua/OpenResty client for Telegraf/InfluxDB
- lua-resty-kyototycoon by @cloudflare — Lua client driver for KyotoTycoon using its native wire protocol (OpenResty/ngx_lua)
- lua-resty-kyototycoon by @sjnam — Lua client driver for KyotoTycoon using its binary protocol
- lua-resty-tarantool — Library for working with Tarantool from Nginx with the embedded Lua module or with OpeRresty
- lua-nginx-tarantool — A driver for a NoSQL database in a Lua script Tarantool build on fast nginx cosockets
- lua-resty-ssdb — Lua ssdb client driver for the ngx_lua based on the cosocket API, SSDB is a leveldb server
- ledis-openresty — Lua LedisDB client driver for the ngx_lua based on the cosocket API
- lua-resty-fastdfs — Nonblocking Lua FastDFS driver library for ngx_lua
- lua-resty-statsd — StatsD client for OpenResty
- lua-resty-dogstatsd — A client for DogStatsD, an extension of the StatsD metric server for Datadog. Using nginx cosocket API
- openresty-statsd — A Lua module for OpenResty to send metrics to StatsD
- lua-resty-smtp — A bridge between HTTP and SMTP
- lua-resty-mail — A high-level, easy to use, and non-blocking email and SMTP library for OpenResty
- lua-resty-mogilefs — A Lua mogilefs client driver for the ngx_lua based on the cosocket API
- lua-resty-etcd — Nonblocking Lua etcd driver library for OpenResty
- lua-shdict-nginx-module — An upgraded version of ngx.shared.DICT, capable of sharing data between
stream
andhttp
modules
Testing and Profiling
- Test::Nginx — Data-driven test scaffold for Nginx C module and OpenResty Lua library development (see real-word tests in lua-resty-redis)
- nginx-systemtap-toolkit — Real-time analyzing and diagnosing tools for Nginx based on SystemTap
- stapxx — Simple macro language extentions to systemtap
- FlameGraph — Flame graphs are a visualization of profiled software, allowing the most frequent code-paths to be identified quickly and accurately
- lua-resty-busted — Test OpenResty scripts with busted
- lua-resty-test — Test frame based on OpenResty
- busted (Github) — Elegant Lua unit testing
- Telescope (Github) — Telescope is a highly customizable test library for Lua that allows for declarative tests with nested contexts
Message Queuing and Task Management
- lua-resty-qless — Lua binding to Qless (Queue / Pipeline management) for OpenResty (see also: Qless Web Interface implemented with OpenResty)
- lua-resty-rabbitmqstomp — Lua RabbitMQ client library which uses cosocket api for communication over STOMP 1.2 with a RabbitMQ broker which has the STOMP plugin
- lua-resty-gearman — Lua gearman client driver for the ngx_lua based on the cosocket API
- lua-resty-kafka — Lua kafka client driver for the ngx_lua based on the cosocket API
- lua-resty-beanstalkd — Lua beanstalkd client driver for the ngx_lua based on the cosocket API
- lua-resty-ironmq — Simple IronMQ client for OpenResty
- lua-resty-nsq — NSQ client for for the ngx_lua based on the cosocket API
Bar Codes and QR Codes
- lua-resty-QRcode — QR encode tool for ngx_lua
- lua-resty-QRDecode — QR decoder for ngx_lua
Utilities
- lua-resty-worker-manager — Tracks worker processes and nodes starting / restarting / reloading / stopping
- lua-resty-worker-events — Inter process events for Nginx worker processes
- lua-resty-batch — Merge multiple requests in nginx to a single sub-request
- lua-resty-shell — Tiny non-blocking subprocess / shell library to use with OpenResty application server (using sockproc)
- lua-resty-exec — Non-blocking, non-shell-spawning, streaming and non-streaming subprocess library (using sockexec)
- lua-resty-repl — Interactive console (REPL) for OpenResty and LuaJIT code
- lua-resty-fileinfo — LuaJIT FFI bindings to libmagic, magic number recognition library - tries to determine file types
- lua-resty-base-encoding — Provides base32/base16/... encoding for OpenResty applications.
- lua-resty-mime-sniff — Sniff the real MIME type of given data
- lua-resty-taglib — LuaJIT FFI bindings for TagLib - An Audio Meta-Data Library
- lua-resty-uuid — LuaJIT FFI bindings for libuuid, a DCE compatible Universally Unique Identifier library
- lua-resty-jit-uuid — A pure LuaJIT (no dependencies) uuid generator tuned for performance
- lua-resty-unique-id — Lua library for generating a unique ID for OpenResty
- lua-resty-tsort — Performs a topological sort on input data
- lua-resty-postal — LuaJIT FFI Bindings to libpostal – a fast statistical parser/normalizer for street addresses around the world.
- lua-resty-libinjection — LuaJIT FFI bindings for libinjection, a SQL/SQLi tokenizer and analyzer
- lua-resty-socket — Automatic LuaSocket/cosockets compatibility module
- Inspect — Inspect is a library that transforms any Lua value into a human-readable representation. It is especially useful for debugging errors in tables.
- lua-resty-maxminddb by @lilien1010 — LuaJIT FFI Bindings to official libmaxminddb, to get ip location with ip database offered by maxmind
- lua-resty-maxminddb by @anjia0532 — A Lua library for reading MaxMind's Geolocation database format (aka mmdb or geoip2)
- lua-resty-radixtree — Lua / OpenResty implementation based on FFI for rax
- lua-resty-counter — Lock-free counter for OpenResty
- lua-resty-sync - This lua-resty library help you to synchronize data(from redis, mysql, memcached and so on) based on the version changes
- NetStorageKit-Lua — Akamai Netstorage (File/Object Store) API for Openresty
- lua-resty-wirefilter — LuaJIT FFI bindings to wirefilter - An execution engine for Wireshark-like filters
- lua-resty-hyperloglog - hyperloglog for openresty.
- lua-jsonschema-mocker - JSON Schema mocker.
Date and Time
These libraries are not build to using lua-nginx-module
s date time functions (except luatz) like ngx.today
, ngx.time
, ngx.now
, ngx.localtime
, or ngx.utctime
, but they may still come handy. At some point we may need a more "official" time library for OpenResty.
- luatz — A Lua library for time and date manipulation (has a fallback to
ngx.now
) - LuaDate — Lua Date and Time module for Lua 5.x
- SciLua Time Library — Library for the manipulation of dates and periods according to the Gregorian calendar, i.e. the internationally accepted calendar for most uses
Compression
- lua-resty-zip — ZIP functions(compress/uncompress) for LuaJIT
- lua-resty-snappy — LuaJIT FFI bindings for Snappy, a fast compressor/decompressor
- lua-resty-brotli — LuaJIT FFI bindings for Google Brotli
- lua-resty-zstd — LuaJIT bindings to Facebook Zstandard using FFI
Text Formats
- lua-resty-hoedown — LuaJIT FFI bindings to Hoedown, a standards compliant, fast, secure markdown processing library in C
- lua-gumbo — Lua bindings for the Gumbo HTML5 parsing library, with a set of DOM APIs implemented in pure Lua
- lua-resty-sass — LuaJIT FFI bindings for libsass - A C/C++ implementation of a Sass compiler (http://libsass.org/)
- lua-resty-lanli — LuaJIT FFI Bindings to Lanli HTML Sanitizer Library
- lua-resty-ini — Lua INI-file parser
- lua-re2 — C and Lua wrapper for RE2 regular expression library.
- lua-aho-corasick — C++ and Lua Implementation of the Aho-Corasick (AC) string matching algorithm
- lua-resty-json — JSON library for Lua and C (decoder only).
- lua-resty-libcjson — LuaJIT FFI-based cJSON library for OpenResty
- lua-resty-prettycjson — Lua cJSON Pretty Formatter
- jsonschema — JSON schema validator
- lua-resty-jsonschema — https://github.com/tianchaijz/lua-resty-jsonschema
- lua-laxjson - Lua binding to a relaxed streaming JSON parser, liblaxjson for LuaJIT using FFI
- lua-resty-utf8rewind — LuaJIT FFI bindings for utf8rewind - a system library written in C designed to extend the default string handling functions with support for UTF-8 encoded text
- lua-resty-unistring — LuaJIT FFI bindings for GNU libunistring - A Unicode string manipulation lIbrary (https://www.gnu.org/software/libunistring/)
- lua-resty-htmlentities — Backport the entities to LuaJIT with the FFI binding as the entities to UTF-8 decoder
- lua-resty-jsdecode — Javascript Escape Notation decoding to UTF-8 bytes
- lua-resty-breeze — Breeze serialize for Lua and OpenResty
Binary Formats
- lua-resty-msgpack — Lua Message Pack for OpenResty
- luajit-msgpack-pure — MessagePack for LuaJIT (using FFI, no bindings, V4 API)
Document Formats
- lua-resty-libxl — LuaJIT FFI-based LibXL (Excel) library for OpenResty
- lua-resty-haru — LuaJIT FFI-based libHaru (PDF) library for OpenResty
- lua-resty-hpdf — LuaJIT FFI-based libHaru (PDF) library for OpenResty
Image Formats
- lua-resty-imagick — Lua bindings to ImageMagick's MagicWand for LuaJIT using FFI
- Lua IMagick — Lua Pure-C Bindings to ImageMagick
- magick — Lua Bindings to ImageMagick for LuaJIT using FFI
- giflib — Lua bindings to GIFLIB for LuaJIT using FFI
- fi-luajit — A LuaJIT interface to FreeImage
- lua-vips — LuaJIT binding for libvips
Localization
- lua-resty-gettext — LuaJIT FFI-based gettext library for OpenResty
Caching
- lua-resty-lrucache — Lua-land LRU Cache based on LuaJIT FFI
- lua-resty-mlcache — Modern and flexible multi-level caching using lua-resty-lrucache, shared dictionaries, and cache stampede protection.
- shcache — shcache is an attempt at using ngx.shared.DICT with a caching state machine layed on top
- lua-resty-tlc — Two Layer Cache implementation using lua-resty-lrucache and shared dictionaries.
- Ledge — A Lua application for OpenResty, providing HTTP cache functionality for Nginx, using Redis as a cache / metadata store
- lua-resty-cache — HTTP Cache to Redis, can serve stale response, and using
lua-resty-lock
only allow one request to populate a new cache
Metrics and Statistics
- LUAMETER — A Lua module for Nginx that records and provides key status and performance metrics, right from within Nginx and in real-time (Proprietary)
- ngxtop — Real-Time metrics for nginx server
- lua-resty-moesif — Lua Client Library for Moesif, compatible with OpenResty
Logging
- lua-resty-logger-socket — Raw-socket-based Logger Library for Nginx (based on ngx_lua)
- lua-nginx-logging — Logging utilities for Nginx written in Lua
- lua-resty-logger — Custom Logger Library for OpenResty
- lua-resty-rfc5424 — An implementation of the RFC5424(syslog) in the OpenResty
- lua-resty-fluentd — Lua fluentd logger for the ngx_lua based on the cosocket API
- lua-resty-fluent-logger — A structured logger for Fluentd (OpenResty / ngx_lua)
- raven-lua — A small Lua interface to Sentry that also has a helpful wrapper function call() that takes any arbitrary Lua function (with arguments) and executes it, traps any errors and reports it automatically to Sentry
Functional Programming
- Lua Fun — Lua Fun is a high-performance functional programming library for Lua designed with LuaJIT's trace compiler in mind
- Penlight — Penlight brings together a set of generally useful pure Lua modules, focusing on input data handling (such as reading configuration files), functional programming (such as map, reduce, placeholder expressions, etc), and OS path management
- Moses — A Lua utility-belt library for functional programming. It complements the built-in Lua table library, making easier operations on arrays, lists, collections
- Underscore.lua — Underscore.lua is a Lua library that provides a set of utility functions for dealing with iterators, arrays, tables, and functions
- Lodash.lua — A functional programming library for Lua in respect to the Javascript library Lodash
- Search for more "Functional Lua" projects on GitHub...
Web APIs
- lua-resty-github — Lua library for using the github api in the ngx_lua nginx module
- lua-resty-hipchat — Lua library for using the hipchat api
- lua-resty-newrelic — Lua newrelic SDK for the ngx_lua based on the C SDK
- api-gateway-aws — Lua module for AWS APIs. The missing AWS SDK from Nginx / OpenResty. Use it to proxy AWS APIs in a simple fashion, with any HTTP Client that you prefer.
- lua-resty-aws — AWS SDK for OpenResty
- lua-resty-aws-sdk — A raw AWS SDK generated from API specification
- lua-resty-aws-email — Send email using Amazon Simple Email Service(SES) API
- lua-resty-aws-auth — Simple Lua resty utilities to generate Amazon v4 authorization and signature headers
- lua-resty-s3 — Lua driver for uploading content to Amazon S3
- lua-resty-s3uploader — An AWS S3 upload client,easy to use
- lua-resty-paypal — Lua Paypal client using express checkout for OpenResty
- lua-resty-17mon — ipip.net IP for OpenResty
- lua-resty-upyun — Upyun cloud-based platform
- lua-resty-tencent-cos-signature Tencent QCloud COS request signature authorization headers generator
- lua-mailgun — A Lua library for sending emails and interacting with the Mailgun API. Compatible with OpenResty via Lapis HTTP API, or any other Lua script via LuaSocket.
- lua-payments — Bindings to various payment provider APIs for use in Lua (with OpenResty or anything that supports LuaSocket)
Security
- lua-resty-ddos — This library uses Cookie Validation to detect bots from real users
- Nginx-Lua-Anti-DDoS) — A Anti-DDoS script to protect Nginx web servers using Lua with a Javascript based authentication puzzle inspired by Cloudflare
Other Sources for Libraries
- OpenResty Package Manager Repository
- LuaRocks Repository (Search for resty libraries in LuaRocks)
- Github Search for lua-resty-* Libraries, or the recently updated ones
- Lua Toolbox
- luapower — Lua, JIT, batteries
- List of Available LuaJIT Packages
- List of Available LuaJIT FFI Bindings
Books and Tutorials
Books
- Programming OpenResty — Scripting an NGINX-based Web Platform (Work-in-Progress)
- OpenResty Best Practices (GitBook) (Chinese, use e.g. Google Translate)
Tutorials and Guides
- agentzh's Nginx Tutorials
- Definitely an OpenResty Guide
- Top ten things about OpenResty
- The Latest and Greatest from ngx_lua: New Features & Tools (Summary, Slides, PDF, Video)
- Nginx Configuration Snippets — A collection of useful Nginx configuration snippets
Videos
- Getting started with Lapis, the web framework
- Building an HTTP request router with NGINX and Lua - Shopify (Nginx Conf 2015)
- Enabling TLS Cross host Session Resumption with Forward Secrecy via ngx lua (Nginx Conf 2015)
- The Latest and Greatest from ngx_lua: New Features & Tools (Nginx Conf 2014)
Conferences, Workshops and Events
- OpenResty Con 2016, Shenzen, China
- New Development of OpenResty in 2016 (Slides, Video in Chinese)
- Lua Workshop 2016, San Francisco, USA (Lua.org)
- Bay Area OpenResty Meetup 2016 / 3
- OpenResty Con 2015, Beijing, China