Compared at the front desk · QZ Tray
Early access · by invitation
Your browser should not be in charge of your hardware.
Bellhop is an alternative to QZ Tray for teams that want printing outside the browser entirely, not just closer to it. QZ Tray connects a webpage to the hardware over localhost; Bellhop connects your server to an agent at the desk, so a job prints with no tab and no browser open. The question is not really which tool. It is which layer, and here is the case for moving it.
QZ connects a webpage to local hardware. Bellhop connects your application to remote hardware.
The lifetime of a tab
Printing inherits the page's life
QZ Tray answers a real limitation honestly: browsers cannot speak to hardware, so it stands a bridge on localhost and lets the page across. The trouble is what that leaves in charge. The tray keeps running when the tab closes; what disappears is the caller. QZ's standard integration puts the caller in the page's JavaScript: the page connects, the page finds the printers, the page asks for the print. Close it and nothing is left that can ask. A webhook cannot print. A background job cannot print. A scheduled task cannot print, unless you build another caller around QZ, which is the server-side printing application it was supposed to spare you.
Bellhop's caller is your application. An order is paid, a webhook lands, the morning's pick list is ready at six: your server knows first, and your server prints, with no browser open and nobody signed in. The agent is a background application holding a connection it opened to your server; jobs go down it whenever your code decides.
No browser required
The location of the hardware
Escaping localhost is a project
QZ starts where its name suggests: hardware beside the browser, reached over localhost. It does not have to end there; point its connection at another host instead of localhost and QZ becomes a network print server. But notice what you have signed up for by then: deploying, securing, and maintaining print-server infrastructure at every site that needs it. Remote hardware is the exception you build. With Bellhop it is the operating model from day one: the agent makes only outbound connections, so the printer can be in a back room, a warehouse, or a shop three time zones away, behind whatever firewall it likes, with no port opened and nothing configured at the site.
Rolling out a new location is not an installation project. Your admin creates an agent, which yields a pairing link; whoever stands at that desk clicks it; the desk is yours. That is the whole procedure, and it is the same procedure for desk number two hundred.
Deployed by hyperlink
Side by side
Checked Aug 2026
Printing starts from
QZ TrayJavaScript running in an open page.
BellhopYour server, whenever it has a reason to.
When the tab closes
QZ TrayThe tray keeps running; its caller is gone. Nothing is left that can ask for a print.
BellhopNothing changes. The caller is your application, and it never left.
Where hardware lives
QZ TrayBeside the browser by default. It can be run as a network print server; that is a deployment of its own.
BellhopWherever an agent is paired, on any network, behind any firewall.
What runs at the desk
QZ TrayA Java application, and the Java runtime that comes along with it.
BellhopA small native app, Mac or Windows, asking nothing of the desk.
Printing without prompts
QZ TrayWants requests signed against a certificate; the certificate program is the paid product, at $749 a year.
BellhopA pairing link, clicked once. Jobs never prompt anyone.
A new site goes live
QZ TrayInstall the tray, trust the certificate, configure the machine. Repeat per site.
BellhopSend a link to whoever stands at the desk.
In fairness
Where QZ is the right tool
None of this makes QZ Tray a bad tool. It is a good one, genuinely open source, for exactly the job it defines: a webpage driving the hardware directly in front of it. A kiosk, a point of sale where the operator's browser and the receipt printer share a counter: that shape fits, and QZ serves it well at a price of zero.
But if you reached for it because your web app needs things printed at your customers' locations, notice what you actually wanted. Not a better bridge out of the page: printing that does not involve the page at all. Jobs that leave your server the moment your code has a reason, arrive at a desk that may be closed for the night, and come out of the printer with nobody signed in. That is not a cheaper QZ or a friendlier one. It is a different layer, and it is the layer operational printing belongs on.
A different layer entirely
Move printing to the right layer.
Bellhop is in early access. Ask for an invitation and pair your first desk; the free plan carries a hundred.