Skip to the main content
mkfifo.com

Blog

Notes from building mkfifo.com, one subject in each post: what I planned, what I found, what I changed, and what I fixed. When a choice was wrong, the post tells how I found it. The code is private, so this is the public record of the project.

Follow it with the Atom feed. The blog is a FIFO: each post is an envelope of the FIFO mkfifo, and lsjson makes this list.

Remotes of rclone

9 October 2026 · Updated 20 October 2026 · planned, discovered, changed

Before mkfifo.com, I wrote rfetch: rclone on the APIs of the Web, where each remote is a fetch() that takes a request and gives a response. A FIFO has the same shape: a Request goes in, and its answer comes out. So a FIFO can be a remote of rclone. This post tells the first step: a FIFO lists its files to other programs, and the commands of rclone ask a FIFO for its files.

A terminal, and the builtins on the web

7 October 2026 · Updated 16 October 2026 · planned, discovered, changed, fixed

Each builtin is a web API at //bin/NAME, and the editor of each FIFO has a terminal for the same shell. The terminal became the form of /bin/sh, and gzip and gunzip came as builtins. Then an assistant got the same shell, through the MCP endpoint /mcp.

Email, and the sign-in

4 October 2026 · Updated 12 October 2026 · planned, discovered, changed, fixed

An email comes in as a stream. For two days, mkfifo.com also sent the email of each FIFO; then your own email service took that job. The sign-in of mkfifo.com became a FIFO, with one-time codes and signed cookies. Then each account got a home: a locked FIFO, with FIFOs in it. Before the next features, I checked the homes again, and closed the holes that I found.

Stream parsers and selector lines

5 October 2026 · Updated 11 October 2026 · planned, discovered, changed

Each streaming parser of mkfifo.com has one shape. On that shape came a JSON tokenizer, then selector lines that read the values of a JSON or HTML body, later one read of the body for all the envelopes of a FIFO, and last the HTML part of an email.

Running on BEAM.com

5 October 2026 · Updated 11 October 2026 · planned, discovered, changed, fixed

mkfifo.com is one of the first real apps on BEAM.com. These are the rough edges that I found and reported, and the numbers of a stress test: speed, memory, and the limits of one Durable Object.

Links like symlinks, fairer sign-in codes, and plain words

11 October 2026 · planned, changed, fixed

I made a set of decisions about links, the sign-in and the words on the site. Each one fixes something that surprised people.

A named pipe for the web

3 October 2026 · Updated 11 October 2026 · planned, discovered, changed, fixed

The first two days of mkfifo.com: the idea of a named pipe for the web, the envelopes that are its rules, the editor of the envelopes, and the loops that a graph of FIFOs can have.

Templates, and a question box with no LLM

5 October 2026 · Updated 10 October 2026 · planned, changed, discovered, fixed

A person who comes to mkfifo.com has a job to do, not a wish to learn regular expressions. So the gallery of templates grew from 5 to 24 (it has more now), and it has a box that asks "What do you want to do?".

Holds, mirrors, privacy and limits

4 October 2026 · Updated 10 October 2026 · planned, discovered, changed, fixed

The name of a FIFO is its key. This post tells how a FIFO holds a different FIFO, how two FIFOs share one envelope, what mkfifo.com keeps private, and which limits came before the launch.

Fast builtins

9 October 2026 · measured, discovered, changed

The backend s3 is envelopes, and each envelope is a pipeline of builtins. The signature of AWS is 26 runs of printf, sed, cut, sha256sum and hmac -K in sh -c, and the answer of a PROPFIND changes a list of 1,000 keys with one filter of jq. A Worker of Workers Paid can send 10,000 subrequests for each request, so a FIFO can send a request for each key of a list. Then a builtin runs many times for one Request, and its speed is the speed of the backend. So I measured the builtins, and made them faster.

Room to write

8 October 2026 · Updated 9 October 2026 · planned, discovered, changed, fixed

A post of this blog is an envelope now, and a person can write a blog in a FIFO. But the body of an envelope had the size of the envelope in the editor. This post tells how the editor gets room for a long text.

A blog in a FIFO

8 October 2026 · planned, changed

This blog will be a FIFO: each post an envelope, and each page an answer. Then the blog of mkfifo.com is also an example of a blog that each person can make. This post tells each step.

The blog, by subject

8 October 2026 · changed

This blog had 55 posts after six days, often three or four in one evening, a few minutes apart. Now it has 17: one post for each subject.

A 304 for the images, and turns for the clients

8 October 2026 · discovered, fixed, changed

The icons and the images of the site always came with 200, also when the browser had them already. The answers had Cache-Control: public, max-age=86400, but no ETag. When the browser asked again, for example when a person loaded the page again, it had no tag to send, and mkfifo.com sent all the bytes again.

magick, and placeholder images

8 October 2026 · planned, discovered, changed, fixed

The builtin image became magick, with the words of ImageMagick 7 and a test against ImageMagick itself. A FIFO can have 32 ingress envelopes now, and /fpo gives placeholder images with no new code.

Routes and images

8 October 2026 · planned, discovered, changed

A FIFO can have more than one path now: a route after its name, in the syntax of URLPattern. The first routes give the icon at each width, and the images of each FIFO with the options of Cloudflare Images.

Icons from one SVG, and a cache

7 October 2026 · Updated 8 October 2026 · planned, discovered, changed, fixed

All the icons of mkfifo.com come from one SVG in an envelope, through the builtin resvg. Cloudflare Images made the other sizes for one day, and then a cache in front of the Worker took its place.

The look of the pages

7 October 2026 · planned, discovered, changed, fixed

Four changes to the pages in one evening: a field behind an envelope that a link brings to the front, an image for links, a dark mode, and a test of accessibility at each push.

The builtins, checked against the shell

7 October 2026 · planned, discovered, changed, fixed

A builtin has the name and the options of a tool of the shell, so it must do what that tool does. TLA+ models write the cases, and the real tools give the answers. Then the pipes, the quotes and the redirections of an envelope learned to work as in a shell.

From filters to builtins

6 October 2026 · Updated 7 October 2026 · planned, discovered, changed, fixed

A call of a FIFO in an envelope started as a filter, in the syntax of Liquid. In one day it became the syntax of a shell, with builtins that have the names and the options of the commands of a shell, and limits for their work.

Fonts and colors

6 October 2026 · planned, discovered, changed, fixed

The fonts of the site come from a FIFO, and the colors of the code come from a font. Neither needs a script in the page.

A pipeline across FIFOs

6 October 2026 · planned, discovered, changed, fixed

A pipeline needs a FIFO that sends a Request on, and a different FIFO that examines the reply. The fields of a form came first, then a graph of nodes and edges in the database, then Reply-To and Errors-To.