Unofficial React Native Epson TM printer bridge powered by Epson ePOS SDK Android v2.36.0 and Epson ePOS SDK iOS v2.36.0.
This fork is focused on stable printer flows, explicit platform behavior, and clear production verification.
- In scope: discovery, connection, print command APIs, status/settings, EasySelect helpers.
- Out of scope: non-printer Epson peripheral runtime APIs.
- Android: Epson ePOS SDK v2.36.0
- iOS: Epson ePOS SDK v2.36.0
See docs/SDK.md for artifact-level details.
- React Native app (bare or Expo prebuild workflow).
- Android New Architecture is required for this package.
- iOS minimum deployment target is 15.0.
yarn add react-native-esc-pos-printeror
npm install react-native-esc-pos-printerComplete platform setup in docs/INSTALLATION.md.
import React, { useEffect } from "react";
import { Button, View } from "react-native";
import {
Printer,
PrinterConstants,
usePrintersDiscovery,
} from "react-native-esc-pos-printer";
export default function App() {
const { start, printers } = usePrintersDiscovery();
useEffect(() => {
start({
autoStop: true,
timeout: 10000,
});
}, [start]);
const printFirstDiscovered = async () => {
const first = printers[0];
if (!first) return;
const printer = new Printer({
target: first.target,
deviceName: first.deviceName,
});
try {
await Printer.tryToConnectUntil(
printer,
(status) => status.online.status === "TRUE",
{ maxAttempts: 3 },
);
await printer.addTextAlign(PrinterConstants.ALIGN_CENTER);
await printer.addText("HELLO EPSON\n");
await printer.addFeedLine(1);
await printer.addCut(PrinterConstants.CUT_FEED);
await printer.sendData();
} finally {
await printer.disconnect();
}
};
return (
<View>
<Button title="Print" onPress={printFirstDiscovered} />
</View>
);
}More examples: docs/QUICK_START.md
import { EasySelect, EasySelectDeviceType } from "react-native-esc-pos-printer";
const qr = await EasySelect.createQR({
printerName: "TM-m30III",
deviceType: EasySelectDeviceType.TCP,
macAddress: "AA:BB:CC:DD:EE:FF",
});
const parsed = await EasySelect.parseQR(qr);EasySelect docs: docs/easyselect/EasySelect.md
PORTTYPE_BLUETOOTH_LEdiscovery filter is iOS-only.EasySelect.parseBeaconis iOS-only. Android returns unsupported.pairBluetoothDeviceperforms pairing on iOS, and resolves as a no-op on Android.- Discovery start may trigger Android location-settings resolution on supported API levels.
- iOS does not use the Android location-settings flow (parity success/failure events only).
EasySelect.parseNFCrequires platform NFC capability and enabled hardware/session support.- Android simulator does not represent real printer hardware behavior.
- Always use the exact
targetproduced by discovery/EasySelect.
- Documentation Index
- Installation
- Quick Start
- SDK Baseline
- Production Verification Matrix
- Troubleshooting
- Migration v2.27 to v2.36
- Architecture
- Platform Differences
- Best Practices
- Performance
- Android SDK user manual PDF
- Android SDK migration guide PDF
- iOS SDK user manual PDF
- iOS SDK migration guide PDF
Current integration verification for the v2.36 baseline is documented at:
MIT