Build user-owned data applications with gasless permissions, encrypted data management, and privacy-preserving infrastructure.
The SDK is production-ready. APIs may evolve in minor versions as we incorporate feedback and expand functionality.
npm install @opendatalabs/vana-sdk viem
Choose the build for your environment:
Browser:
import { Vana, mokshaTestnet } from "@opendatalabs/vana-sdk/browser";
import { createWalletClient, custom } from "viem";
const walletClient = createWalletClient({
chain: mokshaTestnet,
transport: custom(window.ethereum),
});
const vana = Vana({ walletClient });
Node.js:
import { Vana, mokshaTestnet } from "@opendatalabs/vana-sdk/node";
import { createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount("0x...");
const vana = Vana({
walletClient: createWalletClient({
account,
chain: mokshaTestnet,
transport: http("https://rpc.moksha.vana.org"),
}),
relayerUrl: "https://relayer.moksha.vana.org",
});
// Grant gasless data access permission
await vana.permissions.grant({
grantee: "0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36",
operation: "llm_inference",
parameters: {
prompt: "Analyze my data for insights",
maxTokens: 1000,
},
expiresAt: Math.floor(Date.now() / 1000) + 86400,
});
// Upload encrypted file with decryption permissions
await vana.data.upload({
content: "Sensitive user data",
filename: "data.json",
schemaId: 123,
permissions: [
{
account: "0xServerAddress...",
publicKey: "0x04ServerKey...",
},
],
});
// Query user files
const files = await vana.data.getUserFiles({
owner: "0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36",
});
The SDK provides six main controllers:
| Controller | Purpose |
|---|---|
permissions |
Grant and revoke gasless data access |
data |
Upload, query, and decrypt encrypted files |
schemas |
Validate data against schemas |
server |
Interact with trusted servers |
protocol |
Direct smart contract access |
operations |
Track and poll transaction status |
Configure storage, relay, and subgraph services:
import { StorageManager, PinataStorage } from "@opendatalabs/vana-sdk/node";
const vana = Vana({
walletClient,
relayerUrl: "https://relayer.moksha.vana.org",
storageManager: new StorageManager().register(
"ipfs",
new PinataStorage({
apiKey: process.env.PINATA_API_KEY,
secretKey: process.env.PINATA_SECRET_KEY,
})
),
subgraphUrl: "https://api.thegraph.com/subgraphs/name/vana/moksha",
});
| Network | Chain ID | RPC URL |
|---|---|---|
| Vana Mainnet | 1480 | https://rpc.vana.org |
| Moksha Testnet | 14800 | https://rpc.moksha.vana.org |
Report issues on GitHub Issues.