# Installation

This guide will help you install the Market Data JavaScript SDK and configure it for your needs.

## Prerequisites

- Node.js >= 20
- A package manager: [pnpm](https://pnpm.io/) (used by the SDK itself), [npm](https://npmjs.com), or [yarn](https://yarnpkg.com)

## Basic Installation

### pnpm

```bash
pnpm add marketdata-sdk-js
```

### npm

```bash
npm install marketdata-sdk-js
```

### yarn

```bash
yarn add marketdata-sdk-js
```

:::info
The SDK is in early development (version `0.0.1`) and has not yet been published to npm. Until it is, install directly from GitHub:

```bash
pnpm add github:MarketDataApp/sdk-js
```
:::

## TypeScript Support

The SDK is written in TypeScript and ships first-class type definitions. No `@types/*` package is needed. The SDK builds to both ESM and CommonJS, so it works with either module system.

- **ESM**: `import { MarketDataClient } from "marketdata-sdk-js";`
- **CommonJS**: `const { MarketDataClient } = require("marketdata-sdk-js");`

## Local Development Installation

For local development, clone the repository and install from the project directory:

```bash
# Clone the repository
git clone https://github.com/MarketDataApp/sdk-js.git
cd sdk-js

# Install dependencies
pnpm install

# Run the test suite (all mocked, no API calls)
pnpm test

# Build the dual CJS+ESM bundle
pnpm build
```

The project uses [Corepack](https://nodejs.org/api/corepack.html) to pin the pnpm version. If `pnpm` is not available, enable Corepack first:

```bash
corepack enable
```

## Core Dependencies

The SDK includes the following core dependencies (installed automatically):

- `dotenv`: Loads environment variables from a `.env` file
- `neverthrow`: Functional `Result` type for error handling
- `p-limit`: Concurrency pool for fan-out requests
- `p-retry`: Retry logic with exponential backoff
- `zod`: Runtime schema validation and type inference

## Next Steps

After installation, you'll need to:

1. Set up your [authentication token](/sdk/js/authentication)
2. Learn about the [client](/sdk/js/client) and how to make your first API requests
3. Configure [settings](/sdk/js/settings) to customize output format, date format, and other universal parameters
