Native Direct Printing

BillBook Printer Helper v0.3

A lightweight background utility that connects your browser directly to thermal receipt and standard desktop printers. Prints bills instantly without browser print dialogues.

Download Installer for Windows
Only for Windows Safe & Open Source ~8 MB

Windows Security Warning Guide (SmartScreen Bypass)

Because the BillBook Printer Helper is free and open-source, it does not yet have a commercial digital certificate ($400/year). Windows Defender may display a blue warning box saying "Windows protected your PC". Follow these simple steps to install:

1 Click "More Info"

When launching the installer, Windows Defender SmartScreen might block it. Simply click the "More info" link under the description text.

Windows protected your PC
Microsoft Defender SmartScreen prevented an unrecognized app from starting. Running this app might put your PC at risk.

More info

2 Click "Run Anyway"

After clicking "More info", the publisher detail will be shown as "Unknown Publisher". Click the "Run anyway" button to launch the setup wizard.

Windows protected your PC
Microsoft Defender SmartScreen prevented an unrecognized app from starting. Running this app might put your PC at risk.
App: BillbookPrintHelper-Setup-v0.3.exe
Publisher: Unknown publisher

Key Features

  • Instant Printing: Automatically routes your invoices straight to the selected thermal/USB printer without print popups.
  • System Tray Execution: Sits quietly in the background near the clock. Easy right-click exit and configuration.
  • Start with Windows: Option to run automatically when the computer boots up, so you never have to open it manually.
  • No Admin Privileges Required: Safe to run and install. Uses standard localhost bridge port 9100.
  • SumatraPDF Bundled: Built-in rendering engine for accurate PDF parsing and printing.

Setup Steps

1

Download and Install

Download the installer above and follow the Inno Setup wizard. Check "Start automatically with Windows" during install.

2

Verify Running Status

Look for the printer helper icon in your system tray (near the clock). A green dot indicates it is active and ready on Port 9100.

3

Configure in POS Settings

Open BillBook POS -> Settings -> Printers. Connect to local helper, select your thermal printer from the list, and turn on Direct Printing.

Developer API Integration Guide (v0.3)

Are you a developer looking to integrate direct silent printing into your own web applications? You can connect to the active BillBook Printer Helper locally via standard JavaScript fetch requests.

Security & Token Setup

Starting with v0.3, the helper only accepts requests from the local machine and requires a valid X-Print-Token header. The same token must be configured in both the helper and your server.

  1. Generate a strong random token and set PRINTER_HELPER_TOKEN in your server's .env file.
  2. Compile the helper with the same token in the ExpectedPrintToken constant.
  3. Expose the token to your frontend (e.g. window.PRINT_TOKEN or window.POS_CONFIG.print_token).
  4. Send 'X-Print-Token': yourToken in every fetch to localhost:9100.
  5. Add http://localhost:9100 to your CSP connect-src directive.

The helper binds to the loopback interface only, so remote machines cannot connect even if port 9100 is reachable.

1. Fetch Connected Printers (GET `/printers`)

Retrieve a JSON array of all printers installed on the client's Windows machine:

fetch('http://localhost:9100/printers', {
  headers: { 'X-Print-Token': (window.PRINT_TOKEN || '') }
})
  .then(res => res.json())
  .then(printers => {
    console.log("Installed printers:", printers);
  })
  .catch(err => console.error("Helper is not running", err));

2. Direct Silent Printing (POST `/print`)

Send a print job directly to a specific printer without opening any browser dialogs. The body must be a JSON object containing the printer name and the absolute URL of the PDF:

fetch('http://localhost:9100/print', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Print-Token': (window.PRINT_TOKEN || '')
  },
  body: JSON.stringify({
    printer: 'XP-80', // Replace with the selected printer name
    url: 'https://example.com/invoices/bill-101.pdf' // Absolute PDF URL
  })
})
  .then(res => res.json())
  .then(data => {
    if (data.status === 'success') {
      console.log("Printed successfully!");
    } else {
      console.error("Print failed:", data.message);
    }
  })
  .catch(err => console.error("Network error connecting to helper", err));
Note: The helper validates the X-Print-Token before processing any request. If the token is missing or incorrect, the helper returns 403 Forbidden. When a new third-party domain makes a request, the existing origin-permission dialog may also appear on the user's desktop.

Frequently Asked Questions & Troubleshooting

Is it safe to install?
Yes, the BillBook Printer Helper is 100% safe and open-source. It only runs locally on your PC (http://localhost:9100) to bridge the browser with your printer. No invoice data is sent outside your computer.
How do I know the helper is working?
Once installed, check your system tray (bottom-right of your screen next to the system clock). You should see a small printer icon. Right-click it to check the status, view connected printers, or toggle "Start with Windows".
What if the port is in use or the icon has a red dot?
A red dot means the port 9100 is already in use by another application. Try closing any other active printing services or raw TCP listeners on port 9100, and then restart the BillBook Printer Helper.
Does this work on macOS or Linux?
Currently, the Printer Helper is only supported on Windows (Windows 7, 8, 10, and 11). We plan to support macOS and Linux in the future, but currently, only the Windows installer is available.