# Virtual Printer > Hosted ESC/POS and EPL thermal printer emulator. Every printer gets its own public > raw TCP port from the 9100 block - the same socket a network receipt printer accepts > jobs on - and the printed document is rendered in the browser and readable over HTTP. Printing is raw TCP, not HTTP. Managing printers and reading documents back is a REST API, which is what makes the emulator usable from automated tests. The printer is emulated, not just parsed: faults - paper out, paper near end, cover open, offline, error - are set from the web interface or over the API, and the status the printer reports follows. An ESC/POS printer answers real-time DLE EOT n, GS r, ESC u, ESC v, GS I and Automatic Status Back (GS a) with the status bytes that state implies. The receive buffer is modelled too, with a configurable capacity and drain rate: a job that outruns it is marked with a buffer overflow and the printer reports itself busy. ESC/POS and EPL are supported; TSPL and ZPL are in development; page mode is not supported. Every page below is also available as markdown by appending `.md` to its URL, and the whole documentation set is concatenated at https://virtual-printer.online/llms-full.txt. ## Getting Started - [About Virtual Printer](https://virtual-printer.online/docs/start): What Virtual Printer is: a hosted ESC/POS and EPL receipt and label printer emulator with a public raw TCP port per printer and live rendering in the browser. - [Quick Start](https://virtual-printer.online/docs/start/quick-start): Create a workspace, add a virtual thermal printer, and send your first ESC/POS receipt over raw TCP in about five minutes. - [Raw TCP Port 9100](https://virtual-printer.online/docs/start/raw-tcp-port-9100): virtual-printer.online gives every printer its own public raw TCP port from the 9100 block — the same socket a network thermal printer accepts jobs on. How ports are assigned and how long they last. - [Import a Captured Dump](https://virtual-printer.online/docs/start/import-a-dump): Already have ESC/POS or EPL bytes? Paste the hex dump or base64, or drop the file, and see the rendered receipt - without printing over TCP at all. ## Setup - [Connecting Your Software](https://virtual-printer.online/docs/setup): Ways to point software at a virtual thermal printer: a POS application, an operating-system print queue, a printing library, or a socket you open yourself. - [POS Software](https://virtual-printer.online/docs/setup/pos-software): Point a point-of-sale application at a virtual thermal printer by changing the printer host and port it prints to - no driver, no agent, no code change. - [Windows Print Queue](https://virtual-printer.online/docs/setup/windows-driver): Add a virtual printer as a Standard TCP/IP Port in Windows, so software that prints through the spooler reaches the emulator - and see what your vendor driver actually emits. - [CUPS on Linux and macOS](https://virtual-printer.online/docs/setup/linux-cups): Create a CUPS queue that sends raw jobs to a virtual thermal printer with a socket:// device URI. - [Printing Libraries](https://virtual-printer.online/docs/setup/libraries): The common ESC/POS libraries - python-escpos, node-thermal-printer, escpos-php, ESCPOS.NET - all take a host and a port for their network transport, which is the only setting that changes. - [Code Samples](https://virtual-printer.online/docs/setup/code-samples): Open a raw TCP socket to a virtual thermal printer and send ESC/POS bytes from C#, C++, Node.js, or Python. ## CI/CD - [Automated Tests](https://virtual-printer.online/docs/ci-cd): Drive a virtual receipt printer from autotests: create a workspace over HTTP, print over raw TCP from the code under test, then assert on the parsed document. - [Pipelines](https://virtual-printer.online/docs/ci-cd/pipelines): A complete GitHub Actions workflow that creates a throwaway workspace and printer, prints from the code under test, asserts on the parsed receipt, and cleans up - plus the GitLab and Jenkins equivalents. - [Asserting on a Receipt](https://virtual-printer.online/docs/ci-cd/assertions): What to check once the document comes back: the parsed elements rather than a picture, and which assertions survive a change of layout. - [Fault Injection](https://virtual-printer.online/docs/ci-cd/fault-injection): Make the printer run out of paper, go offline, open its cover or fill its buffer on demand, and check that your application notices instead of losing the order. ## Protocols - [ESC/POS, EPL and TSPL](https://virtual-printer.online/docs/protocols): ESC/POS receipts and EPL labels, what each protocol is for, and where TSPL and ZPL stand. - [Supported ESC/POS Commands](https://virtual-printer.online/docs/protocols/escpos/supported-commands): What the emulator does with each ESC/POS command it recognises - renders it, answers it on the socket, or deliberately ignores it, and why. Generated from the parser itself. ## HTTP API - [Overview](https://virtual-printer.online/docs/api): The REST API manages workspaces, printers and documents; printing itself is raw TCP. Where the OpenAPI spec lives and how the two protocols fit together. - [Endpoint Reference](https://virtual-printer.online/docs/api/endpoints): Every HTTP endpoint of the virtual-printer.online API: request and response shapes, the problem+json error format, SSE streams, and the end-to-end print-and-verify flow. - [Printer Status API](https://virtual-printer.online/docs/api/printer-status): Start and stop a printer, inject hardware faults, drive the cash drawer, and stream runtime status over SSE. ## Troubleshooting - [Find Your Symptom](https://virtual-printer.online/docs/troubleshooting): Find the page for your symptom: the connection fails, nothing arrives, documents appear that you did not print, or the document arrives and looks wrong. - [Connection Refused or Reset](https://virtual-printer.online/docs/troubleshooting/connection-refused): Why a connection to a virtual printer port fails, and how connection refused differs from connection reset - one means the listener is down, the other means the IP whitelist rejected you. - [Nothing Appears](https://virtual-printer.online/docs/troubleshooting/nothing-appears): No document shows up after printing: the IP whitelist rejected the connection, the socket is still open, or the bytes went to a different printer. - [Documents You Did Not Print](https://virtual-printer.online/docs/troubleshooting/unexpected-documents): Strange receipts in your workspace mean someone else found your printer port, which is open to the internet - turn the IP whitelist back on. - [Document Marked With an Error](https://virtual-printer.online/docs/troubleshooting/document-has-errors): A red border around a document means the parser rejected something in the byte stream - how to read the error and what to do when the command is simply not supported yet. - [Empty Documents](https://virtual-printer.online/docs/troubleshooting/no-visual-elements): No visual elements detected" means the job contained only non-printing commands - a drawer pulse, a status poll, a buzzer - or the protocol does not match the data. - [Garbled Characters](https://virtual-printer.online/docs/troubleshooting/garbled-characters): Accented or Cyrillic text printing as the wrong glyphs is a code-page mismatch: the printer decodes bytes with the page it was told to use, not the one your application encoded with. - [FAQ](https://virtual-printer.online/docs/faq): Answers about workspaces, printers, the public raw TCP port, what the emulator does and does not do, and how long your data is kept. ## How It Works - [Architecture](https://virtual-printer.online/docs/concepts/how-it-works): What happens between the socket your application writes to and the receipt you see in the browser: parsing, document elements, and rendering. - [Choosing a Test Printer](https://virtual-printer.online/docs/concepts/choosing-a-test-printer): When a print-to-PDF driver is enough, when you need a raw TCP emulator, and when only real hardware will do. - [Limits and Retention](https://virtual-printer.online/docs/concepts/limits-and-retention): How long documents and workspaces live, what resets the expiration timer, and what happens to a printer port when a workspace expires. ## Policies - [Security Guidelines](https://virtual-printer.online/docs/policies/security): How print data travels to a virtual printer, why raw TCP is unencrypted, and what belongs on the hosted service versus a self-hosted instance. - [Privacy Policy](https://virtual-printer.online/docs/policies/privacy): What Virtual Printer stores, how long documents and workspaces are kept, and how to delete your data. - [Terms of Service](https://virtual-printer.online/docs/policies/terms): Service limits, data retention, acceptable use, and disclaimers for virtual-printer.online. - [Third-Party Licenses](https://virtual-printer.online/docs/policies/licenses): Open-source components used by Virtual Printer and the licenses they are distributed under.