@zenuinebit/receipt
v0.1.0
Published
Render POS receipts as plain text, ESC/POS thermal-printer bytes, or an 80mm/58mm HTML slip.
Readme
@zenuinebit/receipt
Turn a sale into a receipt: plain text, ESC/POS bytes for thermal printers, or an HTML slip sized for a 58mm or 80mm roll. Amounts are integers in minor units.
import { fromCart, renderText, renderEscPos, renderHTML } from "@zenuinebit/receipt";
const receipt = fromCart(cart, { // cart from @zenuinebit/cart
store: { name: "ZenuineBit Store", address: ["1 Main St"] },
number: "R-0001",
date: "2026-10-12 14:05",
payments: [{ method: "Cash", amount: 50000 }],
footer: ["Thank you!"],
});
renderText(receipt, { paper: "80mm" }); // string for logs, SMS, or a <pre>
renderHTML(receipt, { paper: "58mm" }); // standalone page: show it, email it, or window.print()
const bytes = renderEscPos(receipt, { paper: "80mm", openDrawer: true });
// send `bytes` to the printer as-is (USB, network port 9100, Web Serial, ...)You can also build ReceiptData by hand if you are not using @zenuinebit/cart.
Notes
- Amounts are printed as plain numbers with the header "Amounts in INR", because most printers cannot print symbols such as ₹.
- ESC/POS output uses the printer's default character set: accents are removed and other non-ASCII characters print as
?. - 80mm paper defaults to 48 columns and 58mm to 32. Some printers differ, so pass
columnsif lines wrap early or overflow. - Not included: logos, barcodes/QR on the slip, and sending data to the printer. Those depend on your printer model and connection.
