Openloop SDK

Specifications

Version v0.3.1 | Last updated 2026-06-12
Haudi Crypto, Inc. President and CEO Kazunori Asada


Architecture Overview

What is the Openloop SDK?

The Openloop SDK is a multi-language library for communicating with the Openloop hardware wallet.

Language / format Main deliverables Purpose
TypeScript / npm @openloop/sdk-core, @openloop/transport-* Web dApps, Node.js / Electron, React Native
Swift / SPM (planned) Native iOS apps
Kotlin / Maven (planned) Native Android
C# / NuGet (planned) Native Windows

About licensing: Use of the Openloop SDK requires a license agreement with Haudi Crypto, Inc. We can also customize the SDK to suit your requirements — please feel free to contact us at info@crypto.haudi.jp.

The single most important principle: private keys stay inside the device and never leave it. The SDK only sends and receives APDU (Application Protocol Data Unit) commands. All signing is performed inside the device’s secure element.

Layer Structure

Diagram 0

What each layer does

Layer Role
dApp User interface, transaction construction
App class Builds chain-specific APDU commands and parses responses
ITransport Physical communication with the device (USB / BLE / WebSocket, etc.)
Device Private key management, signing, user approval

Security Model

What the SDK does

What the SDK does not do

Security on the device side

Supported Chains

Chain App class Elliptic curve BIP44 coin_type
Ethereum (EVM) EthereumApp secp256k1 60'
Bitcoin BitcoinApp secp256k1 0' (mainnet), 1' (testnet)
Solana SolanaApp Ed25519 501'
TRON TronApp secp256k1 195'
XRP Ledger XrpApp Ed25519 / secp256k1 144'

EVM-compatible chains

EthereumApp works not only with Ethereum but with any EVM-compatible chain. Specify the chain through the chainId parameter of signPersonalMessage and signTypedData.

Transport Connection Methods

The SDK offers six connection methods, covering a wide range of platforms.

Transport Package Use case
WebHID (USB) @openloop/transport-webhid Chrome/Edge on desktop
Web Bluetooth @openloop/transport-webble Chrome/Edge + Android
LocalWS @openloop/transport-local All browsers (via Connect)
Safari Extension @openloop/transport-safari iOS Safari
USB HID (native) @openloop/transport-usb Node.js / Electron
BLE (native) @openloop/transport-ble Node.js / Electron
WalletConnect Built into @openloop/sdk-core All browsers (remote signing)

See the Transport Guide for details.

Package List

npm packages (TypeScript)

Package Description Dependencies
@openloop/sdk-core Core library (App, Types, Errors, Constants, WcTransport) none
@openloop/transport-webhid WebHID (USB) transport sdk-core
@openloop/transport-webble Web Bluetooth transport sdk-core
@openloop/transport-local LocalWS transport sdk-core
@openloop/transport-safari Safari extension transport sdk-core (peer)
@openloop/transport-usb Native USB HID transport sdk-core (peer), node-hid
@openloop/transport-ble Native BLE transport (Node.js / Electron) sdk-core (peer), noble

Dependency graph

Diagram 1

sdk-core is a pure TypeScript package with no dependency on browser APIs or native modules. Each transport package supplies the platform-specific implementation. Swift / Kotlin / C# libraries for native apps are planned.

APDU Protocol Overview

Communication between the SDK and the device uses APDU (Application Protocol Data Unit) commands.

Command structure

[CLA] [INS] [P1] [P2] [Lc] [Data...]
Field Size Description
CLA 1 byte Class byte (0xE0: Ledger-compatible, 0xF0: Openloop-specific)
INS 1 byte Instruction code
P1 1 byte Parameter 1 (chunking control, etc.)
P2 1 byte Parameter 2 (curve selection, etc.)
Lc 1 byte Data length
Data Lc bytes Command data

Response structure

[Data...] [SW1] [SW2]
Field Size Description
Data variable Response data
SW1-SW2 2 bytes Status word (0x9000 = success)

CLA bytes

CLA Purpose
0xE0 Ledger-compatible commands (ETH, BTC getAddress, SOL, TRON, XRP)
0xF0 Openloop-specific commands (chain_id-aware signing, PSBT, BTC xpub)

See Error Handling for the full list of APDU status words.

Next Steps