npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@pqthanh/expo-datawedge

v0.1.2

Published

My new module

Readme

@pqthanh/expo-datawedge (DataWedge Expo Module)

🎯 Overview

This is an Expo Module (using the Expo Modules SDK in Kotlin) designed to facilitate two-way communication with the Zebra Technologies DataWedge Intents API on Android devices.

It allows your React Native/Expo application to send commands to DataWedge (e.g., Soft Scan Trigger, Profile Configuration) and receive the resulting barcode scan data or API responses back via Android Broadcast Intents.

Platform Compatibility: This module is strictly for Android devices running Zebra DataWedge.

✨ Features

  • Send API Commands: Easily send any DataWedge API command using the sendBroadcastWithExtras method, including complex configuration objects (e.g., SET_CONFIG).

  • Real-time Scan Data: Listen for barcode scan data broadcasted by DataWedge profiles.

  • API Result Reception: Receive responses from critical DataWedge API calls (e.g., ENUMERATE_SCANNERS, configuration status).

  • Backward Compatibility: Includes support for both the new V2 broadcast format and the older V1 (deprecated) format.

  • Kotlin & Expo SDK: Built with modern Kotlin on the robust Expo Modules SDK for enhanced stability and modern Android API compliance (including Android 13+ broadcast restrictions).

🚀 Installation

This module requires a custom build of your Expo application.

  1. Install the package:
npm install @pqthanh/expo-datawedge
# or
yarn add @pqthanh/expo-datawedge
# or
pnpm add @pqthanh/expo-datawedge
  1. Rebuild your application: Since this is a native module, you must use expo prebuild or run the development build.
npx expo run:android

💻 Basic Usage (JavaScript/TypeScript)

The module exposes three main events for listening to DataWedge broadcasts.

import DataWedgeIntents from "@pqthanh/expo-datawedge";

// 1. Register the receiver in Native code (Crucial Step)
// This should match the Action/Category set in your DataWedge Profile settings.
// Example: Register to listen for the Action 'com.myapp.ACTION'
if (Platform.OS === "android") {
  DataWedgeIntents.registerBroadcastReceiver(
    ["com.myapp.ACTION"],
    ["android.intent.category.DEFAULT"]
  );
}

// 2. Subscribe to the event
const subscription = DataWedgeIntents.addListener(
  "onReceive", // Use this for V2 API results and scan data
  (intent) => {
    console.log("DataWedge Intent Received:", intent);

    // Example: Extract scan data from the intent extras
    const scanData = intent["com.symbol.datawedge.data_string"];
    const labelType = intent["com.symbol.datawedge.label_type"];

    if (scanData) {
      console.log(`Scanned Data: ${scanData} (${labelType})`);
    }
  }
);

// Don't forget to unsubscribe when the component unmounts
// return () => subscription.remove();

// 3. Send a command to DataWedge (e.g., Soft Trigger Start)
const SOFT_TRIGGER_START = "com.symbol.datawedge.api.SOFT_SCAN_TRIGGER";
const ACTION_TOGGLE = "START_SCANNING";

DataWedgeIntents.sendBroadcastWithExtras(SOFT_TRIGGER_START, {
  "com.symbol.datawedge.api.SOFT_SCAN_TRIGGER": ACTION_TOGGLE,
});