The page cannot connect to the server. It tries again.
The server has an error. The page tries to connect again.
mkfifo sparkly-snowy-river
Named pipes for webhooks, forms and emails.
A FIFO gets a URL and an email address. Tell it which Requests to accept. Then tell it where to send them: an HTTP API, the API of your email provider, or a different FIFO.
- No sign-up
- No server
- Works with curl
Ingress envelope
Which Requests to accept
To: contact@mkfifo.com X-HTTP-Method-Override: ^POST$ (?m)^email: (?<email>.+)$ (?s)message: (?<message>.*)
Egress envelope
Where to send them
To: https://api.mail.example/send
Authorization: <sealed:…>
Content-Type: application/json
{"to": "me@example.com",
"reply_to": "$email",
"text": "$message"}
What can a FIFO do?
A FIFO connects the tools that you have. It accepts HTTP and email, and it sends HTTP and email.
-
A contact form for a static site
Set the action of your form to the URL of your FIFO. Each message goes to your email, and the sender sees your thank-you page.
-
Emails that become webhooks
Forward the emails of your orders or tickets to your FIFO. Patterns find the values, and your app gets clean JSON.
-
Change the shape of a webhook
A service sends a large body, and your chat needs one line. Capture only the fields that you need.
-
One Request, many destinations
Give an ingress envelope two or more egress envelopes. One Request goes to your email and to your API at the same time.
-
Chains of FIFOs
An egress envelope can send to a different FIFO. Connect FIFOs as you connect commands with a Unix pipe.
-
Secrets stay sealed
Lock a field, for example the token of an API. mkfifo.com encrypts it, and the editor shows only the seal.
Three steps to a pipe
An envelope is a short text, as an email is. You write it in the editor, or send it with curl.
-
1 Choose a name
The name is the address of your FIFO. Use two or more words that are easy to remember, joined with a -.
https://mkfifo.com/my-orders my-orders@mkfifo.com
-
2 Write an ingress envelope
Each line is a pattern for a header field or for the body. A named capture keeps a part of the Request.
Subject: Order (?<id>\d+) Total: (?<total>[\d.]+)
-
3 Write an egress envelope
Write the destination and the message. $id puts the capture into the message.
To: https://api.example.com/orders Content-Type: application/json {"order": "$id", "total": "$total"}
mkfifo, for the web
In Unix, mkfifo
makes a named pipe. One program writes into it, and a different program reads from it.
mkfifo.com does the same with HTTP and email. Each part of a FIFO is a text that you can send with curl.
# Accept the push events of GitHub, and capture the repository printf 'X-GitHub-Event: ^push$\n\n"full_name":\\s*"(?<repo>[^"]+)"\n' | curl -X PUT --data-binary @- https://mkfifo.com/my-deploys
# Send each push to your chat. ID is the Message-ID in the answer of the first command printf 'In-Reply-To: <ID@mkfifo.com>\nTo: https://chat.example/hooks/T000\n\n{"text": "New push to $repo"}\n' | curl -X PUT --data-binary @- https://mkfifo.com/my-deploys
# Send a test Request curl -H 'X-GitHub-Event: push' -d '{"full_name": "a/b"}' https://mkfifo.com/my-deploys
Safe from the start
A FIFO is open to the web. mkfifo.com protects the people who send to it, and the people who receive its messages.
-
No spam from mkfifo.com. Your FIFO emails other people through your own email provider, with your key. mkfifo.com emails only you.
-
Sealed fields keep your tokens secret. People who open the editor see only the seal.
-
HTTP egress uses only https. It does not follow a redirect, and it stops after 10 seconds.
-
An answer page cannot run scripts. It cannot read the cookies of mkfifo.com, and its forms send only to mkfifo.com.
-
Each pattern has a limit. A pattern that uses too much CPU time does not match.
-
mkfifo.com keeps no copy of a Request. It reads each Request, sends the egress, and forgets it. The database holds only your envelopes.
Your first FIFO is one name away.
Choose a name. Then write two envelopes.
Make a FIFO