FartLabs: First Year in Review

|

FartLabs has been crop dusting innovation and collaboration in 2024. Let's reflect on our journey and look ahead to the future.


On this page

FartLabs has been crop dusting innovation and collaboration in 2024. Let’s reflect on our journey and look ahead to the future.

Year of firsts

In 2024, FartLabs, as it is known today, was born. Our goals are ambitious, but our vision is clear: walled gardens will fall and make room for a new era of user-centric FOSS (free, open-source shit). Read more about our mission in a previous blog post.

Deno Subhosting Hackathon

In January, our journey began with a meteoric start at the Deno Subhosting Hackathon where our project, Deno Blocks, won “Ryan Dahl’s Favorite” and “Most Fun”. It was a fateful opportunity to integrate a cloud IDE with the Deno Deploy platform and challenge our problem-solving and technical skills.

Deno Blocks screenshot

jsonx

In February, we started developing jsonx, a JSX runtime to compose all kinds of JavaScript objects via JSX syntax.

function Cat() {
  return { animals: ["🐈"] };
}

function Dog() {
  return { animals: ["🐕"] };
}

const data = (
  <>
    <Cat />
    <Dog />
  </>
);

console.log(data); // { animals: ["🐈", "🐕"] }

In March, we shipped a jsonx documentation website which includes an in-browser IDE where users can experiment and play with jsonx and see the results in real-time.

jsonx_docs landing page

Routing and hypertext

In April, we launched rt, a TypeScript library for conveniently handling HTTP requests. We also released rtx, a companion jsonx component library to design HTTP servers via JSX syntax.

In addition, we launched ht, a TypeScript library for rendering HTML elements with type-safe attributes. This library is used in htx to render HTML elements via JSX syntax.

import { A, BODY, H1, P } from "@fartlabs/htx";
import { Get, Router } from "@fartlabs/rtx";

const router = (
  <Router default={() => new Response("Not found", { status: 404 })}>
    <Get
      pattern="/"
      handle={() =>
        new Response(
          <BODY>
            <H1>Hello, World!</H1>
            <P>This is a paragraph.</P>
            <A href="https://jsr.io/@fartlabs/htx">@fartlabs/htx</A>
          </BODY>,
        )}
    />
  </Router>
);

if (import.meta.main) {
  Deno.serve((request) => router.fetch(request));
}

rtx and htx play nicely together, allowing for routing and hypertext components to create a full-stack web experience via JSX syntax in the same TypeScript file, all using one (jsonx) JSX runtime.

With htx, we built this website you are currently reading, FartLabs.org. Read the ★Source.

Grid of QR codes

In May, we began prototyping a practical intersection of physical and digital worlds with qr_grid. This project generates customizable, printable QR code grids, enabling seamless transitions between tactile materials and digital resources.

QR code sticker grid photo

Whether for research or productivity, QR codes in physical formats, like stickers, are a step towards bridging these realms. Inspired by Andrew Sutherland’s talk, we aim to empower thought work with accessible, hybrid interfaces.

Social media presence

In June, we expanded our online presence with a new Twitter/X account and Discord server. We even launched a tool for posting an announcement when a new post is published on our blog. These platforms provide a space for developers and enthusiasts to innovate with us and gives us the ability to announce new projects and updates and reach a broader audience. Connect with us on GitHub, Bluesky, Twitter/X, Discord, Instagram, and LinkedIn.

Additionally, we released a new CSS library, Fart.css, complete with documentation website. Fart.css is designed with minimalism and ease-of-use in mind, providing developers with a flexible foundation for building fart-tastic interfaces.

Fart.css book cover

Itemized operating systems

In July, we studied Alexander Obenaur’s work on itemized operating systems, investigating modular architectures where individual digital resources are treated as movable, self-contained “items.” This approach, exemplified by Obenaur’s lab notes, presents intriguing possibilities for user customization and seamless data integration across applications.

To further explore these concepts, we developed a TypeScript implementation of Obenaur’s item drive and coordinated concepts. This practical implementation allowed us to experiment with real-world applications, gaining valuable insights into the strengths and limitations of the itemized approach.

Our research revealed that Obenaur’s itemized approach to computation carries interdisciplinary relevance. We observed intriguing similarities with existing Semantic Web standards such as RDF. This connection suggests promising avenues for future research and development, intended for interoperable systems which put the user into the development loop, improving experiences for managing and sharing digital information.

Concentration

In August, we released an auditory memory game titled, Fart Concentration. This is our first game project built with Fart.css, and is available to play for free! See the game in action in the video below.

Read more about games at FartLabs in a previous blog post.

TypeScript introspection

The latter parts of 2024 have been focused on introspection and integration. We identified performance issues caused by prolific libraries like Zod and TypeBox stressing the TypeScript language server in large projects. To address this, we began exploring TypeScript type introspection.

Our initial approach involved synchronous analysis using tree-sitter. While insightful, this proved less than ideal.

In December, we pivoted to a build-time approach, leveraging deno doc for more robust type information. This shift lays the groundwork for a powerful, type-driven code generation system, enabling us to build a flexible, Linked Data application framework on top of familiar TypeScript syntax, intuitively integrating concepts from Semantic Web standards.

2025 and beyond

Learn and grow

We are building a future where users take control of their digital experience. By contributing to our project or advocating for open, user-centric software development, you can be a part of this movement. Join us! GitHub Chat