As part of my web development learning journey, I came across many and many features to build but I always kept one thing in mind: use as few external libraries, frameworks and other dependencies as possible. Therefore, aemiJS comes with no dependencies, it is written in vanilla and modern JavaScript and actively developed to support NodeJS, EcmaScript Modules and later NodeJS ES Modules syntax in addition to Deno Modules.

AemiJS is structured as a Git repository with long-living branch. Actually, it includes es-module and node-module only. Each branch includes as much features as possible from every other unless there is no good reason or no compatibility at all, i.e. DOM features has nothing to do in Node branch. However, some features have to be tweaked according to their running environment (as below ExtendedWorker, Dataset or Utils#getUID method).


ExtendedWorker is one of the main features of aemiJS. It straightforwardly consists in a wrapper for a Worker that enables transferring workload to the Worker and receive the computed result wrapped in a Promise. Nothing is more annoying that dealing with event listeners communication when you have to use efficiently Workers. To do so, you just have to include the Multithread-worker.js script in constructor arguments or via importScripts in the Worker file. Also, the ExtendedWorker truly enhances worker usage experience by allowing passing worker content directly in ExtendedWorker constructor. What could be more appealing than that?

However, Node already gives the ability to pass worker content through the constructor but aemiJS provides the Promise feature through ExtendedWorker even in Node. So, still a big deal.


AemiJS also tries to deal with big amounts of data and in this way provides a basic Dataset Handler primarily designed to ease preprocessing of datas for machine learning. This feature is still in early stages of development but could be really helpful.

Element Creation Shorthand

Once upon a time, web developers used to write raw HTML. But not anymore, you could use Vue, React or Angular and spend quite a lot of time to understand and learn these frameworks or you could also just use… ecs. What is that? Just a tiny shorthand for Element creation. It accepts whatever you could insert in a HTML raw code but you can also directly insert EventListeners, dynamic attributes or make your element children depend on Promise resolution. Being on JavaScript side allows also to benefit of everything the language provides. So, it’s easier to use and less demanding.

Other stuffs

AemiJS also provides: