TypeScript SDK and demo app for scanning checks with a Digital Check CX35 scanner from the browser. The browser communicates directly with the scanner over USB/RNDIS via a Chrome extension — no native drivers or server-side components required.
scanner.mov
- Digital Check CX35 scanner connected via USB
- Google Chrome
- Scanner configured with HTTP enabled and CORS set to
*(one-time setup via scanner admin UI)
cd web
npm install
npm startLoad the Chrome extension from extension/ via chrome://extensions (developer mode → Load unpacked).
Open http://localhost:3000 in Chrome.
The SDK runs entirely in the browser. A Chrome extension proxies HTTP requests to the scanner's embedded web server at http://192.168.2.1 (the scanner's fixed RNDIS IP). The extension is needed because browsers block cross-origin requests to local network devices.
Browser page
└── SDK (window.postMessage)
└── Chrome extension (service worker)
└── fetch() → http://192.168.2.1/securelink
└── CX35 scanner (USB/RNDIS)
import { isExtensionAvailable, ScannerSession } from "./sdk";
if (await isExtensionAvailable()) {
const session = new ScannerSession();
await session.connect();
await session.setParameters({
fgsEnabled: "true",
rgsEnabled: "true",
MicrEnabled: "true",
});
const result = await session.scanOne();
console.log(result?.micr.routingNumber, result?.micr.accountNumber);
await session.disconnect();
}