Early access · by invitation

Local printers and scales for your web app.

Bellhop lets your web and mobile apps access the printers and USB scales sitting on a desk somewhere. Labels print with no browser open and nobody signed in, and our servers never see a job.

Free to a hundred locations. No card, no per-page pricing, no passwords anywhere.

From your server to your printer. Nobody in between.

No browser required

It prints anywhere, anytime.

100 agents free

Really free, no trial, not fourteen days.

No per-page pricing

Print volume is no concern.

Privacy-first

We don't sit between you and your printer.

ROLLO TSC

We support all major printers

Why Bellhop?

Five things the alternatives can't offer

It prints with the browser closed.

Bellhop prints with no browser open. Its agent is a background application on the machine at the desk, holding a connection it opened to your server. You push a job down it and the label comes out. Overnight, unattended, with the packer three screens deep in something else. The alternative everyone else ships is a browser extension or a localhost bridge that dies the moment someone closes the tab.

No browser required

Magical connections0:09

Pairs like magic.

Provisioning an agent hands your server a link. Send it to whoever is at the desk by email, slack, however you want. They click, and the agent is connected. No logins, no naming the machine, no config file, no wizard, nothing typed at the desk.

No configuration

A hundred locations, free.

The free plan carries a hundred agents, and an agent is one installed Bellhop paired to one of your apps at one location. That is not a trial and there is no clock on it. A great many products will never need to leave it, which we knew when we set the number.

No credit card required

Pages are yours.

You are never metered on volume. Plans count agents, because registering an agent is the only thing that costs us anything: an occasional signature. Print one label this month or a million; the invoice does not notice, and you never have to explain a per-print line item to a customer.

No per-page pricing

We are not in the path.

bellhop.dev is a registrar. It signs an Ed25519 credential the agent verifies offline, bound to your host, and then gets out of the way. It never sees a print job, a scale reading, or a protocol message. It can be down for a week while you keep printing. A hosted relay would have been easier for us and worse for you.

No middleman

How it works

One wire · three moves

1Add the library.

Node or Rails. Bellhop lives inside your application, and your server holds the connection.

2Pair a location.

Provision an agent, then hand the pairing link to whoever stands at the desk.

3Use the hardware.

Labels print and weights arrive with no browser open and nobody signed in.

An agent is one installed Bellhop, paired to one of your apps at one location. The free plan carries a hundred of them.

The libraries

Install the library. Print a label.

Bellhop has a library for Node and a library for Rails. The library does all of the protocol for you. You write what to print, and what to do when a scale sends a weight.

The Node library works with Express, Fastify, and any host that uses fetch. The Rails library is an engine. One generator writes the initializer and the migration, and it mounts the engine for you.

You do not need a library. The protocol is flat JSON over a WebSocket or two HTTP routes on your own server. A Python, PHP, or Go app answers those routes like any others. The API tab shows the whole exchange.

The library does
pairing · WebSocket and HTTP transports · redelivery · renewal
You write
what to print, and when
Formats
ZPL · PDF · scale readings

Read the integration guide

$ npm install @bellhop/node
const bellhop = new Bellhop({
  secretKey: process.env.BELLHOP_SECRET_KEY,
  publicUrl: 'https://deliver.example.com',
  store: sqliteStore('bellhop.db'),
})

app.use(bellhopExpress(bellhop))
attachWebSocket(bellhop, server)

// Add a desk. Give the link to whoever stands at it.
const { pairingLink } =
  await bellhop.agents.create({ label: 'Shipping Desk' })

await bellhop.print(agentId, {
  kind: 'label', format: 'zpl', data: zpl,
})

bellhop.on('weight', ({ grams }) => fillShippingForm(grams))

Each example is a complete integration. The line with the gold background is the print job. It goes from your server to the desk.

Pricing

Counted in agents, never in pages

Bellhop · front desk FOLIO № 000-100
PLANFREE
AGENTS, UP TO 1000.00
PRINTERS, 1 PER AGENT0.00
PAGES, UNLIMITED0.00
SCALESSEE FLEET
SUPPORTSEE FLEET
TIME LIMITNONE
CARD ON FILENONE
TOTAL DUE$0.00
Paid in full

FREE-100 · NO CARD · NO CLOCK

For nearly everyone, $0 is the whole bill.

The free plan permits a hundred agents. No trial, no time limit, and you're never metered on volume. Plans count agents, because registering an agent is the only thing that costs us anything. When you need more (scale support, multiple printers, or someone to answer when you write), Fleet is $87 a year.

Fleet

$87/yr

Agents included
3
Each additional
$29/yr
Printers per agent
Unlimited
Scales · support
Included
Branding on the agent
Yours

The bill caps at $899 for up to a hundred agents, and not a dollar past it.

Platform

Talk to us
Agents
Beyond 100
Printers per agent
Unlimited
Scales · support
Included
Reselling to your customers
Yes

For larger sites and resellers: thousands of agents, your branding throughout, and terms written with you.

Compare the year’s bill PUBLISHED PRICES · CHECKED AUG 2026
1
100
BELLHOP FREE $0/yr

Pages never counted. One printer per desk, no scales, no official support.

PRINTNODE $90/yr

Cheapest fit for 1 computer: Essential, 5,000 prints a month included.

QZ TRAY $0

Open source (LGPL), self-hosted and self-supported.

One PrintNode computer is taken as one Bellhop agent. PrintNode figures are its published yearly plans: the cheapest tier that fits, plus per-1,000-print overage.

A deactivated agent frees its slot, and the cap is enforced only when an agent is created, so a downgrade never strands a desk mid-shift.

The part that matters at 2am

There is no computer of ours between you and the printer.

Every competitor that routes your jobs through their cloud is asking you to hand them a copy of every label, packing slip, prescription, and lab result you will ever print. We designed ourselves out of that position deliberately, and the architecture is the proof rather than the promise: the agent verifies its credential against public keys baked into its build, so it does not need us to be reachable.

See the public key set

  • Never A print job, its contents, or its recipient
  • Never A scale reading
  • Never Any protocol message between you and an agent
  • Never A password: there are none, anywhere, and never will be
  • Occasionally A signed credential, minted by your server calling ours

Ring the bell.

Bellhop is in early access and we are letting people in a handful at a time, so that the first integrations get a real person's attention.

The integration guide is finished and waiting: it opens the moment your invitation lands, and it is short enough to read before you write a line.