# POS Hardware for Custom Apps: Printers, Drawers, Scanners

> Published: 2026-10-27
> Updated: 2026-10-27
> Author: Mathias Nielsen
> Category: Hardware
> Canonical: https://finalpos.com/blog/pos-hardware-for-custom-apps

Your AI-built POS looks finished until it meets a receipt printer. Here is exactly what each piece of POS hardware needs to work with a custom app, which ones need Apple approval, and how to avoid the slowest path.

POS hardware for custom apps is where most AI-built point-of-sale projects stall. The checkout looks finished in the preview, then the receipt printer stays silent, the cash drawer never opens and the card reader will not pair. None of that is a coding problem. Each device connects in a specific way, and some connections need approval from Apple and the device maker before your app is allowed to use them.

This guide goes device by device: how each one connects, what it needs on iOS and Android, and which choices save you weeks. The short version: pick your connection type before you pick your printer.

![POS hardware for custom apps: receipt printer, cash drawer, barcode scanner and tablet POS on a counter](https://storage.googleapis.com/final-os-media/media/43399b6a-0d29-48b6-84dd-88ef01fcb193/generated/fbe670be1a7d73ed-pos-hardware-for-custom-apps-hero.png)

## Why is hardware where AI-built POS apps stall?

Because an AI can write code against a printer SDK, but it cannot grant your app permission to use the printer. Three things block a vibe-coded POS at the counter:

- **Platform rules.** iOS only lets an app talk to Bluetooth Classic and Lightning/USB accessories that Apple's MFi programme has approved for that app.
- **The browser.** Safari has no Web Bluetooth, so a web POS on iPad cannot reach Bluetooth hardware at all.
- **Testing.** Every printer, drawer and reader behaves slightly differently, and you only find out on the real device.

If you are building from scratch, our pillar on how to [build your own POS system with AI](/en-US/blog/build-your-own-pos-system-with-ai) covers the payments and deployment walls too. This page is about everything you plug in.

## What does each receipt printer connection need on iOS?

The connection type decides your approval burden, not the brand. Here is the whole picture for an iPad or iPhone POS:

| Connection | MFi app approval on iOS | Works from a browser | Best for |
| --- | --- | --- | --- |
| Bluetooth Classic | Yes, per printer maker | No | Mobile printing where the printer is already MFi certified |
| Bluetooth LE | No | No (Safari has no Web Bluetooth) | Mobile printing without the MFi step |
| Network (Ethernet or Wi-Fi) | No | Yes, with WebPRNT or ePOS-Print models | Fixed counters, several stations sharing a printer |
| Lightning or USB | Yes | No | Single-station counters with supported models |

On Android, none of these needs Apple's approval; you use the printer maker's Android SDK and Android's Bluetooth permissions. For the full comparison by store type, see [Bluetooth, BLE or network: choosing a receipt printer for an iPad POS](/en-US/blog/bluetooth-vs-network-receipt-printer).

## How does MFi app approval work for printers?

MFi app approval is Apple's permission for your specific app to talk to a specific accessory over Bluetooth Classic or Lightning/USB. You do not apply to Apple yourself. The printer maker does it for you:

1. Download the printer maker's iOS SDK and enrol in the Apple Developer Program.
2. Build your app using the maker's protocol name for that printer.
3. Submit your app details through the maker's registration form.
4. The maker submits your app to Apple's MFi programme.
5. Once Apple has reviewed it, the maker sends you an MFi Product Plan ID (PPID).
6. Submit your app to the App Store with the PPID in the App Review notes.

Star Micronics documents exactly this sequence and says approval may take one to two weeks ([Star's MFi process](https://star-m.jp/eng/products/s_print/apple_app_mfi.html)). Epson runs the same model for its MFi printers over Bluetooth or Lightning-to-USB, and Zebra calls it whitelisting. Two things catch people out: the PPID is tied to the printer models you registered, so adding a new model can mean another round, and forgetting the PPID in your review notes gets the app rejected.

Deep dives: [do you need MFi approval to print receipts from an iPad app](/en-US/blog/mfi-printer-app-approval), [how to connect a Star Micronics printer to your own POS app](/en-US/blog/star-micronics-printer-custom-app), [how to print to an Epson TM printer from a custom POS](/en-US/blog/epson-epos-sdk-custom-pos) and [how to print to a Zebra label printer from an iOS app](/en-US/blog/zebra-label-printer-ios-app).

## Can a web-based POS print receipts?

Yes, but only over the network. A browser cannot reach Bluetooth printers on iPad, and the standard browser print dialog is the wrong tool for a till: it asks questions, picks the wrong paper and slows every sale.

What works is a network printer that accepts print jobs from a web page. Star's WebPRNT and Epson's ePOS-Print are the two common options: your web app sends the receipt straight to the printer's IP address. The trade-offs are network setup at every store and no printing when the network is down. Full guide: [how to print receipts from a web app without Bluetooth](/en-US/blog/print-receipt-from-web-app).

## How does a cash drawer open from a custom POS?

Through the printer, in most setups. A standard POS cash drawer plugs into the receipt printer's drawer-kick port with an RJ11 or RJ12 cable. Your app sends the printer a drawer-open command, and the printer sends a short electrical pulse that releases the drawer.

That means two things for your build. The drawer works only once printing works, and a browser POS can open a drawer if it can print to a network printer with the drawer attached. USB and network drawers exist but are less common. Log every drawer open, especially no-sale opens, because cash reconciliation depends on it. More in [how a cash drawer opens: kick codes and custom POS apps](/en-US/blog/cash-drawer-kick-custom-pos).

## Do barcode scanners need an SDK?

Usually not. Most scanners ship in keyboard (HID) mode: each scan arrives as if someone typed the barcode and pressed Enter. That works in any native app and any web page, which makes scanners the easiest peripheral to support.

Two details still matter. Your app has to catch scans even when no text field is focused, and it should tell a fast scan apart from a person typing. SDK mode adds configuration, battery status and richer data, and phone cameras can scan at low volume. Guide: [barcode scanners in a custom POS app: HID mode vs SDK](/en-US/blog/barcode-scanner-pos-app).

## What about kitchen displays, customer displays and label printers?

These are where custom checkouts often earn their keep, and each has its own shape:

- **Kitchen display systems (KDS)** replace printed tickets. The screen is easy; reliable real-time routing to stations, bump and recall, and offline behaviour are the hard parts. See [should you build a kitchen display system](/en-US/blog/build-kitchen-display-system).
- **Customer-facing displays** show the cart, totals and tip prompts. The work is keeping cart state in sync between two screens. See [customer-facing displays for a custom POS app](/en-US/blog/customer-facing-display-pos).
- **Label printers** print shelf labels, price tags and order labels. On iOS, Bluetooth Classic label printers follow the same MFi model as receipt printers, which is why Zebra asks for your bundle ID and protocol strings before whitelisting your app.

Before any of it goes live, run the [POS hardware testing checklist](/en-US/blog/pos-hardware-testing-checklist) on the exact devices you will ship.

## Which POS hardware should a custom build start with?

If you are building from scratch, choose hardware that removes approval steps:

| Need | Lowest-friction choice | Why |
| --- | --- | --- |
| Receipt printer, fixed counter | Network printer with web printing support | No MFi step, shareable, works from a browser |
| Receipt printer, mobile | Bluetooth LE model | No MFi step on iOS |
| Cash drawer | Printer-driven drawer | No extra connection to support |
| Scanner | Keyboard (HID) mode scanner | Works everywhere without code |
| Card payments | Your payment provider's certified reader or Tap to Pay | Only certified hardware can take cards |

Card readers are a category of their own because only readers certified with your payment provider can process cards. Our pillar on how to [accept card payments in a custom POS app](/en-US/blog/accept-card-payments-custom-pos-app) covers readers, Tap to Pay and smart terminals.

## Can you skip the hardware SDKs entirely?

Yes, if your checkout runs on a platform that already did the integration. That is how Final works. Your AI builds the checkout in Flow Studio, and the station it runs on handles the hardware:

- **Native Stations** run the Final POS app on Apple and Android devices and connect card readers, Tap to Pay, receipt printers and cash drawers. See [how to set up a Native Station](/help/set-up-a-native-station).
- **Virtual Stations** run in any browser for screens that do not need local hardware. The difference is spelled out in [Native Station vs. Virtual Station](/help/native-vs-virtual-station).
- **Several printers** can be routed by tag, for example counter and kitchen. See [multi-printer routing on a Station](/help/how-to-set-up-multi-printer-routing-on-a-station).

Your checkout asks to print or open the drawer; the station does the rest. The trade-off is honest: you use the hardware Final supports rather than any device on the market, and hardware is bought at the listed price, as explained in [how Final POS pricing works](/help/how-final-pos-pricing-works). For most stores that list covers the counter. If you are building the whole POS yourself, start from [build your own POS system with AI](/en-US/blog/build-your-own-pos-system-with-ai).

## FAQ

**Q: What hardware does a custom POS need?**
A: At minimum a device to run it on, a receipt printer and a way to take cards. Most stores add a cash drawer and a barcode scanner, and restaurants often add a kitchen display or a customer-facing display.

**Q: Do all receipt printers need MFi approval for iPad apps?**
A: No. Only printers connected over Bluetooth Classic or Lightning/USB need MFi app approval on iOS. Bluetooth LE printers and network (Ethernet or Wi-Fi) printers do not.

**Q: How do I get MFi approval for a printer?**
A: You submit your app details to the printer maker, such as Star Micronics, Epson or Zebra. They submit to Apple's MFi programme and send you a PPID, which you put in the App Review notes when you submit your app.

**Q: How do I open a cash drawer from my app?**
A: Most cash drawers plug into the receipt printer's drawer-kick port. Your app sends the printer a drawer-open command and the printer pulses the drawer open.

**Q: Do barcode scanners need an SDK?**
A: Not in keyboard (HID) mode, where each scan arrives as typed text in any app or web page. An SDK adds configuration and richer data but is optional for most stores.

**Q: Can a web-based POS print receipts?**
A: Yes, to network printers that accept web print jobs, such as Star WebPRNT or Epson ePOS-Print models. Safari on iPad has no Web Bluetooth, so a browser cannot reach Bluetooth printers.