Why I am Re-Inventing HTML?

The story of MEML’s design, and purpose.

Kai Lyons
3 min readJan 22, 2021

Let’s first run down what MEML is for the billions in the world who does not know what MEML is. MEML is a personal project of mine to replace HTML with a Lisp-like syntactical markup language.

Here is a rundown of its design:

As you can see, it’s basically simplified HTML and takes a lot of inspiration from Pug.js and Common Lisp. Now, this is NOT the first time I tried to re-invent HTML. About ten months ago, I tried doing the same thing but originally tried to keep it very similar to HTML. I called it Ruskko.

Ruskko originally was not even supposed to replace HTML, instead, it was a half-assed version of something like React. Now I ended up abandoning Ruskko for two reasons:
1. My original GitHub account had a 2FA issue.
2. Ruskko was inherently a stupid idea.

Now, after refining the idea of Ruskko to be a separate language heavily inspired, I wanted to turn it into a different syntax. Before Ruskko, this idea was fully designed at one point, but I ended up scrapping it for what later becomes MEML.

Now, why did I scrap this design? Well, a couple of reasons. Firstly, the syntax didn’t resemble what I wanted for an HTML replacement: minimal. While it LOOKS minimal and is a lot more minimal than normal HTML which is verbose as all hell, it didn’t fit my requirements.

While I wanted it to be minimalistic in nature, I feel like if it is too minimalistic, it becomes more difficult and a bigger pain to read. While languages like Pug.js exist, I feel like it just doesn’t work the way I need MEML to. Pug.js is the Python of the HTML world, it’s a little too simple by nature for me to use it.

An example of Pug.js in actual use

For MEML, I want something where I can write an entire page on ONE line. Like, for example, a 404 page.

MEML is designed to be flexible and easy by design. While I do not doubt that many find Pug.js, React, and HTML/CSS simple, MEML is supposed to be more readable/minimal than the competition. How is Lisp-like syntax more readable? Well, it’s debatable for some, but the purpose is to find a healthy balance between Pug.js being simple and Python-like, and HTML’s verbose but understandable, and after messing with Common Lisp for a while, I learned that I love Lisp syntax and that it would be PERFECT for an HTML replacement.

Speaking of Pug.js, MEML does take inspiration from Pug, no doubt. Especially with VARIABLES! When I saw Pug.js had variables, I knew I had to include it with this. Now, defining variables will be difficult to do in the compiler, but I have an idea of how it would work.

Now, my favorite and most loathed feature I am going to add to MEML. Electron/Neutrlino.js support. Now, how this works will be simple. You have a new attribute section. Here is an example with Electron.js:

This will create everything from installing Electron from NPM to creating the package.json, and even the main.js (or whatever you name it with electronJSFile). For Neutrlino.js, it is much the same, but there needs to be more research by me before I tell how it will be implemented.

--

--

Kai Lyons
0 Followers

Writing dumb things since I was born