A virtual fax machine that runs entirely on GitHub. Fork this repo to set up your own. Send faxes to anyone else who has one.
Your GitHub username is your fax number. Sending a fax creates an issue on the recipient's repo. The web interface looks and sounds like a 1990s office fax machine.
No servers. No backend. No cost. The entire phone network is GitHub.
Five steps, no coding required.
-
Fork this repo — click the Fork button at the top of this page
-
Enable GitHub Pages — in your fork, go to Settings > Pages. Under "Source," select
mainbranch and/ (root)directory. Click Save. -
Create a GitHub token — go to github.com/settings/tokens/new. Check the
public_repobox. Click "Generate token." Copy the token. -
Open your fax machine — visit
https://YOUR-USERNAME.github.io/faxmachine -
Paste your token — the setup screen will ask for it. Your token stays in your browser's local storage and is only used to talk to the GitHub API.
Your fax machine is now online. Your fax number is @your-github-username.
Click SEND on the machine. Enter the recipient's GitHub username, type your message, and hit Send Fax.
You can send plain text (with Markdown formatting) or switch to the Image tab to fax a picture. Attach a cover sheet if you want the full experience — complete with URGENT, FOR REVIEW, PLEASE COMMENT, PLEASE REPLY, and PLEASE RECYCLE checkboxes.
When you send, the machine dials, plays the full modem handshake screech through your speakers, and shows transmission progress on the LCD. A confirmation slip prints in the paper tray when it's done.
Click INBOX to see faxes people have sent you. Unread faxes show a blue dot.
Click any fax to read it. Received faxes render on thermal paper with a fax header showing sender, date, and page number.
| Fax concept | GitHub equivalent |
|---|---|
| Your fax machine | Your faxmachine repo |
| Your fax number | Your GitHub username |
| Sending a fax | Creating an issue on the recipient's repo |
| Receiving a fax | Someone creating an issue on your repo |
| Delivery confirmation | A GitHub Action that comments on the issue |
| Busy signal | Recipient has Issues disabled |
| Blocking someone | Blocking them on GitHub |
| Fax history | Your repo's Issues tab |
A GitHub Actions workflow on your repo automatically processes incoming faxes: it labels them, marks them as unread, and posts a delivery confirmation.
Your token never leaves your browser except to make authenticated requests to api.github.com. There is no intermediary server.
The sounds. Full modem handshake audio synthesized in the browser via the Web Audio API. DTMF keypad tones, dial tone, CNG/CED negotiation, the signature screech, and data transmission sounds. Volume control on the machine, or mute it from Settings.
Cover sheets. Attach a cover sheet with TO, FROM, DATE, RE fields and the classic checkbox options. The cover sheet renders in the fax body as a formatted table.
Phonebook. Save frequent contacts in the phone book. Click "Fax" next to any contact to start composing immediately.
Image faxes. Upload an image and fax it. The image is stored in your repo's faxes/outgoing/ directory and referenced in the issue body.
Manual faxing. People can also send you a fax directly through GitHub's issue interface using the "Send a Fax" issue template on your repo, without needing the web UI at all.
Transmission reports. After every send attempt, a confirmation slip prints in the paper tray showing recipient, timestamp, page count, and result (OK or FAILED).
Do I need to know how to code? No. Fork, enable Pages, create a token. Everything else happens in the browser.
Can someone spam my fax machine? You have the same controls as any GitHub repo. Block users, restrict who can open issues, or turn off Issues entirely (callers get a busy signal).
Does it actually make the sounds? Yes. Full fax modem handshake synthesized in real time. Through whatever speakers your computer has. The volume buttons work.
What happens if the person I'm faxing doesn't have a faxmachine repo? The recipient field shows a red X and the fax won't send. They need to fork this repo first.
Where are my faxes stored?
Received faxes are Issues on your faxmachine repo. Sent faxes are Issues on the recipient's repo. You can see them all in the GitHub Issues tab.
Is my token safe?
Your token is stored in your browser's localStorage. It's sent only to api.github.com over HTTPS. No other server ever sees it. You can revoke it from your GitHub settings at any time.
Can I customize the look?
The CSS uses custom properties for all colors. Fork the repo and edit the :root variables in style.css to change the machine's color scheme.
Every fork of this repo is a node on the GitFax network. The more people who set up their fax machine, the more people you can fax.
Share your fax number: @your-github-username
@dvelton
MIT



