Print receipts from Medusa Admin straight to a thermal printer with QZ Tray: signed requests, no print dialog, no Allow pop-ups.
Print receipts from Medusa Admin straight to a thermal receipt printer. One click on an order, the receipt comes out. No browser print dialog, no "Allow this website?" pop-ups.
Built and used in production by MazalPOS, the point of sale for salons, spas and retail stores that runs on Medusa v2.
Works with any printer QZ Tray can see. Used daily on a Star TSP100 with 80mm paper.
The first time it runs, the plugin creates a 2048-bit RSA key and a self-signed certificate for your store and keeps them in your database. Once a computer trusts that certificate (tick "Remember" in QZ's prompt, or run the Windows setup file), it prints silently from then on. You can use a certificate bought from QZ instead (see Options).
Add it to :
Run the migration:
npx medusa db:migrateThen install QZ Tray on each computer that prints (or download the Windows setup file from Settings → Receipt printer), pick the printer, and print a test receipt.
| Option | Default | What it does |
|---|---|---|
| Name on the generated certificate and the Windows setup file. | ||
| none | Your own PEM certificate, e.g. one issued by QZ. Use with . | |
| none | The PEM private key for . Keep it in an environment variable. |
All routes sit under and need an authenticated admin user.
| Route | Returns |
|---|---|
| The store's public certificate (PEM). | |
| for . | |
| The one-time Windows setup file (). Holds only the public certificate. |
Made by MazalPOS. We run Medusa v2 behind our iPad till, staff apps and back office for live stores in Las Vegas, and this is the printing code from our back office, opened up for the Medusa community. Issues and pull requests are welcome.
MIT licensed. QZ Tray is a trademark of QZ Industries, LLC; this plugin is not affiliated with QZ Industries.
npm install medusa-plugin-qz-tray1module.exports = defineConfig({2 // ...3 plugins: [4 {5 resolve: "medusa-plugin-qz-tray",6 options: {7 storeName: "My Store",8 },9 },10 ],11})