Skip to content
This repository

Lua + libUV + jIT = pure awesomesauce

branch: master
Octocat-spinner-32 bin make luvit report building flags February 27, 2012
Octocat-spinner-32 deps bump openssl April 10, 2014
Octocat-spinner-32 examples Mixed path separators in 'example/web-app/server' on Windows. July 17, 2013
Octocat-spinner-32 include provide a fallback include/ March 03, 2012
Octocat-spinner-32 lib errors table misplaced April 09, 2014
Octocat-spinner-32 src include ssl after luv headers April 09, 2014
Octocat-spinner-32 tests fix(ssl-tests): add -tls1 to openssl commandline April 09, 2014
Octocat-spinner-32 tools changed that MSVC linker whole program optimization does not strip Lu… December 06, 2013
Octocat-spinner-32 .gitattributes Use automatic text detection for everthing not explicitly set. November 29, 2012
Octocat-spinner-32 .gitignore Libuv and luajit upgrade plus 64-bit windows support August 27, 2013
Octocat-spinner-32 .gitmodules Libuv and luajit upgrade plus 64-bit windows support August 27, 2013
Octocat-spinner-32 .travis.yml prettier March 03, 2012
Octocat-spinner-32 ChangeLog add changelog 0.7.0 October 14, 2013
Octocat-spinner-32 LICENSE.txt Use Apache 2.0 License consistently throughout luvit January 07, 2012
Octocat-spinner-32 Makefile bump openssl April 07, 2014
Octocat-spinner-32 NOTICE.txt Use Apache 2.0 License consistently throughout luvit January 07, 2012
Octocat-spinner-32 README.markdown point the travis image to the master branch April 04, 2014
Octocat-spinner-32 TODO Trim Whitespace February 23, 2014
Octocat-spinner-32 all.gyp add all target February 22, 2012
Octocat-spinner-32 api.markdown Trim Whitespace February 23, 2014
Octocat-spinner-32 cgi_parity.markdown Update CGI parity notes October 21, 2011
Octocat-spinner-32 common.gypi Libuv and luajit upgrade plus 64-bit windows support August 27, 2013
Octocat-spinner-32 configure Trim Whitespace February 23, 2014
Octocat-spinner-32 errors.markdown Trim Whitespace February 23, 2014
Octocat-spinner-32 jit deps: luajit: fix luajit build for gyp July 05, 2012
Octocat-spinner-32 luvit.gyp add luv_poll.c to gyp April 03, 2014
Octocat-spinner-32 test_shell_exec.sh comment the test script February 13, 2013
README.markdown

Luvit (Lua + libUV + jIT = pure awesomesauce)

Build Status

Luvit is an attempt to do something crazy by taking node.js' awesome architecture and dependencies and seeing how it fits in the Lua language.

This project is still under heavy development, but it's showing promise. In initial benchmarking with a hello world server, this is between 2 and 4 times faster than node.js. Version 0.5.0 is the latest release version.

Do you have a question/want to learn more? Make sure to check out the mailing list and drop by our IRC channel, #luvit on Freenode.

-- Load the http library
local HTTP = require("http")

-- Create a simple nodeJS style hello-world server
HTTP.createServer(function (req, res)
  local body = "Hello World\n"
  res:writeHead(200, {
    ["Content-Type"] = "text/plain",
    ["Content-Length"] = #body
  })
  res:finish(body)
end):listen(8080)

-- Give a friendly message
print("Server listening at http://localhost:8080/")

Building from git

Grab a copy of the source code:

git clone https://github.com/luvit/luvit.git --recursive

To use the gyp build system run:

cd luvit
git submodule update --init --recursive
./configure
make -C out
tools/build.py test
./out/Debug/luvit

To use the Makefile build system (for embedded systems without python) run:

cd luvit
make
make test
./build/luvit

Debugging

Luvit contains an extremely useful debug API. Lua contains a stack which is used to manipulate the virtual machine and return values to 'C'. It is often very useful to display this stack to aid in debugging. In fact, this API is accessible via C or from Lua.

Stackwalk

require('_debug').stackwalk(errorString)

Displays a backtrace of the current Lua state. Useful when an error happens and you want to get a call stack.

example output:

Lua stack backtrace: error
    in Lua code at luvit/tests/test-crypto.lua:69 fn()
    in Lua code at luvit/lib/luvit/module.lua:67 myloadfile()
    in Lua code at luvit/lib/luvit/luvit.lua:285 (null)()
    in native code
    in Lua code at luvit/lib/luvit/luvit.lua:185 (null)()
    in native code
    in Lua code at [string "    local path = require('uv_native').execpat..."]:1 (null)()

Stackdump

require('_debug').stackdump(string)
luv_lua_debug_stackdump(L, "a message");

Stackdump is extremly useful from within C modules.

Debugger

require('_debug').debugger()

Supports the following commands:

  • quit
  • exit
  • break
  • clear
  • clearall
  • trace
  • bt

The debugger will execute any arbitrary Lua statement by default.

Something went wrong with that request. Please try again.