Skip to main content
@cofhe/sdk is the successor to cofhejs, redesigned around an explicit, builder-pattern API that gives you full control over encryption, decryption, and permit management.

Why migrate?

  • Explicit API — no more implicit initialization or auto-generated permits. Every action is opt-in.
  • Builder patternencryptInputs, decryptForView, and decryptForTx use a chainable builder so you can set overrides (account, chain, callbacks) before calling .execute().
  • decryptForTx featurecofhejs does not provide an API for generating decryption signatures for on-chain usage.
  • Deferred key loading — FHE keys and TFHE WASM are fetched lazily on the first encryptInputs call, not during initialization.
  • Better multichain support — configure multiple chains up front and override per-call.
  • Structured errors — typed CofheError objects with error codes replace the Result wrapper.

Requirements

  • Node.js 18+
  • TypeScript 5+
  • Viem 2+

Installation

Remove cofhejs and install @cofhe/sdk:

1. Initialization

The single cofhejs.initializeWithEthers(...) / cofhejs.initializeWithViem(...) call is replaced by a three-step flow: create a config, create a client, then connect. FHE keys and WASM are no longer fetched eagerly during init — they are deferred until the first encryptInputs call.

Before (cofhejs)

After (@cofhe/sdk)

2. Encrypting inputs

cofhejs.encrypt(...) is replaced by a builder: client.encryptInputs([...]).execute().

Before (cofhejs)

After (@cofhe/sdk)

The Encryptable factory functions (Encryptable.uint32(...), Encryptable.bool(...), etc.) work the same way in both libraries.

3. Decrypting / Unsealing

cofhejs has a single unseal function. @cofhe/sdk splits decryption into two purpose-built methods:
  • decryptForView — returns the plaintext for UI display (no on-chain signature).
  • decryptForTx — returns the plaintext and a Threshold Network signature for on-chain verification.

Before (cofhejs)

After (@cofhe/sdk) — viewing in UI

After (@cofhe/sdk) — publishing on-chain

4. Permits

Permits are no longer auto-generated during initialization. All permit operations are now explicit through client.permits.

Before (cofhejs)

After (@cofhe/sdk)

5. Error handling

Before (cofhejs)

After (@cofhe/sdk)

6. Import path changes

7. Type renames