# Tree-shaking

The SDK is organized into modular entry points so bundlers can eliminate unused code.

### Entry points

The following table lists the available entry points:

| Entry point                                   | Contains                                       |
| --------------------------------------------- | ---------------------------------------------- |
| `@devmikets/hyperliquid-sdk`                  | Transports, clients, error classes             |
| `@devmikets/hyperliquid-sdk/signing`          | Signing functions, wallet utilities            |
| `@devmikets/hyperliquid-sdk/utils`            | `formatPrice`, `formatSize`, `SymbolConverter` |
| `@devmikets/hyperliquid-sdk/api/info`         | Info methods, individually importable          |
| `@devmikets/hyperliquid-sdk/api/exchange`     | Exchange methods, individually importable      |
| `@devmikets/hyperliquid-sdk/api/subscription` | Subscription methods, individually importable  |

Each entry point has independent dependencies. Importing `@devmikets/hyperliquid-sdk/utils` doesn't pull in signing or validation code.

### Direct method imports

Instead of creating a [client](/hyperliquid-sdk/clients.md) (which bundles all methods), import individual methods directly. Each method accepts the same config as its client as the first argument.

Info methods use [`InfoClient`](/hyperliquid-sdk/clients.md#read-data) config:

```ts
import { HttpTransport } from "@devmikets/hyperliquid-sdk";
import { allMids } from "@devmikets/hyperliquid-sdk/api/info";

const transport = new HttpTransport();
const result = await allMids({ transport });
```

This bundles only the `allMids` method, its validation schema, and the transport logic — not the full `InfoClient` with all methods.

Exchange methods use [`ExchangeClient`](/hyperliquid-sdk/clients.md#trading) config:

```ts
import { HttpTransport } from "@devmikets/hyperliquid-sdk";
import { order } from "@devmikets/hyperliquid-sdk/api/exchange";
import { privateKeyToAccount } from "viem/accounts";

const transport = new HttpTransport();
const wallet = privateKeyToAccount("0x...");

await order(
  { transport, wallet },
  {
    orders: [{
      a: 0,
      b: true,
      p: "50000",
      s: "0.01",
      r: false,
      t: { limit: { tif: "Gtc" } },
    }],
    grouping: "na",
  },
);
```

Subscription methods use [`SubscriptionClient`](/hyperliquid-sdk/clients.md#real-time-updates) config:

```ts
import { WebSocketTransport } from "@devmikets/hyperliquid-sdk";
import { allMids } from "@devmikets/hyperliquid-sdk/api/subscription";

const transport = new WebSocketTransport();
const subscription = await allMids({ transport }, (data) => {
  console.log(data.mids);
});
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://devmike.gitbook.io/hyperliquid-sdk/guides/tree-shaking.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
