Skip to Content
HardwareOverview

Introduction

Developer-focused documentation for integrating OneKey hardware in Web and Native apps.

Hardware SDK 1.2.x supports Protocol V1 and Protocol V2 through the same JavaScript API. New here? Start with Getting Started.

This page is the orientation layer — pick the right SDK package for your platform and install it. For the end-to-end walkthrough (search → events → PIN/passphrase → first signing call) plus parameters, events, and error handling, see the Core API Guide.

Choose Your Transport

USB integrations should use @onekeyfe/hd-common-connect-sdk; use @onekeyfe/hd-web-sdk only when the host mandates an iframe/plugin setup.

Connection Methods

MethodDescriptionSupported devices
USB / WebUSBWired USB; browser via WebUSB; Node.js / CLI via node-usbDevices with a compatible USB interface and firmware
Bluetooth BLE (native)Native apps over BLE (not Web Bluetooth); requires OS Bluetooth & permissionPro, Pro 2, Neo, Touch, Classic 1s / Classic 1s Pure; Mini does not support BLE
Air-Gap (QR)Offline QR signingOneKey Pro and Pro 2; Neo has no camera

Platform Guide

Platform (Stack)TransportSDK PackageGuide
Web (Browser)WebUSB@onekeyfe/hd-common-connect-sdk WebUSB Connection Guide
React NativeBLE@onekeyfe/hd-ble-sdk React Native BLE
Android (Native)BLE@onekeyfe/hd-common-connect-sdk Android BLE
iOS (Native)BLE@onekeyfe/hd-common-connect-sdk iOS BLE
FlutterBLE@onekeyfe/hd-common-connect-sdk Flutter BLE

Low-level protocol and custom channels: Low-Level Transport Plugin & Protocol

Install SDK

Pick one entry by runtime:

# Web / desktop WebUSB (recommended) npm i @onekeyfe/hd-common-connect-sdk # React Native BLE npm i @onekeyfe/hd-ble-sdk # Native host with low-level plugin (Android/iOS/Flutter bridge) npm i @onekeyfe/hd-common-connect-sdk # Plugin iframe host only (plugin-only) npm i @onekeyfe/hd-web-sdk

Transport details:

Initialize the SDK

Use the initialization method that matches your runtime—avoid mixing SDK entries.

Web / Desktop WebUSB

Use @onekeyfe/hd-common-connect-sdk:

import HardwareSDK from '@onekeyfe/hd-common-connect-sdk'; const initialized = await HardwareSDK.init({ env: 'webusb', debug: false, fetchConfig: true, }); if (!initialized) throw new Error('SDK initialization failed');

React Native BLE

Use @onekeyfe/hd-ble-sdk:

import HardwareSDK from '@onekeyfe/hd-ble-sdk'; const initialized = await HardwareSDK.init({ debug: false, }); if (!initialized) throw new Error('SDK initialization failed');

Native Bridge / Low-level

Use @onekeyfe/hd-common-connect-sdk:

import HardwareSDK from '@onekeyfe/hd-common-connect-sdk'; import type { LowlevelTransportSharedPlugin } from '@onekeyfe/hd-transport'; // Provide an implemented native BLE bridge; this is a preparation fragment. declare const plugin: LowlevelTransportSharedPlugin; const initialized = await HardwareSDK.init({ env: 'lowlevel', debug: false, fetchConfig: true, }, undefined, plugin); if (!initialized) throw new Error('SDK initialization failed');
EnvironmentUse Case
webusbBrowser WebUSB (no iframe)
lowlevelNative apps bridging JS via low-level adapter
react-nativeCustom RN bridge or Electron BLE
emulatorBuilt-in emulator transport

Plugin Iframe Host

Use @onekeyfe/hd-web-sdk (plugin-only). The SDK default iframe host is https://jssdk.onekey.so/<installed-package-version>/ from getSDKVersion(). Omit connectSrc unless you host the iframe yourself.

This docs build tracks Hardware SDK 1.2.8-alpha.12. The default iframe host is https://jssdk.onekey.so/1.2.8-alpha.12/. Omit connectSrc so the SDK uses the installed package version. Override it only for a self-hosted iframe, and match the installed @onekeyfe/hd-web-sdk version.

import HdWebSdk from '@onekeyfe/hd-web-sdk'; const HardwareSDK = HdWebSdk.HardwareWebSdk; const initialized = await HardwareSDK.init({ debug: false, // omit connectSrc — SDK fills https://jssdk.onekey.so/<installed-version>/ }); if (!initialized) throw new Error('SDK initialization failed');

Next steps

After HardwareSDK.init(...) returns, follow Getting Started for the first address, then the Core API Guide for the rest of the flow:

Device and Transport Compatibility

Support status for Bluetooth, USB, Air-Gap, and protocol family

DeviceProtocolBluetoothUSBAir-Gap
OneKey Classic 1s
OneKey Classic 1s
OneKey Classic 1s
V1SupportedSupportedNot supported
OneKey Classic 1s Pure
OneKey Classic 1s Pure
Battery-free edition
V1SupportedSupportedNot supported
OneKey Mini
OneKey Mini
Compact USB-only wallet
V1Not supportedSupportedNot supported
OneKey Touch
OneKey Touch
Full touchscreen experience
V1SupportedSupportedNot supported
OneKey Pro
OneKey Pro
Premium with fingerprint security
V1SupportedSupportedSupported
OneKey Pro 2
OneKey Pro 2
Protocol V2 professional edition
V2SupportedSupportedSupported
OneKey Neo
OneKey Neo
Protocol V2 compact edition, no camera
V2SupportedSupportedNot supported

Air-Gap Mode: OneKey Pro and Pro 2 support air-gapped signing via QR codes — no USB or Bluetooth connection required, with details reviewed on the device before signing. See Air-Gap Integration for details.

Core Packages

PackagePurposeNPMVersion
@onekeyfe/hd-common-connect-sdkUnified SDK surface for Web/Native; recommended entry for transportsnpm npm
@onekeyfe/hd-ble-sdkPure React Native BLE stack (recommended for RN projects)npm npm
@onekeyfe/hd-transport-react-nativeReact Native transport side-effects/bridgenpm npm
@onekeyfe/hd-transport-web-deviceWeb transport for device access in web contextsnpm npm
@onekeyfe/hd-transport-emulatorEmulator transport (develop and test without a physical device)npm npm
@onekeyfe/hd-transport-httpHTTP bridge transportnpm npm
@onekeyfe/hd-transport-lowlevelLow-level host adapter contract (for native integrations)npm npm
@onekeyfe/hd-coreCore events, constants, message wiringnpm npm
@onekeyfe/hd-sharedShared utilities and typesnpm npm
@onekeyfe/hd-web-sdkWeb SDK wrapper (not recommended; prefer hd-common-connect-sdk)npm npm

Further reading

Support

For users: This documentation is primarily for developers. If you encounter issues while using our products, please consult our Help Center or submit a support ticket.


Try It Out

Last updated on