Raw TCP Port 9100
Network thermal printers do not speak HTTP. They listen on a plain TCP socket — usually port 9100, the convention known as JetDirect or AppSocket — and print whatever bytes arrive until the sender closes the connection. There is no request, no response, and no framing: the socket is the protocol.
virtual-printer.online works the same way, on the public internet.
Yes, there is a real public port
Every printer you create gets its own always-online TCP listener on virtual-printer.online, reachable
from anywhere. Point your POS software at virtual-printer.online:<your port>, write ESC/POS or EPL
bytes, close the connection, and the rendered receipt appears in the browser.
That means:
- Nothing to install. No Docker container, no local bridge, no browser extension, no agent.
- No HTTP wrapper in the print path. You do not POST your payload anywhere; the code under test opens a socket, exactly as it does against real hardware.
- The browser is optional. It does not need to be open while you print — parsing and rendering happen on the server.
The HTTP/REST API exists as well, but for managing printers and reading documents back. Printing itself is always raw TCP.
Which port do I get?
Network thermal printers listen for raw TCP jobs on port 9100, and virtual-printer.online hands out its ports from that same block. Port 9100 itself is the anchor of the range and is never assigned; printers are numbered upward from it — 9101, 9102, 9103, and so on. Ports taken by printers registered before yours stay taken, so a printer created today is assigned the next free port above them.
The assigned port is permanent: it belongs to that printer until you delete the printer, or until the workspace expires after a year with nobody opening it or reading a document from it. So you can put it in your POS configuration and leave it there. Assignment is automatic — you cannot request a specific port, and in particular you cannot claim 9100 itself.
Finding your port
The port is printed on the printer's card in the web interface, and returned as
settings.tcpListenPort by the API when you create or fetch a printer, alongside settings.publicHost.
Checking that the port is reachable
Before wiring up your application, confirm the path works from where your code runs:
# Linux / macOS
printf 'Hello
' | nc virtual-printer.online 9411
# Windows PowerShell - connectivity only, sends nothing
Test-NetConnection virtual-printer.online -Port 9411
Substitute your own port. If the connection is refused, start with Connection refused — the usual causes are a stopped printer or an outbound firewall that only allows 80 and 443.
Security
Raw TCP is unencrypted, by definition of what a printer socket is. Anything you print to the hosted service travels in the clear — see Security guidelines before sending anything that resembles a real receipt.
Next pageImport a Captured Dump →