This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Node.js SDK for Milvus vector database, published as @zilliz/milvus2-sdk-node. Requires Node.js v18+.
# Install dependencies
yarn install
# Build (cleans dist/, compiles TS, generates sdk.json)
yarn build
# Run all tests (requires running Milvus instance)
yarn test
# Run a single test file (NODE_ENV=dev is required)
NODE_ENV=dev npx jest test/grpc/SomeTest.spec.ts
# Test coverage
yarn coverage
# Format code
npx prettier --write <file-or-directory>
# Regenerate proto JSON (after proto/ submodule update)
yarn proto:json
# Initialize proto submodule
git submodule update --init --recursiveSource code lives in milvus/ (not src/). Build output goes to dist/.
- gRPC (
MilvusClient) — primary transport with connection pooling, automatic retries, and interceptors - HTTP (
HttpClient) — REST alternative for environments where gRPC isn't available
BaseClient (proto loading, TLS, auth)
→ User (user/role management)
→ Database (database operations)
→ Collection (collection CRUD)
→ Data (insert/upsert/delete/query/search)
→ Partition (partition management)
→ MilvusIndex (index operations)
→ Resource (resource queries)
→ GRPCClient (channel pool, service init)
→ MilvusClient (high-level API)
Each class in milvus/grpc/ adds one domain of Milvus operations. MilvusClient in milvus/MilvusClient.ts is the public entry point that extends GRPCClient with simplified high-level methods (aligned with the Python SDK).
milvus/grpc/— gRPC client classes (one per domain: Collection, Data, User, etc.)milvus/http/— HTTP client implementationmilvus/types/— TypeScript type definitions for requests/responsesmilvus/const/— Constants, defaults, error codesmilvus/utils/— Utilities (schema building, data formatting, gRPC helpers, validation)milvus/proto-json/— Generated proto definitions (fromyarn proto:json)proto/— Git submodule with upstream Milvus.protofilestest/grpc/,test/http/,test/utils/— Tests organized by transport/domaintest/tools/— Test helpers (collection param generators, data generators)
Adding a new gRPC API method:
- If proto has been updated: sync submodule (
git submodule update --init --recursive) then regenerate JSON (yarn proto:json) - Define request/response types in
milvus/types/ - Implement method in the appropriate
milvus/grpc/class - Wrap gRPC calls with
promisify(this.grpcClient.methodName.bind(this.grpcClient), metadata, timeout) - Check results against
ErrorCode.SUCCESS - Add tests in
test/grpc/ - Add JSDoc for public methods (include
@paramand@returns)
Error handling:
if (res.error_code !== ErrorCode.SUCCESS) {
throw new Error(res.reason);
}gRPC interceptors (in milvus/utils/Grpc.ts): meta (auth/db_name), retry (exponential backoff), trace (OpenTelemetry), request metadata (timing).
Connection pooling: Uses generic-pool with configurable min/max (defaults: 5/10).
- TypeScript strict mode, target ES2015, CommonJS modules
- Prettier: 2 spaces, single quotes, semicolons, ES5 trailing commas, avoid arrow parens
- Classes: PascalCase; methods/variables: camelCase; constants: UPPER_CASE
- Test files:
*.spec.ts - Tests use
describe/itblocks withbeforeAll/afterAllfor setup/cleanup - Tests are integration tests that connect to a real Milvus instance