---
title: "Xeact 0.0.69: A Revolutionary Femtoframework For High Efficiency JavaScript Development"
date: 2021-11-18
tags:
- javascript
- framework
- satire
- xeact
---
[Writing JavaScript is so lame. All the tools require me to do so much bullshit
to get them to even compile. I shouldn't need to compile JavaScript to
JavaScript in order to deploy stuff to a webpage. I don't want to give Facebook
a grant to any patents I end up creating. How did it get this bad? I wish there
was something easier!](conversation://Cadey/coffee)
Is this you? Have you wished for something like this? Your prayers have been
answered! Keep reading this post to learn more about this revolutionary set of
tools that let you scale up and down as you need to.
At Xeserv we strive to make solid advances forward that allow you to keep your
focus on what matters: your life and more importantly your production
applications. As a part of this mission, we have created a groundbreaking,
revolutionary femtoframework called [Xeact](https://github.com/Xe/Xeact)
([npm](https://www.npmjs.com/package/@xeserv/xeact)).
Xeact is a high performance, developer-efficient and overall ballin'
femtoframework for productive development in Javascript. It will take everything
that is complicated about frontend web development and throw it in the trash.
Don't trust this random webpage? You don't have to! Let's see it in action with
some testimonials that were collected from committed users of this amazing
framework:
```html
Loading...
```
Then you can import it from either
[unpkg](https://unpkg.com/@xeserv/xeact@0.0.69/xeact.js) or a local copy:
```javascript
import { g } from "/static/js/xeact.min.js";
const shuf = (arr) => {
var rand, temp, i;
for (i = arr.length - 1; i > 0; i -= 1) {
rand = Math.floor((i + 1) * Math.random());
temp = arr[rand];
arr[rand] = arr[i];
arr[i] = temp;
}
return arr;
};
const testimonials = shuf([
"It Works™",
"It shouldn't crash until the heat death of the universe",
"A necessary addition to your tech stack",
"Completely revolutionized our deployment cycle",
"Our engineering team was blown away; versatile, powerful, constantly updated. It's everything we wanted and more",
"Daunting at first, but works right out of the box, with great documentation and amazing support",
"With a small footprint and big impact, this is a definite game changer",
"Something something kill child before killing parent joke",
"Made with Rust",
"Reliable, Secure, Good performance, Easy to use UI/UX, High throughput",
"It doesn't stalk me as much as the competitors!",
"this software created synergy i didn't think was possible",
"easy to use and it respects your privacy",
"this software's cloud backend has only been hacked twice this year",
"please, they have my wife and kids; i want to see them again",
"The third best femtoframework available on the market"
]);
let i = 0;
const update = () => {
i++;
i = i % testimonials.length;
g("testimonial").innerText = testimonials[i];
};
update();
setInterval(update, 3000);
```
Loading...
And this is only the tip of the iceberg. Xeact is a poweruser's dream. It makes
it utterly trivial to compose more complicated things out of the same basic
tools that you have for free in the browser. Each of the main functions will be
covered in detail below:
## `g` - gets an element by ID
The most basic function is `g`, `g` lets you get an HTML element out of the DOM
so you can manipulate it, much like we did in the above testimonial example (no,
there is no way to stop it).
Usage is simple:
```html
```
```javascript
import { g } from "/static/js/xeact.min.js";
let elem = g("g-example");
elem.innerText = elem.innerText + "a";
```
## `h` - creates an HTML element
Just getting HTML elements by themselves isn't that useful outside of very
simple cases. Sometimes you need to create new HTML elements to munge them back
into the DOM. Let's say you want to create a replica of this Mara conversation
blurb:
[These are some words and I am writing them.](conversation://Mara/hacker)
This actually gets expanded out to HTML that looks like this:
```html
<Mara> These are some words and I am writing them.
```
HTML is a kind of a tree internally, so the `h` function lets you build element
trees:
```html
Loading...
```
```javascript
import { g, h, x } from "/static/js/xeact.min.js";
const mkConversation = (who, mood, message) =>
h("div", {className: "conversation"}, [
h("div", {className: "conversation-picture conversation-smol"}, [
h("picture", {}, [
h("source", {type: "image/avif", srcset: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.avif`}),
h("source", {type: "image/webp", srcset: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.webp`}),
h("img", {alt: `${who} is ${mood}`, src: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.png`})
])
]),
h("div", {className: "conversation-chat"}, [
h("span", {innerText: "<"}),
h("b", {innerText: who}),
h("span", {innerText: "> "}),
h("span", {innerText: msg})
])
]);
// clear out #exampleConversationRoot
x(g("exampleConversationRoot"));
g("exampleConversationRoot")
.append(mkConversation("Mara", "hacker", "These are some words and I am writing them."));
```
Loading...
[What...the heck? I didn't write those words! What is going on?](conversation://Mara/wat)
[Don't worry, it's all part of the plan](conversation://Cadey/enby)
You can use this to create whatever you need to create for your webapps. This
was inspired by the [Elm HTML
library](https://package.elm-lang.org/packages/elm/html/latest/). I may end up
making a companion library with common elements as an addon to Xeact that will
be distributed separately.
## `x` - remove all children of an element
This allows you to remove everything from an element so you can recreate it
anew. You should use this right before you add new things to an element to flip
the page on refresh:
```html
## `u` - build relative/absolute URLs
A common task in frontend code is to make HTTP requests to the server ~~where
you can write the code in a _real_ language~~. `u` lets you build those URLs
quickly:
```javascript
import { u } from "/static/js/xeact.min.js";
console.log(u("/blog.json"));
```
The [JSON Feed](https://www.jsonfeed.org/) for this blog can be found here:
You can chain this into `fetch` like so:
```html
```
```javascript
import { g, h, u, x } from "/static/js/xeact.min.js";
const div = (data = {}, children = []) => h("div", data, children);
const ahref = (to, text) => h("a", {href: to, innerText: text});
const h3 = (text, attrs = {}) => {
attrs["innerText"] = text;
return h("h3", attrs);
}
(async () => {
let resp = await fetch(u("/blog.json"));
if (!resp.ok) {
throw new Error(`/blog.json status ${resp.status}`);
}
let feed = await resp.json();
let root = g("xeblog-root");
let content = div({}, [
h3(feed.title),
h("ul", {}, feed.items.map(item => h("li", {}, [ahref(item.url, item.title)])))
]);
x(root);
root.append(content);
})();
```
## `r` - run a function once when the page is ready
`r` lets you defer execution of a function until everything in the page has
loaded. This is situationally useful and is difficult to demo.
```javascript
import { r } from "/static/js/xeact.min.js";
console.log("hi, open your dev console to see me");
```
---
What kind of awesome things can you create with Xeact? Use the hashtag `#xeact`
on Twitter and I'll maybe give you a shoutout!