The begining

Since I was young, I was always passionate about computers and crazy about efficiency. I love software development and computing technology. I started with Windows 3.1 and DOS when I was 5 years old. I coded in C/C++ some little funny games and tools on Windows 95 and 98 around 7. During high school, I started to learn Ruby, Python, Perl and Java, and I used to play with Metasploit.

After not very exciting studies in science, I decided to stop wasting my time and start my own business in cyber security to work on a variety of exciting side projects.

During a rainy day in November 2016, I was working on one of them, FortressJS, an I/O NodeJS framework focused on speed and security. I’m huge fan of JS because it’s very versatile and perfect for prototyping.

On this particular project I was testing different solutions to package an app with my framework, like Nexe, JXCore or EncloseJS.

I discovered that a lot of developers were searching, as I did, how to package a JS app. Nexe or EncloseJS can’t compile JS; they generate bytecode with V8 engine. Furthermore, they’re not fully compatible with NodeJS. Regarding JXCore, the project was dead.

Aside from packaging, http benchmarks had shown that NodeJS wasn’t as fast as compiled languages. I made many technological tests to see what was the most efficient thing to achieve both packing and efficiency.

I finally found Crystal. Crystal is a Ruby-like compiler, based on LLVM, that is really fast. On http benchmark, it’s clearly faster that NodeJS. 2 solutions were possible for me:

Re-code my app in Crystal or Go

Try to compile JS

Crystal is fast and awesome, but it’s not fully cross platform. I love Ruby’s syntax, but NodeJS ecosystem is gigantic, and JS is everywhere. Regarding Go, it’s an awesome language and ecosystem, but I’m not as much as a fan as I am of JS.

The second solution seemed crazy to me, but it sounded like a passionate challenge: compiling JS.