> For the complete documentation index, see [llms.txt](https://docs.sign.global/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sign.global/for-builders/index-1/npm-sdk/installation.md).

# Installation

### Installation

Install the [`@ethsign/sp-sdk`](https://www.npmjs.com/package/@ethsign/sp-sdk) package to use the Sign Protocol SDK in your frontend or Node backend projects.

### Creating a Client Instance

```ts
new SignProtocolClient(spMode, options);
```

#### Parameters

| Name    | Type                                            | Description                                                                |
| ------- | ----------------------------------------------- | -------------------------------------------------------------------------- |
| spMode  | `SpMode`                                        | Whether the client is initialized in on-chain or Arweave (off-chain) mode. |
| options | `OnChainClientOptions`, `OffChainClientOptions` | Client options based on `spMode`.                                          |

{% hint style="warning" %}
NOTE: The `account` variable in `options` is marked as optional. If it is not provided, the SDK will use the provider from `window.ethereum` by default to derive an account. If a provider from `window.ethereum` cannot be located AND an account is not provided, calls to the SDK will fail.
{% endhint %}

#### Example

```typescript
const { privateKeyToAccount } = require("viem/accounts");
const client = new SignProtocolClient(SpMode.OnChain, {
  chain: EvmChains.baseSepolia,
  account: privateKeyToAccount(privateKey),
  apiKey: 'xxx', // Get a key from https://developer.sign.global/
});
```
