Tree-shaking
The SDK supports tree-shaking through granular imports — reduce bundle size by ~50% by importing only the functions you need.
Import
// Granular imports (tree-shakeable)
import { clearinghouseState } from "@nktkas/hyperliquid/api/info";
import { order } from "@nktkas/hyperliquid/api/exchange";
import { candle } from "@nktkas/hyperliquid/api/subscription";Usage
Functions have the same names as client methods. Instead of client.order(...), you call order(config, ...):
import { HttpTransport } from "@nktkas/hyperliquid";
import { order } from "@nktkas/hyperliquid/api/exchange";
import { privateKeyToAccount } from "viem/accounts";
const transport = new HttpTransport();
const wallet = privateKeyToAccount("0x...");
// Function takes config as first argument
const result = await order(
{ transport, wallet },
{
orders: [{
a: 0,
b: true,
p: "30000",
s: "0.1",
r: false,
t: { limit: { tif: "Gtc" } },
}],
grouping: "na",
},
);Compare with client approach:
import { ExchangeClient, HttpTransport } from "@nktkas/hyperliquid";
import { privateKeyToAccount } from "viem/accounts";
const client = new ExchangeClient({
transport: new HttpTransport(),
wallet: privateKeyToAccount("0x..."),
});
// Method on client instance
const result = await client.order({
orders: [{
a: 0,
b: true,
p: "30000",
s: "0.1",
r: false,
t: { limit: { tif: "Gtc" } },
}],
grouping: "na",
});Info Functions
Info functions only need transport:
import { HttpTransport } from "@nktkas/hyperliquid";
import { allMids } from "@nktkas/hyperliquid/api/info";
const transport = new HttpTransport();
const mids = await allMids({ transport });Subscription Functions
Subscription functions require WebSocketTransport:
import { WebSocketTransport } from "@nktkas/hyperliquid";
import { trades } from "@nktkas/hyperliquid/api/subscription";
const transport = new WebSocketTransport();
const subscription = await trades({ transport }, { coin: "BTC" }, (data) => {
console.log(data);
});Available Exports
@nktkas/hyperliquid/api/info
Info API functions (clearinghouseState, meta, allMids, etc.)
@nktkas/hyperliquid/api/exchange
Exchange API functions (order, cancel, withdraw3, etc.)
@nktkas/hyperliquid/api/subscription
Subscription functions (candle, trades, l2Book, etc.)
Valibot Schemas
These exports also include valibot schemas for every API method:
import { ClearinghouseStateRequest, ClearinghouseStateResponse } from "@nktkas/hyperliquid/api/info";
import { OrderRequest, OrderResponse } from "@nktkas/hyperliquid/api/exchange";Available Schemas
Each method exports:
*Request— full request schema (withtype,nonce,signaturefor exchange)*Response— response schema from API
Use Cases
TypeScript types:
import { ClearinghouseStateResponse } from "@nktkas/hyperliquid/api/info";
import * as v from "valibot";
type State = v.InferOutput<typeof ClearinghouseStateResponse>;Runtime validation:
import { OrderRequest } from "@nktkas/hyperliquid/api/exchange";
import * as v from "valibot";
// Validate data before sending
const validated = v.parse(OrderRequest, {
action: {
type: "order",
orders: [{ a: 0, b: true, p: "30000", s: "0.1", r: false, t: { limit: { tif: "Gtc" } } }],
grouping: "na",
},
nonce: Date.now(),
signature: { r: "0x...", s: "0x...", v: 27 },
});Field descriptions:
Schemas include descriptions for all fields via v.description(), useful for generating documentation or exploring the API structure.
Last updated