TypeScript primitives for building on Vana — smart-contract bindings, ECIES encryption, storage providers, and a shared isomorphic platform layer.
Heads up — minimal scaffold. As of
3.xthe SDK has been pared down to the primitives the new Vana protocol architecture builds on. The previous high-level API (Vana(...)factory,vana.permissions,vana.data, subgraph queries, personal-server client, DLP rewards) is not part of this release. If you need that surface, pin to@opendatalabs/vana-sdk@^2.3.0or check out thelegacy-pre-unificationtag.
getContractController, getContractInfo,
getAbi, getContractAddress, plus the CONTRACTS and VanaContract
registries auto-generated from on-chain discovery.vanaMainnet, mokshaTestnet (alias moksha),
getChainConfig, getAllChains, plus the lower-level viem chains map.StorageManager, IpfsStorage, PinataStorage,
GoogleDriveStorage, DropboxStorage, CallbackStorage.NodePlatformAdapter and BrowserPlatformAdapter
with a shared VanaPlatformAdapter interface, plus detection helpers
(detectPlatform, isPlatformSupported, createPlatformAdapter,
createPlatformAdapterSafe).dataSchema.schema.json and
grantFile.schema.json, shipped under dist/schemas/.npm install @opendatalabs/vana-sdk viem
The SDK ships separate browser and Node bundles. Pick the entry point that matches your runtime:
// Browser / web app
import { BrowserPlatformAdapter } from "@opendatalabs/vana-sdk/browser";
// Node.js / server
import { NodePlatformAdapter } from "@opendatalabs/vana-sdk/node";
The bare @opendatalabs/vana-sdk import intentionally throws — it forces a
deliberate platform choice instead of accidentally pulling Node-only code
into a browser bundle (or vice versa).
import { getContractController } from "@opendatalabs/vana-sdk/node";
import { createPublicClient, http } from "viem";
import { mokshaTestnet } from "@opendatalabs/vana-sdk/node";
const client = createPublicClient({
chain: mokshaTestnet,
transport: http(),
});
const dataRegistry = getContractController("DataRegistry" as const, client);
const fileCount = await dataRegistry.read.filesCount();
import { NodeECIESProvider } from "@opendatalabs/vana-sdk/node";
const ecies = new NodeECIESProvider();
const encrypted = await ecies.encrypt(recipientPublicKey, payload);
const decrypted = await ecies.decrypt(recipientPrivateKey, encrypted);
The browser entry exposes the same surface as BrowserECIESProvider.
import { StorageManager, PinataStorage } from "@opendatalabs/vana-sdk/node";
const storage = new StorageManager();
storage.register(
"pinata",
new PinataStorage({ jwt: process.env.PINATA_JWT! }),
true, // mark as default
);
const result = await storage.upload(myBlob, "report.json");
console.log(result.url);
| Network | Chain ID | RPC URL |
|---|---|---|
| Vana Mainnet | 1480 | https://rpc.vana.org |
| Moksha Testnet | 14800 | https://rpc.moksha.vana.org |
The ECIES implementation under src/crypto/ecies/ was audited by HashCloak
in October 2025; the report is in audits/.