Compared at the front desk · QZ Tray
Your browser should not be in charge of your hardware.
Bellhop is an alternative to QZ Tray for teams that want printing out of the browser altogether. 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 open anywhere. The real question is which layer printing belongs on, 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 opens the connection, and the page asks for the print. Close it and nothing is left that can ask. A webhook cannot print. Neither can a background job, 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, or the morning's pick list is ready at six: your server knows first, and your server prints, before anyone has reached the desk. The agent runs in the background, 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 and QZ becomes a network print server. But notice what you have signed up for by then: print-server infrastructure to deploy and keep secure 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 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 takes one link. 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 for desk number two hundred.
Deployed by hyperlink
Side by side
Checked Aug 2026
Where does printing start?
QZ TrayJavaScript running in an open page.
BellhopYour server, whenever it has a reason to.
What happens 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 can the hardware live?
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 agent for Mac, Windows or Linux, asking nothing of the desk.
What does promptless printing take?
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.
How does a new site go live?
QZ TrayInstall the tray, trust the certificate, configure the machine. Repeat per site.
BellhopSend a link to whoever stands at the desk.
QZ Tray facts are its published ones (qz.io, checked Aug 2026).
In fairness
Where QZ is the right tool
None of this makes QZ Tray a bad tool. It is a good one, and open source, for exactly the job it defines: a webpage driving the hardware in front of it. A kiosk, or 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, look again at what you wanted: printing that never involves the page at all. Jobs that leave your server the moment your code has a reason, and come out of a printer at a desk that closed for the night hours ago. That is a different layer from a browser bridge, and it is the layer operational printing belongs on.
A different layer entirely
The short answer
Is Bellhop an alternative to QZ Tray?
Bellhop is an alternative to QZ Tray for teams whose web application needs to print at other people's desks. QZ Tray bridges a webpage to hardware over localhost, so something must keep a page open wherever printing happens, and promptless printing is sold through its certificate program. Bellhop moves printing off the page altogether. A small background agent at each location pairs to your server through one link, and jobs print with no browser open, whether they come from a webhook or from a scheduled task that runs before anyone arrives. Bellhop's free plan covers a hundred locations; scales, multiple printers, and support come with the paid plans. QZ Tray remains the right tool when the hardware sits beside the browser, at a kiosk or a point of sale. Bellhop is built for everywhere else.
Coming from a print API instead? Bellhop vs PrintNode is the other half of this shelf. The integration guide shows the whole loop, pairing to first label, in Node and Rails.
Move printing to the right layer.
Pair your first desk; the free plan carries a hundred. Leave your email and we send a link that creates your account.
By continuing you agree to the terms and privacy policy.