Overview
A browser-native JavaScript SDK for integrating the DCENT hardware wallet into web applications. Retrieve addresses and sign transactions over WebHID or Bluetooth — no Bridge program to install.
WebHID · Bluetooth · CAIP-19 · BIP-44 · npm: dcent-web-connector
Looking for the previous API? The v1 guide is still available under v1 (legacy).
What it is
A developer-focused JavaScript SDK for integrating the DCENT hardware wallet into web apps. It runs entirely in the browser — no bridge program or native helper to install.
With it you can:
- Read a wallet address and public key for any supported network.
- Query device info — model, firmware version, connection state.
- Have the user sign a transaction, message, or typed data on the device.
Every method that reaches the device returns the same { header, body } response — the call shape does not change from one network to the next, and sign() and the chainId-scoped account reads identify the network with a chainId. The connection setters (setTimeOutMs, setConnectionListener, setSignProgressListener, setTransport, popupWindowClose) are local configuration and return void. You pick a transport once with setTransport() ('hid' for WebHID, 'ble' for Bluetooth); the first call opens the DCENT popup and later calls reuse it while it stays open — the user approves the action on the device there.
Requirements
| Requirement | Details |
|---|---|
| Device | A DCENT Biometric Wallet or a DCENT X. Get one at the DCENT store. |
| Browser | The bridge popup requires a browser that exposes WebHID (navigator.hid) or Web Bluetooth (navigator.bluetooth) — today the Chromium-based desktop browsers such as Chrome and Edge — and it is blocked on mobile user agents; elsewhere it shows an unsupported-browser screen. |
| Connection | USB (WebHID) or Bluetooth (Web Bluetooth), selected with setTransport(). No bridge program to install. |
| Firmware | Some networks and methods require a minimum firmware version, listed per model — DCENT Biometric Wallet (1.x~2.x line) and DCENT X (1.x line, from 1.0.0). The two lines are separate and not comparable. An unsupported request returns the firmware-update error, and the bridge prompts to update. |
| Extension | The connector runs unmodified inside a Chrome MV3 extension — measured in an extension tab and the side panel. A toolbar popup is unsuitable — measured: window.open returns null there and the popup is gone within 100 ms, so the call fails with "popup blocked by browser?". A background service worker has no window at all. MV3 CSP (script-src 'self') means the connector must ship inside your extension bundle. |
Install
npm install dcent-web-connector
Select a transport and read an address — a complete first call:
import dcent from 'dcent-web-connector'
dcent.setTransport('hid') // WebHID over USB ('ble' for Bluetooth)
const res = await dcent.getAddress({
chainId: 'eip155:1/slip44:60', // Ethereum mainnet
keyPath: "m/44'/60'/0'/0/0",
})
console.log(res.body.parameter.address) // "0x6A5C…"
Three things to learn first
| Concept | What it is |
|---|---|
| chainId | Full CAIP-19 network identifier, e.g. eip155:1/slip44:60 (a bare CAIP-2 reference such as eip155:1 is not resolved). Replaces v1 coinType. |
| keyPath | BIP-44 path, purpose 44' on DCENT for most chains. The exceptions are Cardano — its stake / governance surfaces need CIP-1852 (m/1852'/1815'/…) — and Bitcoin, whose BIP-49 / BIP-84 / BIP-86 accounts use m/49', m/84' and m/86'. Required on every sign call. |
| V1Response | Uniform { header, body } envelope returned by every call that reaches the device (the connection setters return void). |
How it works
Your app talks only to the connector. The connector opens a DCENT popup and reaches the device directly from the browser over WebHID or Bluetooth — there is no native helper to install:
No native app to install. Transport is selected in-page with setTransport() ('hid' = WebHID, 'ble' = Bluetooth).
Packages
Everything ships in the single npm package dcent-web-connector — there is no separate download. The source repository also contains:
src/— the connector library source.docs/— the per-family payload contract (v2-payload-contract.md) and a frozen snapshot of the original single-file guide (legacy-v2-dev-doc.html). This guide is now maintained here, not in that file.playground/— request presets used by the example page (accounts, EVM / non-EVM transactions, REST).
Example code
A runnable example page exercises the API end to end against a connected device:
Version history
Published releases of the dcent-web-connector npm package on the v2 line. The version jumps 0.16.0 → 2.0.0 to align the package version with the v2 API generation — there is no 1.x. Releases numbered 0.x belong to the v1 API; their history is listed on the v1 (legacy) page.
| Version | Date | Change |
|---|---|---|
2.1.0 | 2026-09-30 | Bitcoin Taproot spending through the multi-step builder: addBitcoinTransactionInput() now accepts 'p2tr', so a m/86' Taproot account can spend its own UTXOs with it. The builder helpers no longer keep a fixed list of script types — they check only the shape of type and leave the rest to the wallet, which answers -32602 for a well-formed input type it does not support. |
2.0.0 | 2026-08-27 | First v2 release. The 21 per-chain get*Signed* wrappers are replaced by a single sign({ method, chainId, payload }), chain identity moves from the coinType enum to CAIP-19 chainId, and, unlike v1 (per the v1 guide), no DCENT Bridge native app is required — the connector reaches the device over WebHID or Bluetooth. See Migration. |
Support
Need help integrating the connector, or hitting something this guide does not cover?
Email contact@iotrust.kr — include the chainId, the method you are calling, the connector version, and the device model/firmware if the issue involves a device.
- ↗ GitHub Issues — bugs and feature requests