modem runs a real Bell 103 connection between two machines over their sound cards. Getting there takes a moment: a faithfully performed dial-up overture goes first - off-hook, dial tone, DTMF, ringback, the ANSam answer tone and its phase reversals - then a real 300 baud connection underneath.
The overture is a reconstruction. The connection is real.
Fast data-over-sound tools such as minimodem already move bytes across a room quicker than this ever will, and that is not what this is for. They have no interest in the dial tone, the DTMF, the answer tone or the negotiation, because none of it makes them faster. This performs exactly the parts a fast tool has no reason to want.
Try it
Three ways in. Watch a full handshake and a real connection right here, nothing to set up. Or open this device as one real end of an acoustic call - dial from one, answer on the other, the sound genuinely crossing the room between them.
Sound help
If Dial looks like it is running but nothing plays: check the mute switch and the volume, then try Resume sound below. This tracks what the audio pipeline has actually done, not just whether a button responded.
Demo - both ends live, right here
Two real sessions, cross-wired in software exactly as the binary's own split-screen demo wires them - the link never crosses the air, so this is genuinely DEMO MODE, the same honesty the terminal app's own status bar carries. Answer picked up and originate dialled automatically; redial with different digits below, or hang up and stop whenever you like.
IDLE - press ATDT to dial
IDLE
IDLE
IDLE
Microphone activity
Modem signal detected
Two ways to try this
Split screen is the default, so anyone can watch a full handshake without a second machine. The real thing is two machines, one end each, sound genuinely crossing the room.
One device
Run modem with no flags and both ends open in one window, originate on the left and answer on the right, sharing one spectrum. The link between them is wired in software rather than crossing the air, so the status bar says [DEMO MODE] - not an apology, the same honesty this whole project runs on. It appears whenever the link is not acoustic, and only then.
Two devices
The real thing needs one machine per end, speakers and microphone facing. Like a real modem, you choose which end you are: the calling machine runs modem --single --acoustic, the receiving machine runs modem --single --acoustic --answer and waits for a call. Dial from the calling machine with ATDT<digits>. Whichever end dials becomes originate and whichever end answers becomes answer, so the two land in opposite Bell 103 bands automatically - originate on 1270/1070 Hz, answer on 2225/2025 Hz - and each can hear the other, exactly as a Hayes modem's own originate/answer switch worked.
What each part of the handshake was for
Play the whole overture at once, rendered live by the same code that runs the connection above - not a recording - or preview any stage on its own below. Dialling itself is decorative throughout this section: there is no real telephone network behind it, so the far end always answers regardless of what is dialled.
Get modem
Native binaries for Linux, macOS and Windows are built by the project's release workflow.
No release has been tagged yet - the releases page will list binaries once one has.