
Research
2025 Report: Destructive Malware in Open Source Packages
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.
thermal-printer-ionic
Advanced tools
This plugin is a wrapper for the Android library for ESC/POS Thermal Printer.
$ cordova plugin add thermal-printer-cordova-plugin
$ ionic cordova plugin add thermal-printer-cordova-plugin
$ npm install thermal-printer-cordova-plugin
$ npx cap sync
Don't forget to add BLUETOOTH and INTERNET (for TCP) permissions and for USB printers the android.hardware.usb.host feature to the AndroidManifest.xml.
<uses-feature android:name="android.hardware.usb.host" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.INTERNET" />
You can easily import and use the ThermalPrinter plugin in your TypeScript-Projects.
import { ThermalPrinterPlugin } from 'thermal-printer-cordova-plugin/src';
declare let ThermalPrinter: ThermalPrinterPlugin;
And then use the following examples in your code.
Printing via Bluetooth is as easy as possible.
ThermalPrinter.printFormattedText({
type: 'bluetooth',
id: 'first', // You can also use the identifier directly i. e. 00:11:22:33:44:55 (address) or name
text: '[C]<u><font size='big'>Hello World</font></u>' // new lines with "\n"
}, function() {
console.log('Successfully printed!');
}, function(error) {
console.error('Printing error', error);
});
Notice: If not working please ensure that you have the printer connected. (Settings -> Bluetooth -> Pairing)
If you have other issues maybe you have not granted the android.permission.BLUETOOTH permission.
Printing via TCP is as easy as possible.
ThermalPrinter.printFormattedText({
type: 'tcp',
address: '192.168.1.123',
port: 9100,
id: 'tcp-printer-001', // Use an unique identifier for each printer i. e. address:port or name
text: '[C]<u><font size='big'>Hello World</font></u>' // new lines with "\n"
}, function() {
console.log('Successfully printed!');
}, function(error) {
console.error('Printing error', error);
});
Notice: If not working please ensure that your device can ping the printer. And the printer must be a POSPrinter! Also ensure that you're using the correct port. 9100 is default for the thermal printers.
ThermalPrinter.listPrinters({type: 'usb'}, function(printers) {
if (printers.length > 0) {
var printer = printers[0];
ThermalPrinter.requestPermissions(printer, function() {
// Permission granted - We can print!
ThermalPrinter.printFormattedText({
type: 'usb',
id: printer.id,
text: '[C]<u><font size='big'>Hello World</font></u>' // new lines with "\n"
}, function() {
console.log('Successfully printed!');
}, function(error) {
console.error('Printing error', error);
});
}, function(error) {
console.error('Permission denied - We can\'t print!');
});
} else {
console.error('No printers found!');
}
}, function(error) {
console.error('Ups, we cant list the printers!', error);
});
List available printers
| Param | Type | Description |
|---|---|---|
| data | Object | Data object |
| data.type | "bluetooth" | "usb" | Type of list: bluetooth or usb |
| successCallback | function | Result on success |
| errorCallback | function | Result on failure |
Print a formatted text and feed paper
See: https://github.com/DantSu/ESCPOS-ThermalPrinter-Android#formatted-text--syntax-guide
| Param | Type | Description |
|---|---|---|
| data | Array.<Object> | Data object |
| data.type | "bluetooth" | "tcp" | "usb" | List all bluetooth or usb printers |
| [data.id] | string | number | ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
| [data.address] | string | If type is "tcp" then the IP Address of the printer |
| [data.port] | number | If type is "tcp" then the Port of the printer |
| [data.mmFeedPaper] | number | Millimeter distance feed paper at the end |
| [data.dotsFeedPaper] | number | Distance feed paper at the end |
| data.text | string | Formatted text to be printed |
| successCallback | function | Result on success |
| errorCallback | function | Result on failure |
Print a formatted text, feed paper and cut the paper
See: https://github.com/DantSu/ESCPOS-ThermalPrinter-Android#formatted-text--syntax-guide
| Param | Type | Description |
|---|---|---|
| data | Array.<Object> | Data object |
| data.type | "bluetooth" | "tcp" | "usb" | List all bluetooth or usb printers |
| [data.id] | string | number | ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
| [data.address] | string | If type is "tcp" then the IP Address of the printer |
| [data.port] | number | If type is "tcp" then the Port of the printer |
| [data.mmFeedPaper] | number | Millimeter distance feed paper at the end |
| [data.dotsFeedPaper] | number | Distance feed paper at the end |
| data.text | string | Formatted text to be printed |
| successCallback | function | Result on success |
| errorCallback | function | Result on failure |
Get the printer encoding when available
| Param | Type | Description |
|---|---|---|
| data | Array.<Object> | Data object |
| data.type | "bluetooth" | "tcp" | "usb" | List all bluetooth or usb printers |
| [data.id] | string | number | ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
| [data.address] | string | If type is "tcp" then the IP Address of the printer |
| [data.port] | number | If type is "tcp" then the Port of the printer |
| successCallback | function | Result on success |
| errorCallback | function | Result on failure |
Close the connection with the printer
| Param | Type | Description |
|---|---|---|
| data | Array.<Object> | Data object |
| data.type | "bluetooth" | "tcp" | "usb" | List all bluetooth or usb printers |
| [data.id] | string | number | ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
| [data.address] | string | If type is "tcp" then the IP Address of the printer |
| [data.port] | number | If type is "tcp" then the Port of the printer |
| successCallback | function | Result on success |
| errorCallback | function | Result on failure |
Request permissions for USB printers
| Param | Type | Description |
|---|---|---|
| data | Array.<Object> | Data object |
| data.type | "bluetooth" | "tcp" | "usb" | List all bluetooth or usb printers |
| [data.id] | string | number | ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
| [data.address] | string | If type is "tcp" then the IP Address of the printer |
| [data.port] | number | If type is "tcp" then the Port of the printer |
| successCallback | function | Result on success |
| errorCallback | function | Result on failure |
Convert Drawable instance to a hexadecimal string of the image data
| Param | Type | Description |
|---|---|---|
| data | Array.<Object> | Data object |
| data.type | "bluetooth" | "tcp" | "usb" | List all bluetooth or usb printers |
| [data.id] | string | number | ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
| [data.address] | string | If type is "tcp" then the IP Address of the printer |
| [data.port] | number | If type is "tcp" then the Port of the printer |
| data.base64 | string | Base64 encoded picture string to convert |
| successCallback | function | Result on success |
| errorCallback | function | Result on failure |
FAQs
Cordova wrapper for ESC/POS Thermal Printer library
The npm package thermal-printer-ionic receives a total of 2 weekly downloads. As such, thermal-printer-ionic popularity was classified as not popular.
We found that thermal-printer-ionic demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.

Research
/Security News
A five-month operation turned 27 npm packages into durable hosting for browser-run lures that mimic document-sharing portals and Microsoft sign-in, targeting 25 organizations across manufacturing, industrial automation, plastics, and healthcare for credential theft.