
Fengari: Lua for the Browser - mabynogy
https://fengari.io/
======
krylon
TL;DR - A Lua 5.3 VM written in Javascript.

I like Lua very much, and in my mind, if the stars had been aligned just _a
little_ differently, it would now occupy the space inhabited by Javascript.

I cannot help but wonder, tough: A Lua VM implemented in Javascript? Is the
performance hit not enough to make this useless for anything beyond proof-of-
concept-sites/apps?

A Lua to Javascript compiler would have made sense. Given all the languages
you can compile to Javascript these days, it would have made sense. And in
terms of semantics, both languages are close enough that I think it would not
be _that_ big a problem.

Still, it is an impressive piece of work. Implementing a bytecode VM a) in
Javascript, b) running in the browser must make debugging rather ...
interesting.

~~~
flohofwoe
You can just take the original Lua interpreter source code and compile that to
asm.js or WebAssembly without changes. Loading dependencies from the web
requires an asynchronous reimplementation of the "require" command though, but
it's all quite trivial. The result is about 100 to 150 KByte compressed. The
only downside (beside the added size) is that the Lua code is still running
interpreted, not JITed. That's why I think that a combination of WebAssembly
for performance critical code, and Typescript (compiled to Javascript) for the
'scripting part' makes more sense than WebAssembly+Lua, since this doesn't
have those downside (no additional size overhead for the interpreter, and the
JS will be JITed).

~~~
untog
100-150KB is still quite the downside, especially when there isn't really much
of an upside for the user, who is bearing the burden of that download size.

~~~
giann
Fengari gzipped and minified is about 75kb

------
giann
I'm the author of Fengari alongside Daurnimator. Please take a look at
[https://www.youtube.com/watch?v=xrLIgmd8xik](https://www.youtube.com/watch?v=xrLIgmd8xik)
(slides:
[https://www.lua.org/wshop17/fengari.html](https://www.lua.org/wshop17/fengari.html))
for an introduction to it and an explanation as to why this approach is the
only viable one to use Lua in the browser and interact with the DOM.

------
marktangotango
This is really cool, I'd love to write frontends in Lua. For side project
backend development, I've been using Apache and mod_lua[1] (Openresty is Lua
for nginx[2]) for a couple of years now. In particular Lua with Luajit is such
a kick ass platform, I've always wondered why it hasn't gotten more attention
than it has. There are at least two high quality event loop http servers
written with it [3][4] and some quite mature web application frameworks
[5][6]. Really seems like the Lua backend story is set to explode.

[1]
[https://httpd.apache.org/docs/trunk/mod/mod_lua.html](https://httpd.apache.org/docs/trunk/mod/mod_lua.html)

[2] [https://openresty.org/en/](https://openresty.org/en/)

[3] [https://luvit.io/](https://luvit.io/)

[4] [https://github.com/daurnimator/lua-
http](https://github.com/daurnimator/lua-http)

[5] [http://leafo.net/lapis/](http://leafo.net/lapis/)

[6] [http://sailorproject.org/](http://sailorproject.org/)

~~~
chc4
Learning that itch.io is powered by Lua was pretty cool. There's a [write-up]
about how they leveraged coroutines for async programming which is super nice
to read.

iirc, Cloudflare uses mod_lua for a lot of its packet filtering stuff because
Luajit is basically magic.

write-up: [http://leafo.net/posts/itchio-and-
coroutines.html](http://leafo.net/posts/itchio-and-coroutines.html)

------
noahdesu
Links to the slides and video presentations from the Lua workshop [0] last
month, including one on Fengari [1]:

[0]: [https://www.lua.org/wshop17.html](https://www.lua.org/wshop17.html) [1]:
[https://www.youtube.com/watch?v=xrLIgmd8xik](https://www.youtube.com/watch?v=xrLIgmd8xik)

------
scardine
Lua is one of the few popular programming languages originated from the South
Hemisphere - other example is Elixir (not sure if it was also created here in
Brazil, but I think Jose Valim is Brazilian).

~~~
Willamin
While it's not as popular as Lua or Elixir yet, I believe Crystal (crystal-
lang.org) will be "the next big thing" in a few years. It's also from the
Southern Hemisphere.

------
nstat41
Would be wild if you could work FFI with webasm in here somehow

~~~
vvanders
No need to do that, you can use wasm to build lua[1], although the API
definitely needs some clean up. This looks much nicer from a JS integration
perspective.

[1]
[https://github.com/vvanders/wasm_lua](https://github.com/vvanders/wasm_lua)

~~~
chx
Hail the light! Down with the tyranny of JavaScript! This is fantastic!

------
feelin_googley
I recall lua for the browser beginning in 2001.

[http://web.archive.org/web/20010428142032/http://links.sourc...](http://web.archive.org/web/20010428142032/http://links.sourceforge.net:80/links-
lua/)

[http://web.archive.org/web/20090227050803/http://article.gma...](http://web.archive.org/web/20090227050803/http://article.gmane.org:80/gmane.comp.web.elinks/30)

[http://elinks.or.cz/documentation/html/manual.html-
chunked/c...](http://elinks.or.cz/documentation/html/manual.html-
chunked/ch14.html)

