Questions

The ones that actually come up, answered without hedging.

What it costs

Is it really free?
Yes. Every feature, every template, as many printers and as many paired web apps as you want. There is no paid tier, no licence key, no trial that ends, and no feature behind a wall. Nothing in the app will ever ask you for money or for card details.
Then what is the catch?
There is no advertising, no data collection and no upsell — the app has no account system to attach any of that to, and the only request it makes to the internet is a version check you can turn off. Printol exists because the alternative for a shop is a browser print dialog, and that is not a good enough alternative.
Will it start charging later?
The build you have installed keeps working whatever happens afterwards. There is no licence server that can switch it off and no subscription check to fail, so a future decision cannot reach backwards into a copy already on a counter.

Getting it working

My web app cannot find the bridge.
Three usual causes, in order of likelihood. The app is not running — check the tray. The page is on Safari, which blocks a request from an https page to http://127.0.0.1; open the site over http while developing, or use Chrome, Edge or Firefox. Or a corporate proxy extension is intercepting loopback fetches. The tray menu shows the exact port it bound in the 47600–47619 range, so you can also open it directly in a browser tab to confirm.
Chrome logs something about a private network request.
That is Private Network Access. A public https page reaching 127.0.0.1 has to be allowed by the local server, and the bridge answers the preflight with the header that permits it. If you see the error anyway you are on a build older than 0.1.0 — update.
The receipt prints as a wall of garbage characters.
The printer is being sent ESC/POS but is not in RAW mode, so the driver is rendering the control bytes as text. On Windows, set the queue to the “Generic / Text Only” driver or the manufacturer’s own; do not use a driver that rasterises.
Columns do not line up.
The printer is loaded with different paper from what Printol thinks. Settings → Printers → paper, then reprint the test page: it prints a ruler line that tells you the true column count.

How it behaves

What happens when the printer is off?
A network job fails immediately with printer_offline. A system job is handed to the OS spooler, which queues it — so it prints when the printer comes back, exactly as it would from any other application.
Can it print silently on A4?
On macOS and Linux, yes: the PDF goes to CUPS with lp and nothing appears on screen. On Windows silent PDF printing depends on what handles PDFs on that machine — Printol uses SumatraPDF if it is installed and falls back to the shell print verb otherwise, which may show the handler’s own window. The PDF is always retrievable from the job, so your app can offer a download as a fallback.
How do updates work?
The app checks once a day, shows a banner when a newer version exists, and installs it when you press the button. It never installs or restarts on its own. Packages are signed and the signature is verified against a key inside the copy you already have, so a tampered download is refused rather than installed. You can turn the check off in Settings, and the app keeps working either way.
Does it work with no internet?
Completely. The bridge, the templates and the database are all local. Only the update check and the website need a connection.
Two tills, one browser profile — what happens?
Discovery returns both bridges. Tokens are stored per device id, so the browser holds one for each, and you pick with connect({ deviceId }).
If I retry a print after a timeout, do I get two bills?
Not if you send an idempotency_key. The same key returns the original job instead of queueing a second one.

Security and data

Any website could talk to my computer.
Any website can send a request; none can do anything with it. Everything except discovery and pairing needs a token, and a token only exists because somebody at that computer read your site’s name on a dialog and clicked Allow.
Where is my data?
A single SQLite file in your user profile — %APPDATA%\Printol on Windows, ~/Library/Application Support/Printol on macOS, ~/.local/share/printol on Linux. Copy it to back it up.
Do you see my invoices?
No. There is no account, no upload and no telemetry containing business data. The only outbound request is the update check, which sends a version number.
Can I revoke an app I paired?
Settings → Paired apps lists every one with its origin and last-used time, and revoking takes effect on the next request.

Building on it

Do I have to use the SDK?
No. It is a plain JSON API over HTTP and the SDK is a convenience — about 400 lines you can read. Anything that speaks HTTP can drive it, including a native app on the same machine.
Can I ship it with my own product?
Yes, and there is nothing to buy or sign. Point your customers at the installer, or bundle it with yours. If you want your own name on the pairing dialog, or pairing pre-approved for your origin so your customers never see the dialog at all, get in touch and we will help you set it up.
How do I develop without a printer?
Add a printer with the file transport. Jobs are written to disk as raw byte streams, and POST /preview gives you the text or HTML rendering of any template against any payload.

Still stuck?

The troubleshooting guide goes deeper on printers specifically, and we answer email.