Develop
SDKs
First-party clients for Python, TypeScript, Go, and Rust. Community SDKs are listed at the bottom.
Python
The reference SDK. Every endpoint surfaces here first. Synchronous and async APIs share types; the async client mirrors the sync one but returns awaitables.
bash
pip install nodedatapython
from nodedata import NodeData
node = NodeData() # NODE_DATA_API_KEY from env
# Search
hits = node.search("manipulation policy", task="manipulation", limit=20)
# Retrieve
model = node.models.retrieve("acme/grasp-policy-v2")
# Download
path = node.models.download(model.id, revision="1.4.0")
# Stream a dataset
for episode in node.datasets.stream("acme/panda-arm-grasp-100k", split="train"):
...TypeScript / Node.js
Universal — runs on Node 20+, Bun, Deno, and Workers. Ships fully-typed responses and supports the Web Streams API for downloads.
bash
npm install @nodedata/sdktypescript
import { NodeData } from "@nodedata/sdk";
const node = new NodeData({ apiKey: process.env.NODE_DATA_API_KEY! });
const hits = await node.search("manipulation policy", { task: "manipulation", limit: 20 });
const model = await node.models.retrieve("acme/grasp-policy-v2");
const stream = await node.models.download(model.id, { revision: "1.4.0" });
for await (const chunk of stream) {
// pipe chunk to disk
}Go
bash
go get github.com/nodedata/go-sdkgo
package main
import (
"context"
"log"
nodedata "github.com/nodedata/go-sdk"
)
func main() {
node := nodedata.New(nodedata.WithEnv())
ctx := context.Background()
model, err := node.Models.Retrieve(ctx, "acme/grasp-policy-v2")
if err != nil { log.Fatal(err) }
if _, err := node.Models.Download(ctx, model.ID,
nodedata.WithRevision("1.4.0"),
nodedata.WithDestination("/var/cache/nodedata"),
); err != nil { log.Fatal(err) }
}Rust
bash
cargo add nodedatarust
use nodedata::NodeData;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let node = NodeData::from_env()?;
let model = node.models().retrieve("acme/grasp-policy-v2").await?;
node.models()
.download(&model.id)
.revision("1.4.0")
.destination("./cache")
.send()
.await?;
Ok(())
}CLI
The CLI wraps the SDK and is the recommended way to drive uploads from CI.
bash
# macOS / Linux
curl -fsSL https://nodedata.dev/install.sh | sh
# Windows (PowerShell)
iwr https://nodedata.dev/install.ps1 -useb | iexPin SDK versions in CI
SDK minors can add fields. Pin to a specific version in CI to avoid surprises and bump on a regular cadence.
Community SDKs
- Ruby —
nodedata-rb(community) - Elixir —
node_data_ex(community) - C# / .NET —
NodeData.Net(community)
Community SDKs are not maintained by Node Data, Inc. and may lag the official API. File issues directly on their repos.