# Choosing a Test Printer

Three different things get called "testing the printer", and they exercise different parts of your
system. Picking the wrong one gives you a green test that proves nothing.

## Print-to-PDF or a virtual driver

Built into Windows and macOS, free, and useful — **if your application prints through the operating
system's print queue**. It exercises your document layout and the driver.

It is the wrong tool if your application builds ESC/POS bytes and writes them to a socket, which is what
most POS software does. That path never touches the OS driver stack, so a PDF driver tests none of it.

## A raw TCP printer emulator

This service, and the local open-source emulators, live here. The emulator accepts the same byte stream
a network printer accepts, so your transport, your command generation, your encoding and your error
handling all run unchanged. What you give up is the physical layer: nothing tells you the paper is
actually in the printer, or that the cutter jams on thick stock.

Between hosted and local there is a real trade-off, and it is not always in our favour:

- **Hosted (this service)** — nothing to install or maintain, shareable with teammates and reachable
  from a CI runner without networking work, with history kept for you. In exchange the connection is
  unencrypted and leaves your network, so it is for test data only.
- **Local or self-hosted** — your data never leaves the machine, and it works offline. In exchange you
  run and maintain it, and sharing a rendered receipt with a colleague takes a screenshot.

If you are printing anything resembling real customer data, run it locally. That is the honest answer,
and it is why this service is self-hostable.

## Real hardware

The only thing that proves paper, cutter, ribbon and print quality. It is also the thing you cannot put
in a pipeline: it needs a person, a physical location, and consumables.

The practical arrangement most teams land on is an emulator for everything that runs on every commit,
and a real printer for a deliberate check before a release.

## Summary

| You want to know | Use |
|---|---|
| Does my document layout look right when printed through the OS? | Print-to-PDF driver |
| Do my ESC/POS bytes render correctly, and does my app handle the socket? | Raw TCP emulator |
| Does my app react when the paper runs out mid-receipt? | Emulator with fault injection |
| Does the cut land in the right place on this specific paper? | Real hardware |
