The Native Client game engine powered by Lua
Fork me on GitHub

Aroma is game creation framework that targets Chrome’s Native Client. It lets you create games in the Lua programming language that can be be distributed through the Chrome Web Store.

Demo Games

NaCl Tetris

How It Works

Native Client files are distributed as .nexe binaries where are compiled for both 64-bit and 32-bit computers. Aroma comes as a compiled .nexe file that’s ready to use after uploading to your server. All you need to do is upload your game alongside Aroma.

Reusing Your Browser

In order to keep the .nexe binary small, Aroma reuses your browser to accomplish many tasks without depending on additional libraries. Things like rendering fonts and decoding images are handled by the canvas tag. The loading of game resources is transparently turned into HTTP requests to your sever.

Asynchronous Loading

Aroma loads all of your game code from the web. You typically will upload your code alongside Aroma’s .nexe and .js files. This enables you to quickly deploy changes without having to recompile anything.

If you've ever done web programming you're probably familiar with making asynchronous requests to a server to fetch resources by providing some sort of a callback function. On the other hand, when loading code in Lua you typically write something synchronous like:

require "mygame.enemy"

Aroma translates this call into an asynchronous request to the browser, blocking the execution of the game until the resource has been fetched. Combined with the caching provided by the browser, this makes loading code from the web pleasant.

Aroma also has the ability to batch asynchronous requests together in order to perform them faster.


Aroma implements parts of the LÖVE Lua API, so if you've got a game already written it’s easy to port.

Get Started Today

Aroma is early in development but ready for testing. Get started with the following resources: