Lua
made by https://0x3d.site
GitHub - ledgetech/lua-resty-http: Lua HTTP client cosocket driver for OpenResty / ngx_lua.Lua HTTP client cosocket driver for OpenResty / ngx_lua. - ledgetech/lua-resty-http
Visit Site
GitHub - ledgetech/lua-resty-http: Lua HTTP client cosocket driver for OpenResty / ngx_lua.
lua-resty-http
Lua HTTP client cosocket driver for OpenResty / ngx_lua.
Status
Production ready.
Features
- HTTP 1.0 and 1.1
- SSL
- Streaming interface to the response body, for predictable memory usage
- Alternative simple interface for single-shot requests without a manual connection step
- Chunked and non-chunked transfer encodings
- Connection keepalives
- Request pipelining
- Trailers
- HTTP proxy connections
- mTLS (requires
ngx_lua_http_module
>= v0.10.23)
API
- new
- connect
- set_proxy_options
- set_timeout
- set_timeouts
- set_keepalive
- get_reused_times
- close
- request
- request_uri
- request_pipeline
- parse_uri
- get_client_body_reader
- Response
Deprecated
These methods may be removed in future versions.
Usage
There are two basic modes of operation:
-
Simple single-shot requests which require no manual connection management but which buffer the entire response and leave the connection either closed or back in the connection pool.
-
Streamed requests where the connection is established separately, then the request is sent, the body stream read in chunks, and finally the connection is manually closed or kept alive. This technique requires a little more code but provides the ability to discard potentially large response bodies on the Lua side, as well as pipelining multiple requests over a single connection.
Single-shot request
local httpc = require("resty.http").new()
-- Single-shot requests use the `request_uri` interface.
local res, err = httpc:request_uri("http://example.com/helloworld", {
method = "POST",
body = "a=1&b=2",
headers = {
["Content-Type"] = "application/x-www-form-urlencoded",
},
})
if not res then
ngx.log(ngx.ERR, "request failed: ", err)
return
end
-- At this point, the entire request / response is complete and the connection
-- will be closed or back on the connection pool.
-- The `res` table contains the expeected `status`, `headers` and `body` fields.
local status = res.status
local length = res.headers["Content-Length"]
local body = res.body
Streamed request
local httpc = require("resty.http").new()
-- First establish a connection
local ok, err, ssl_session = httpc:connect({
scheme = "https",
host = "127.0.0.1",
port = 8080,
})
if not ok then
ngx.log(ngx.ERR, "connection failed: ", err)
return
end
-- Then send using `request`, supplying a path and `Host` header instead of a
-- full URI.
local res, err = httpc:request({
path = "/helloworld",
headers = {
["Host"] = "example.com",
},
})
if not res then
ngx.log(ngx.ERR, "request failed: ", err)
return
end
-- At this point, the status and headers will be available to use in the `res`
-- table, but the body and any trailers will still be on the wire.
-- We can use the `body_reader` iterator, to stream the body according to our
-- desired buffer size.
local reader = res.body_reader
local buffer_size = 8192
repeat
local buffer, err = reader(buffer_size)
if err then
ngx.log(ngx.ERR, err)
break
end
if buffer then
-- process
end
until not buffer
local ok, err = httpc:set_keepalive()
if not ok then
ngx.say("failed to set keepalive: ", err)
return
end
-- At this point, the connection will either be safely back in the pool, or closed.
Connection
new
syntax: httpc, err = http.new()
Creates the HTTP connection object. In case of failures, returns nil
and a string describing the error.
connect
syntax: ok, err, ssl_session = httpc:connect(options)
Attempts to connect to the web server while incorporating the following activities:
- TCP connection
- SSL handshake
- HTTP proxy configuration
In doing so it will create a distinct connection pool name that is safe to use with SSL and / or proxy based connections, and as such this syntax is strongly recommended over the original (now deprecated) TCP only connection syntax.
The options table has the following fields:
scheme
: scheme to use, or nil for unix domain sockethost
: target host, or path to a unix domain socketport
: port on target host, will default to80
or443
based on the schemepool
: custom connection pool name. Option as per OpenResty docs, except that the default will become a pool name constructed using the SSL / proxy properties, which is important for safe connection reuse. When in doubt, leave it blank!pool_size
: option as per OpenResty docsbacklog
: option as per OpenResty docsproxy_opts
: sub-table, defaults to the global proxy options set, see set_proxy_options.ssl_reused_session
: option as per OpenResty docsssl_verify
: option as per OpenResty docs, except that it defaults totrue
.ssl_server_name
: option as per OpenResty docsssl_send_status_req
: option as per OpenResty docsssl_client_cert
: will be passed totcpsock:setclientcert
. Requiresngx_lua_http_module
>= v0.10.23.ssl_client_priv_key
: as above.
set_timeout
syntax: httpc:set_timeout(time)
Sets the socket timeout (in ms) for subsequent operations. See set_timeouts below for a more declarative approach.
set_timeouts
syntax: httpc:set_timeouts(connect_timeout, send_timeout, read_timeout)
Sets the connect timeout threshold, send timeout threshold, and read timeout threshold, respectively, in milliseconds, for subsequent socket operations (connect, send, receive, and iterators returned from receiveuntil).
set_keepalive
syntax: ok, err = httpc:set_keepalive(max_idle_timeout, pool_size)
Either places the current connection into the pool for future reuse, or closes the connection. Calling this instead of close is "safe" in that it will conditionally close depending on the type of request. Specifically, a 1.0
request without Connection: Keep-Alive
will be closed, as will a 1.1
request with Connection: Close
.
In case of success, returns 1
. In case of errors, returns nil, err
. In the case where the connection is conditionally closed as described above, returns 2
and the error string connection must be closed
, so as to distinguish from unexpected errors.
See OpenResty docs for parameter documentation.
set_proxy_options
syntax: httpc:set_proxy_options(opts)
Configure an HTTP proxy to be used with this client instance. The opts
table expects the following fields:
http_proxy
: an URI to a proxy server to be used with HTTP requestshttp_proxy_authorization
: a defaultProxy-Authorization
header value to be used withhttp_proxy
, e.g.Basic ZGVtbzp0ZXN0
, which will be overriden if theProxy-Authorization
request header is present.https_proxy
: an URI to a proxy server to be used with HTTPS requestshttps_proxy_authorization
: ashttp_proxy_authorization
but for use withhttps_proxy
(since with HTTPS the authorisation is done when connecting, this one cannot be overridden by passing theProxy-Authorization
request header).no_proxy
: a comma separated list of hosts that should not be proxied.
Note that this method has no effect when using the deprecated TCP only connect connection syntax.
get_reused_times
syntax: times, err = httpc:get_reused_times()
See OpenResty docs.
close
syntax: ok, err = httpc:close()
See OpenResty docs.
Requesting
request
syntax: res, err = httpc:request(params)
Sends an HTTP request over an already established connection. Returns a res
table or nil
and an error message.
The params
table expects the following fields:
version
: The HTTP version number. Defaults to1.1
.method
: The HTTP method string. Defaults toGET
.path
: The path string. Defaults to/
.query
: The query string, presented as either a literal string or Lua table..headers
: A table of request headers.body
: The request body as a string, a table of strings, or an iterator function yielding strings until nil when exhausted. Note that you must specify aContent-Length
for the request body, or specifyTransfer-Encoding: chunked
and have your function implement the encoding. See also: get_client_body_reader).
When the request is successful, res
will contain the following fields:
status
: The status code.reason
: The status reason phrase.headers
: A table of headers. Multiple headers with the same field name will be presented as a table of values.has_body
: A boolean flag indicating if there is a body to be read.body_reader
: An iterator function for reading the body in a streaming fashion.read_body
: A method to read the entire body into a string.read_trailers
: A method to merge any trailers underneath the headers, after reading the body.
If the response has a body, then before the same connection can be used for another request, you must read the body using read_body
or body_reader
.
request_uri
syntax: res, err = httpc:request_uri(uri, params)
The single-shot interface (see usage). Since this method performs an entire end-to-end request, options specified in the params
can include anything found in both connect and request documented above. Note also that fields path
, and query
, in params
will override relevant components of the uri
if specified (scheme
, host
, and port
will always be taken from the uri
).
There are 3 additional parameters for controlling keepalives:
keepalive
: Set tofalse
to disable keepalives and immediately close the connection. Defaults totrue
.keepalive_timeout
: The maximal idle timeout (ms). Defaults tolua_socket_keepalive_timeout
.keepalive_pool
: The maximum number of connections in the pool. Defaults tolua_socket_pool_size
.
If the request is successful, res
will contain the following fields:
status
: The status code.headers
: A table of headers.body
: The entire response body as a string.
request_pipeline
syntax: responses, err = httpc:request_pipeline(params)
This method works as per the request method above, but params
is instead a nested table of parameter tables. Each request is sent in order, and responses
is returned as a table of response handles. For example:
local responses = httpc:request_pipeline({
{ path = "/b" },
{ path = "/c" },
{ path = "/d" },
})
for _, r in ipairs(responses) do
if not r.status then
ngx.log(ngx.ERR, "socket read error")
break
end
ngx.say(r.status)
ngx.say(r:read_body())
end
Due to the nature of pipelining, no responses are actually read until you attempt to use the response fields (status / headers etc). And since the responses are read off in order, you must read the entire body (and any trailers if you have them), before attempting to read the next response.
Note this doesn't preclude the use of the streaming response body reader. Responses can still be streamed, so long as the entire body is streamed before attempting to access the next response.
Be sure to test at least one field (such as status) before trying to use the others, in case a socket read error has occurred.
Response
res.body_reader
The body_reader
iterator can be used to stream the response body in chunk sizes of your choosing, as follows:
local reader = res.body_reader
local buffer_size = 8192
repeat
local buffer, err = reader(buffer_size)
if err then
ngx.log(ngx.ERR, err)
break
end
if buffer then
-- process
end
until not buffer
If the reader is called with no arguments, the behaviour depends on the type of connection. If the response is encoded as chunked, then the iterator will return the chunks as they arrive. If not, it will simply return the entire body.
Note that the size provided is actually a maximum size. So in the chunked transfer case, you may get buffers smaller than the size you ask, as a remainder of the actual encoded chunks.
res:read_body
syntax: body, err = res:read_body()
Reads the entire body into a local string.
res:read_trailers
syntax: res:read_trailers()
This merges any trailers underneath the res.headers
table itself. Must be called after reading the body.
Utility
parse_uri
syntax: local scheme, host, port, path, query? = unpack(httpc:parse_uri(uri, query_in_path?))
This is a convenience function allowing one to more easily use the generic interface, when the input data is a URI.
As of version 0.10
, the optional query_in_path
parameter was added, which specifies whether the querystring is to be included in the path
return value, or separately as its own return value. This defaults to true
in order to maintain backwards compatibility. When set to false
, path
will only include the path, and query
will contain the URI args, not including the ?
delimiter.
get_client_body_reader
syntax: reader, err = httpc:get_client_body_reader(chunksize?, sock?)
Returns an iterator function which can be used to read the downstream client request body in a streaming fashion. You may also specify an optional default chunksize (default is 65536
), or an already established socket in
place of the client request.
Example:
local req_reader = httpc:get_client_body_reader()
local buffer_size = 8192
repeat
local buffer, err = req_reader(buffer_size)
if err then
ngx.log(ngx.ERR, err)
break
end
if buffer then
-- process
end
until not buffer
This iterator can also be used as the value for the body field in request params, allowing one to stream the request body into a proxied upstream request.
local client_body_reader, err = httpc:get_client_body_reader()
local res, err = httpc:request({
path = "/helloworld",
body = client_body_reader,
})
Deprecated
These features remain for backwards compatability, but may be removed in future releases.
TCP only connect
The following versions of the connect
method signature are deprecated in favour of the single table
argument documented above.
syntax: ok, err = httpc:connect(host, port, options_table?)
syntax: ok, err = httpc:connect("unix:/path/to/unix.sock", options_table?)
NOTE: the default pool name will only incorporate IP and port information so is unsafe to use in case of SSL and/or Proxy connections. Specify your own pool or, better still, do not use these signatures.
connect_proxy
syntax: ok, err = httpc:connect_proxy(proxy_uri, scheme, host, port, proxy_authorization)
Calling this method manually is no longer necessary since it is incorporated within connect. It is retained for now for compatibility with users of the older TCP only connect syntax.
Attempts to connect to the web server through the given proxy server. The method accepts the following arguments:
proxy_uri
- Full URI of the proxy server to use (e.g.http://proxy.example.com:3128/
). Note: Onlyhttp
protocol is supported.scheme
- The protocol to use between the proxy server and the remote host (http
orhttps
). Ifhttps
is specified as the scheme,connect_proxy()
makes aCONNECT
request to establish a TCP tunnel to the remote host through the proxy server.host
- The hostname of the remote host to connect to.port
- The port of the remote host to connect to.proxy_authorization
- TheProxy-Authorization
header value sent to the proxy server viaCONNECT
when thescheme
ishttps
.
If an error occurs during the connection attempt, this method returns nil
with a string describing the error. If the connection was successfully established, the method returns 1
.
There's a few key points to keep in mind when using this api:
- If the scheme is
https
, you need to perform the TLS handshake with the remote server manually using thessl_handshake()
method before sending any requests through the proxy tunnel. - If the scheme is
http
, you need to ensure that the requests you send through the connections conforms to RFC 7230 and especially Section 5.3.2. which states that the request target must be in absolute form. In practice, this means that when you usesend_request()
, thepath
must be an absolute URI to the resource (e.g.http://example.com/index.html
instead of just/index.html
).
ssl_handshake
syntax: session, err = httpc:ssl_handshake(session, host, verify)
Calling this method manually is no longer necessary since it is incorporated within connect. It is retained for now for compatibility with users of the older TCP only connect syntax.
See OpenResty docs.
proxy_request / proxy_response
These two convenience methods were intended simply to demonstrate a common use case of implementing reverse proxying, and the author regrets their inclusion in the module. Users are encouraged to roll their own rather than depend on these functions, which may be removed in a subsequent release.
proxy_request
syntax: local res, err = httpc:proxy_request(request_body_chunk_size?)
Performs a request using the current client request arguments, effectively proxying to the connected upstream. The request body will be read in a streaming fashion, according to request_body_chunk_size
(see documentation on the client body reader below).
proxy_response
syntax: httpc:proxy_response(res, chunksize?)
Sets the current response based on the given res
. Ensures that hop-by-hop headers are not sent downstream, and will read the response according to chunksize
(see documentation on the body reader above).
Author
James Hurst [email protected], with contributions from @hamishforbes, @Tieske, @bungle et al.
Licence
This module is licensed under the 2-clause BSD license.
Copyright (c) James Hurst [email protected]
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
More Resourcesto explore the angular.
mail [email protected] to add your project or resources here 🔥.
- 1Torch | Scientific computing for LuaJIT.
http://torch.ch/
Torch is a scientific computing framework for LuaJIT.
- 2OpenResty
https://github.com/openresty
A Fast and Scalable Web Platform by Extending NGINX with LuaJIT. Commercial support is provided at https://openresty.com/ - OpenResty
- 3Build software better, together
https://github.com/fperrad/lua-MessagePack
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects.
- 4Concurrency oriented programming in Lua
https://github.com/lefcha/concurrentlua
Concurrency oriented programming in Lua. Contribute to lefcha/concurrentlua development by creating an account on GitHub.
- 5LPeg version 1.0 Parser in pure LuaJIT
https://github.com/sacek/LPegLJ
LPeg version 1.0 Parser in pure LuaJIT. Contribute to sacek/LPegLJ development by creating an account on GitHub.
- 6New maintainer at: https://github.com/lunarmodules/lualogging
https://github.com/Neopallium/lualogging
New maintainer at: https://github.com/lunarmodules/lualogging - Neopallium/lualogging
- 7Archives of the Kepler Project
https://github.com/keplerproject
Public Archives of various modules created by the Kepler Project from 2003 to 2009. For up-to-date Lua modules, check out LuaRocks and the Lunar Modules project - Archives of the Kepler Project
- 8JSON parser/encoder for Lua Parses JSON using LPEG for speed and flexibility. Depending on parser/encoder options, various values are preserved as best as possible.
https://github.com/harningt/luajson
JSON parser/encoder for Lua Parses JSON using LPEG for speed and flexibility. Depending on parser/encoder options, various values are preserved as best as possible. - harningt/luajson
- 9A lightweight, dependency-free library for binding Lua to C++
https://github.com/vinniefalco/LuaBridge
A lightweight, dependency-free library for binding Lua to C++ - vinniefalco/LuaBridge
- 10Free Cross-Platform 2D Game Engine
https://coronalabs.com/
Corona is a 2D engine lets you build games & apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free toolset!
- 11A copy of the Lua development repository, as seen by the Lua team. Mirrored irregularly. Please DO NOT send pull requests or any other stuff. All communication should be through the Lua mailing list https://www.lua.org/lua-l.html
https://github.com/lua/lua
A copy of the Lua development repository, as seen by the Lua team. Mirrored irregularly. Please DO NOT send pull requests or any other stuff. All communication should be through the Lua mailing lis...
- 12A lightweight JSON library for Lua
https://github.com/rxi/json.lua
A lightweight JSON library for Lua. Contribute to rxi/json.lua development by creating an account on GitHub.
- 13A Lua-based Build Tool
https://github.com/stevedonovan/Lake
A Lua-based Build Tool. Contribute to stevedonovan/Lake development by creating an account on GitHub.
- 14Feature-rich command line parser for Lua
https://github.com/mpeterv/argparse
Feature-rich command line parser for Lua. Contribute to mpeterv/argparse development by creating an account on GitHub.
- 15Lua code analysis, with plugins for HTML and SciTE
https://github.com/davidm/lua-inspect
Lua code analysis, with plugins for HTML and SciTE - davidm/lua-inspect
- 16Auto-swaps changed Lua files in a running LÖVE project
https://github.com/rxi/lurker
Auto-swaps changed Lua files in a running LÖVE project - rxi/lurker
- 17Remote debugger for Lua.
https://github.com/pkulchenko/MobDebug
Remote debugger for Lua. Contribute to pkulchenko/MobDebug development by creating an account on GitHub.
- 18Asynchronous logging library for Lua
https://github.com/moteus/lua-log
Asynchronous logging library for Lua. Contribute to moteus/lua-log development by creating an account on GitHub.
- 19luaproc is a concurrent programming library for Lua
https://github.com/askyrme/luaproc
luaproc is a concurrent programming library for Lua - askyrme/luaproc
- 20A redis client for lua
https://github.com/daurnimator/lredis
A redis client for lua. Contribute to daurnimator/lredis development by creating an account on GitHub.
- 21Lua Users Foundation
https://github.com/lua-users-foundation
Lua Users Foundation has 2 repositories available. Follow their code on GitHub.
- 22Date & Time module for Lua 5.x
https://github.com/Tieske/date
Date & Time module for Lua 5.x. Contribute to Tieske/date development by creating an account on GitHub.
- 23:rocket: Pegasus.lua is an http server to work with web applications written in Lua language.
https://github.com/EvandroLG/pegasus.lua
:rocket: Pegasus.lua is an http server to work with web applications written in Lua language. - EvandroLG/pegasus.lua
- 24A self contained Lua MessagePack C implementation.
https://github.com/antirez/lua-cmsgpack
A self contained Lua MessagePack C implementation. - antirez/lua-cmsgpack
- 25Automatically exported from code.google.com/p/llvm-lua
https://github.com/neopallium/llvm-lua
Automatically exported from code.google.com/p/llvm-lua - Neopallium/llvm-lua
- 26Fork of LuaCrypto, which enables encryption and decryption through OpenSSL
https://github.com/mkottman/luacrypto
Fork of LuaCrypto, which enables encryption and decryption through OpenSSL - mkottman/luacrypto
- 27A pure c# implementation of Lua 5.2 focus on compatibility with Unity
https://github.com/xebecnan/UniLua
A pure c# implementation of Lua 5.2 focus on compatibility with Unity - xebecnan/UniLua
- 28Digital Estate Planning: The Game
https://github.com/hawkthorne/hawkthorne-journey
Digital Estate Planning: The Game. Contribute to hawkthorne/hawkthorne-journey development by creating an account on GitHub.
- 29Lua CJSON is a fast JSON encoding/parsing module for Lua
https://github.com/mpx/lua-cjson/
Lua CJSON is a fast JSON encoding/parsing module for Lua - mpx/lua-cjson
- 30Go bindings for Lua C API - in progress
https://github.com/aarzilli/golua
Go bindings for Lua C API - in progress. Contribute to aarzilli/golua development by creating an account on GitHub.
- 31Lua binding to libzip.
https://github.com/brimworks/lua-zip
Lua binding to libzip. Contribute to brimworks/lua-zip development by creating an account on GitHub.
- 32SAX-like streaming XML parser for Lua
https://github.com/Phrogz/SLAXML
SAX-like streaming XML parser for Lua. Contribute to Phrogz/SLAXML development by creating an account on GitHub.
- 33Lanes is a lightweight, native, lazy evaluating multithreading library for Lua 5.1 to 5.4.
https://github.com/LuaLanes/lanes
Lanes is a lightweight, native, lazy evaluating multithreading library for Lua 5.1 to 5.4. - LuaLanes/lanes
- 34Utility library for functional programming in Lua
https://github.com/Yonaba/Moses
Utility library for functional programming in Lua - Yonaba/Moses
- 35Lua Fun is a high-performance functional programming library for Lua designed with LuaJIT's trace compiler in mind.
https://github.com/luafun/luafun
Lua Fun is a high-performance functional programming library for Lua designed with LuaJIT's trace compiler in mind. - luafun/luafun
- 36Standalone FFI library for calling C functions from lua. Compatible with the luajit FFI interface.
https://github.com/jmckaskill/luaffi
Standalone FFI library for calling C functions from lua. Compatible with the luajit FFI interface. - jmckaskill/luaffi
- 37StackTracePlus provides enhanced stack traces for Lua.
https://github.com/ignacio/StackTracePlus
StackTracePlus provides enhanced stack traces for Lua. - ignacio/StackTracePlus
- 38A lua-based Pac-Man clone.
https://github.com/tylerneylon/pacpac
A lua-based Pac-Man clone. Contribute to tylerneylon/pacpac development by creating an account on GitHub.
- 39ANSI terminal color manipulation for Lua.
https://github.com/kikito/ansicolors.lua
ANSI terminal color manipulation for Lua. Contribute to kikito/ansicolors.lua development by creating an account on GitHub.
- 40Embedded Lua templates
https://github.com/leafo/etlua
Embedded Lua templates. Contribute to leafo/etlua development by creating an account on GitHub.
- 41Reactive Extensions for Lua
https://github.com/bjornbytes/RxLua
Reactive Extensions for Lua. Contribute to bjornbytes/RxLua development by creating an account on GitHub.
- 42File system path manipulation library
https://github.com/moteus/lua-path
File system path manipulation library. Contribute to moteus/lua-path development by creating an account on GitHub.
- 43Lua binding to ZeroMQ
https://github.com/zeromq/lzmq
Lua binding to ZeroMQ. Contribute to zeromq/lzmq development by creating an account on GitHub.
- 44Lua bindings for POSIX APIs
https://github.com/luaposix/luaposix
Lua bindings for POSIX APIs. Contribute to luaposix/luaposix development by creating an account on GitHub.
- 45Lightweight Lua test framework
https://github.com/bjornbytes/lust
Lightweight Lua test framework. Contribute to bjornbytes/lust development by creating an account on GitHub.
- 46A tool for linting and static analysis of Lua code.
https://github.com/mpeterv/luacheck
A tool for linting and static analysis of Lua code. - GitHub - mpeterv/luacheck: A tool for linting and static analysis of Lua code.
- 47A fast, lightweight tweening library for Lua
https://github.com/rxi/flux
A fast, lightweight tweening library for Lua. Contribute to rxi/flux development by creating an account on GitHub.
- 48Fast, lightweight and easy-to-use pathfinding library for grid-based games
https://github.com/Yonaba/Jumper
Fast, lightweight and easy-to-use pathfinding library for grid-based games - Yonaba/Jumper
- 49Opinionated Lua RabbitMQ client library for the ngx_lua apps based on the cosocket API
https://github.com/wingify/lua-resty-rabbitmqstomp
Opinionated Lua RabbitMQ client library for the ngx_lua apps based on the cosocket API - wingify/lua-resty-rabbitmqstomp
- 50Build a standalone executable from a Lua program.
https://github.com/ers35/luastatic
Build a standalone executable from a Lua program. Contribute to ers35/luastatic development by creating an account on GitHub.
- 51Human-readable representation of Lua tables
https://github.com/kikito/inspect.lua
Human-readable representation of Lua tables. Contribute to kikito/inspect.lua development by creating an account on GitHub.
- 52Lexing & Syntax Highlighting in Lua (using LPeg)
https://github.com/xolox/lua-lxsh
Lexing & Syntax Highlighting in Lua (using LPeg). Contribute to xolox/lua-lxsh development by creating an account on GitHub.
- 53Pure Lua Cassandra client using CQL binary protocol
https://github.com/jbochi/lua-resty-cassandra
Pure Lua Cassandra client using CQL binary protocol - jbochi/lua-resty-cassandra
- 5430 lines library for object orientation in Lua
https://github.com/Yonaba/30log
30 lines library for object orientation in Lua. Contribute to Yonaba/30log development by creating an account on GitHub.
- 55LibYAML binding for Lua.
https://github.com/gvvaughan/lyaml
LibYAML binding for Lua. Contribute to gvvaughan/lyaml development by creating an account on GitHub.
- 56A very complete i18n lib for Lua
https://github.com/kikito/i18n.lua
A very complete i18n lib for Lua. Contribute to kikito/i18n.lua development by creating an account on GitHub.
- 57A Lua 5.3 parser written with LPegLabel
https://github.com/andremm/lua-parser
A Lua 5.3 parser written with LPegLabel. Contribute to andremm/lua-parser development by creating an account on GitHub.
- 58A Lua MVC Web Framework.
https://github.com/sailorproject/sailor
A Lua MVC Web Framework. Contribute to sailorproject/sailor development by creating an account on GitHub.
- 59Intellisense and Linting for Lua in VSCode
https://github.com/trixnz/vscode-lua
Intellisense and Linting for Lua in VSCode. Contribute to trixnz/vscode-lua development by creating an account on GitHub.
- 60Lua binding to libcurl
https://github.com/Lua-cURL/Lua-cURLv3
Lua binding to libcurl. Contribute to Lua-cURL/Lua-cURLv3 development by creating an account on GitHub.
- 61Time, Date and Timezone library for lua
https://github.com/daurnimator/luatz
Time, Date and Timezone library for lua. Contribute to daurnimator/luatz development by creating an account on GitHub.
- 62Lua library for conversion between markup formats
https://github.com/jgm/lunamark
Lua library for conversion between markup formats. Contribute to jgm/lunamark development by creating an account on GitHub.
- 63Nginx image processing server with OpenResty and Lua
http://leafo.net/posts/creating_an_image_server.html
Today I'll be showing you how to create a fast on the fly image processing server. The whole system can be created in less than 100 lines of code. We'll be using OpenResty , an enhanced distribution of Nginx. We'll also need to write a...
- 64ProFi, a simple lua profiler that works with LuaJIT and prints a pretty report file in columns.
https://gist.github.com/perky/2838755
ProFi, a simple lua profiler that works with LuaJIT and prints a pretty report file in columns. - ProFi.lua
- 65Batteries included Lua
https://github.com/tongson/omnia
Batteries included Lua. Contribute to tongson/omnia development by creating an account on GitHub.
- 66An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices
https://github.com/koreader/koreader
An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices - koreader/koreader
- 67Tweening/Easing/Interpolating functions for lua. Inspired on jQuery's animate method.
https://github.com/kikito/tween.lua
Tweening/Easing/Interpolating functions for lua. Inspired on jQuery's animate method. - kikito/tween.lua
- 68Lua redis client driver for the ngx_lua based on the cosocket API
https://github.com/openresty/lua-resty-redis
Lua redis client driver for the ngx_lua based on the cosocket API - openresty/lua-resty-redis
- 69Technews.fr - High Tech, Tests, et Tutos
http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_For_Windows/lanes/comparison.html
Technews.fr est un blog High Tech avec des tests, des avis ou encore des tutos branché innovation et objets connectés. La technologie est le fil conducteur de tous les articles et l’œil critique est de rigueur.
- 70Lua string hashing library, useful for internationalization
https://github.com/Olivine-Labs/say
Lua string hashing library, useful for internationalization - lunarmodules/say
- 71An interpreter for the Lua language, written entirely in C# for the .NET, Mono, Xamarin and Unity3D platforms, including handy remote debugger facilities.
https://github.com/xanathar/moonsharp
An interpreter for the Lua language, written entirely in C# for the .NET, Mono, Xamarin and Unity3D platforms, including handy remote debugger facilities. - moonsharp-devs/moonsharp
- 72Network support for the Lua language
https://github.com/diegonehab/luasocket
Network support for the Lua language. Contribute to lunarmodules/luasocket development by creating an account on GitHub.
- 73A command-line argument parsing module for Lua.
https://github.com/amireh/lua_cliargs
A command-line argument parsing module for Lua. Contribute to lunarmodules/lua_cliargs development by creating an account on GitHub.
- 74A set of pure Lua libraries focusing on input data handling (such as reading configuration files), functional programming (such as map, reduce, placeholder expressions,etc), and OS path management. Much of the functionality is inspired by the Python standard libraries.
https://github.com/stevedonovan/Penlight
A set of pure Lua libraries focusing on input data handling (such as reading configuration files), functional programming (such as map, reduce, placeholder expressions,etc), and OS path management....
- 75Lua HTTP client cosocket driver for OpenResty / ngx_lua.
https://github.com/pintsized/lua-resty-http
Lua HTTP client cosocket driver for OpenResty / ngx_lua. - ledgetech/lua-resty-http
- 76Assertion library for Lua
https://github.com/Olivine-Labs/luassert
Assertion library for Lua. Contribute to lunarmodules/luassert development by creating an account on GitHub.
- 77An RFC compliant and ESI capable HTTP cache for Nginx / OpenResty, backed by Redis
https://github.com/pintsized/ledge
An RFC compliant and ESI capable HTTP cache for Nginx / OpenResty, backed by Redis - ledgetech/ledge
Related Articlesto learn about angular.
- 1Getting Started with Lua: Beginner's Guide to Scripting
- 2Understanding Lua Tables: Heart of Lua Programming
- 3Game Development with Lua: Building Your First 2D Game
- 4Using Lua for Scripting in Game Engines: Roblox and Corona SDK
- 5Embedding Lua in C/C++ Applications: A Step-by-Step Guide
- 6Building Extensible Software with Lua: Adding Scripting Capabilities to Existing Apps
- 7Optimizing Lua Scripts: Techniques for Speed and Efficiency
- 8Memory Management in Lua: Avoiding Common Pitfalls
- 9Top Lua Libraries for Game Development, Web, and Scripting
- 10Building Web Applications with Lua: OpenResty
FAQ'sto learn more about Angular JS.
mail [email protected] to add more queries here 🔍.
- 1
how popular is lua programming language
- 2
what kind of programming language is lua
- 3
what type of programming language is lua
- 4
are lua and python similar
- 5
what is lua coding used for
- 6
how to make a programming language in lua
- 7
how to code lua
- 8
are lua and javascript similar
- 9
when was lua created
- 10
is lua a programming language
- 11
who created lua programming language
- 12
- 13
what can you do with lua programming
- 14
what is lua programming
- 15
how long does it take to learn lua scripting
- 16
is lua a coding language
- 17
what is lua programming language
- 18
should i learn lua or python
- 19
should i learn lua
- 20
where to learn lua coding
- 21
can lua files be dangerous
- 22
when was lua made
- 23
is roblox lua object oriented programming
- 24
when was lua invented
- 25
does lua compile
- 26
what programming language is similar to lua
- 27
who invented lua
- 28
why use lua programming language
- 29
how hard is lua programming
- 30
can lua be compiled
- 32
what is the lua programming language
- 33
where to learn lua for free
- 34
where can i learn lua
- 35
where is lua programming language used
- 36
is lua programming language
- 38
can lua be used for hacking
- 39
how to learn lua programming
- 40
what does lua stand for programming
- 41
how to learn lua programming language
- 42
what is the lua programming language used for
- 43
is lua the best programming language
- 44
who made lua language
- 45
why is lua used
- 47
what is lua programming language used for
- 48
who created lua
- 49
how long does it take to learn lua coding
- 50
is lua a good programming language
- 51
where is lua used
- 52
why is lua used in games
- 53
what can lua be used for
- 54
how to pronounce lua programming language
- 55
what is lua programming used for
- 56
is lua the easiest programming language
- 57
can lua be used for web development
- 58
was lua created by roblox
- 59
what programming language is lua based on
More Sitesto check out once you're finished browsing here.
https://www.0x3d.site/
0x3d is designed for aggregating information.
https://nodejs.0x3d.site/
NodeJS Online Directory
https://cross-platform.0x3d.site/
Cross Platform Online Directory
https://open-source.0x3d.site/
Open Source Online Directory
https://analytics.0x3d.site/
Analytics Online Directory
https://javascript.0x3d.site/
JavaScript Online Directory
https://golang.0x3d.site/
GoLang Online Directory
https://python.0x3d.site/
Python Online Directory
https://swift.0x3d.site/
Swift Online Directory
https://rust.0x3d.site/
Rust Online Directory
https://scala.0x3d.site/
Scala Online Directory
https://ruby.0x3d.site/
Ruby Online Directory
https://clojure.0x3d.site/
Clojure Online Directory
https://elixir.0x3d.site/
Elixir Online Directory
https://elm.0x3d.site/
Elm Online Directory
https://lua.0x3d.site/
Lua Online Directory
https://c-programming.0x3d.site/
C Programming Online Directory
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
https://r-programming.0x3d.site/
R Programming Online Directory
https://perl.0x3d.site/
Perl Online Directory
https://java.0x3d.site/
Java Online Directory
https://kotlin.0x3d.site/
Kotlin Online Directory
https://php.0x3d.site/
PHP Online Directory
https://react.0x3d.site/
React JS Online Directory
https://angular.0x3d.site/
Angular JS Online Directory