Skip to the main content
mkfifo.com

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.

You get https://mkfifo.com/sparkly-snowy-river

and sparkly-snowy-river@mkfifo.com.

  • 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"}
A contact form for a static site: each message goes to your inbox.

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. 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. 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. 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