Phase 11/13 — Dependencies

Phase 11: Dependencies Analysis

Complete dependency audit of the copilot-sdk multi-language monorepo. Every runtime, dev, and cross-cutting dependency is catalogued with version constraints, purpose, and risk posture.

1. Runtime Dependencies Per SDK

1.1 Node.js SDK TypeScript

Source: nodejs/package.json

Dependency Version Purpose Risk
@github/copilot ^1.0.3-0 Core Copilot CLI binary -- bundles the platform-specific native Copilot CLI that the SDK spawns and communicates with over JSON-RPC. Provides sdk/index.js entry point and JSON Schema files used by codegen. HIGH -- first-party GitHub package; single source of truth for the CLI binary. A breaking change here breaks the entire Node.js SDK. Pre-release version (-0 suffix) indicates this is a pre-release channel.
vscode-jsonrpc ^8.2.1 JSON-RPC 2.0 protocol implementation from the VS Code project (Microsoft). Provides createMessageConnection, StreamMessageReader, StreamMessageWriter, ResponseError, and ConnectionError. LOW -- mature, well-maintained Microsoft project with wide adoption via VS Code/LSP.
zod ^4.3.6 Schema validation and type inference library. Used for tool parameter schemas -- the SDK accepts Zod schemas and calls .toJSONSchema() to serialize them for the CLI. LOW -- extremely popular community library. Note: v4.x is a major version jump from the widely-used v3.x line; the SDK uses the toJSONSchema() API introduced in Zod 4.
Source

nodejs/package.json:46-50

1.2 Python SDK Python

Source: python/pyproject.toml

Dependency Version Purpose Risk
python-dateutil >=2.9.0.post0 Date/time parsing and manipulation utilities. Used for handling timestamp fields in the protocol. LOW -- extremely mature, widely used Python library.
pydantic >=2.0 Data validation and settings management using Python type annotations. Provides the model layer for typed RPC messages and session events. LOW -- very popular, well-maintained. The >=2.0 floor ensures the v2 rewrite is used (not legacy v1).
Source

python/pyproject.toml:25-28

1.3 Go SDK Go

Source: go/go.mod

Dependency Version Purpose Risk
github.com/google/jsonschema-go v0.4.2 JSON Schema generation from Go structs. Used to produce JSON Schema definitions for tool parameters. MEDIUM -- Google-authored but relatively niche; fewer users compared to major Google libraries.
github.com/klauspost/compress v1.18.3 High-performance compression library. Likely used for compressed transport or payload handling. LOW -- extremely well-maintained, high-adoption compression library by a prolific maintainer.
github.com/google/uuid v1.6.0 UUID generation. Used for session IDs and request correlation. LOW -- Google-maintained, widely used, stable API.
Source

go/go.mod:1-11

Indirect Go dependencies (from go/go.sum):

Dependency Version Purpose
github.com/google/go-cmp v0.7.0 Deep equality comparison -- likely a transitive dependency of jsonschema-go for testing.
Source

go/go.sum:1-2

1.4 .NET SDK .NET

Source: dotnet/src/GitHub.Copilot.SDK.csproj + dotnet/Directory.Packages.props

Dependency Version Purpose Risk
Microsoft.Extensions.AI.Abstractions 10.2.0 Microsoft AI abstractions for .NET (chat client, embeddings). Provides standardized interfaces for AI integration. LOW -- first-party Microsoft package, part of the Extensions ecosystem.
Microsoft.Extensions.Logging.Abstractions 10.0.2 Logging abstraction layer. Allows consumers to plug in any logging provider. LOW -- core Microsoft infrastructure package.
StreamJsonRpc 2.24.84 JSON-RPC 2.0 implementation for .NET from Microsoft. The .NET equivalent of vscode-jsonrpc. Marked PrivateAssets="compile" meaning it is embedded/internalized, not exposed as a transitive dependency. LOW -- Microsoft-maintained, used extensively in Visual Studio.
System.Text.Json 10.0.2 JSON serialization/deserialization. Part of the .NET runtime but pinned explicitly for consistency and AOT compatibility. LOW -- first-party .NET runtime library.
Microsoft.SourceLink.GitHub 10.0.102 Source Link support for NuGet debugging. Marked PrivateAssets="all" -- build-time only, not shipped. LOW -- build infrastructure only.
Source

dotnet/src/GitHub.Copilot.SDK.csproj:32-38, dotnet/Directory.Packages.props:7-14

2. Dev Dependencies Per SDK

2.1 Node.js SDK TypeScript

Source: nodejs/package.json

Dependency Version Purpose
@types/node ^25.2.0 TypeScript type definitions for Node.js APIs
@typescript-eslint/eslint-plugin ^8.54.0 TypeScript-aware ESLint rules
@typescript-eslint/parser ^8.54.0 TypeScript parser for ESLint
esbuild ^0.27.2 Fast JavaScript/TypeScript bundler used for SDK build
eslint ^9.0.0 JavaScript/TypeScript linter
glob ^13.0.1 File pattern matching (used in build scripts)
json-schema ^0.4.0 JSON Schema type definitions and utilities
json-schema-to-typescript ^15.0.4 Generates TypeScript interfaces from JSON Schema
prettier ^3.8.1 Code formatter
quicktype-core ^23.2.6 Multi-language type generation from JSON Schema
rimraf ^6.1.2 Cross-platform rm -rf for clean scripts
semver ^7.7.3 Semantic versioning parsing (used in version scripts)
tsx ^4.20.6 TypeScript execution engine (runs .ts files directly)
typescript ^5.0.0 TypeScript compiler for type checking
vitest ^4.0.18 Test framework (Vite-native)
Source

nodejs/package.json:51-67

2.2 Python SDK Python

Source: python/pyproject.toml

Dependency Version Purpose
ruff >=0.1.0 Fast Python linter and formatter (replaces flake8, isort, black)
ty >=0.0.2 Type checker for Python
pytest >=7.0.0 Test framework
pytest-asyncio >=0.21.0 Async test support for pytest
pytest-timeout >=2.0.0 Test timeout enforcement
httpx >=0.24.0 HTTP client (likely used for integration tests against CLI server)
Source

python/pyproject.toml:34-42

2.3 Go SDK Go

No explicit dev dependencies in go.mod. Go uses the standard go test toolchain. The google/go-cmp in go.sum is an indirect dependency.

2.4 .NET SDK .NET

Source: dotnet/test/GitHub.Copilot.SDK.Test.csproj + dotnet/Directory.Packages.props

Dependency Version Purpose
Microsoft.NET.Test.Sdk 18.3.0 Test platform infrastructure
xunit 2.9.3 Unit testing framework
xunit.runner.visualstudio 3.1.5 Visual Studio test runner adapter for xunit
coverlet.collector 6.0.4 Code coverage collection
StreamJsonRpc 2.24.84 Also referenced in test project for direct JSON-RPC testing
Source

dotnet/test/GitHub.Copilot.SDK.Test.csproj:17-29, dotnet/Directory.Packages.props:8-16

3. Shared / Cross-cutting Dependencies

3.1 Code Generation Toolchain

Source: scripts/codegen/package.json

Dependency Version Purpose Shared By
json-schema ^0.4.0 JSON Schema type definitions Also in Node.js SDK devDependencies
json-schema-to-typescript ^15.0.4 TypeScript interface generation Also in Node.js SDK devDependencies
quicktype-core ^23.2.6 Multi-language code generation Also in Node.js SDK devDependencies
tsx ^4.20.6 TypeScript execution Also in Node.js SDK and test harness
Source

scripts/codegen/package.json:12-17

3.2 Test Harness

Source: test/harness/package.json

Dependency Version Purpose
@github/copilot ^0.0.421 Copilot CLI (older pre-release version than SDK -- see risk analysis)
@modelcontextprotocol/sdk ^1.26.0 MCP (Model Context Protocol) SDK for test server
@types/node ^25.3.3 Node.js type definitions
openai ^6.17.0 OpenAI client library for testing AI interactions
tsx ^4.21.0 TypeScript execution
typescript ^5.9.3 TypeScript compiler
vitest ^4.0.18 Test framework
yaml ^2.8.2 YAML parsing
Source

test/harness/package.json:13-22

3.3 Cross-SDK Dependency Matrix

Concept Node.js Python Go .NET
JSON-RPC vscode-jsonrpc Custom impl Custom impl StreamJsonRpc
Schema validation zod (runtime) pydantic jsonschema-go System.Text.Json
UUID generation node:crypto (built-in) stdlib google/uuid stdlib
JSON serialization built-in built-in built-in System.Text.Json
Compression N/A N/A klauspost/compress N/A
Date handling built-in python-dateutil built-in built-in

4. Dependency Tree Depth

Dependency Tree Depth
flowchart LR
  A["<b>3</b><br/>Node.js Runtime Deps"] ~~~ B["<b>2</b><br/>Python Runtime Deps"] ~~~ C["<b>3</b><br/>Go Direct Deps"] ~~~ D["<b>5</b><br/>.NET Package Refs"]
          

4.1 Node.js SDK -- Moderate Depth

The dependency tree has two layers of concern:

  • Shallow direct deps: The SDK declares only 3 runtime dependencies. The code itself (nodejs/src/) imports only from vscode-jsonrpc/node.js and @github/copilot at runtime. zod is not imported in source -- it is a peer-like dependency consumed by SDK users for tool definitions.
  • Deep transitive tree via @github/copilot: This package bundles platform-specific native binaries via 6 optional dependencies (@github/copilot-darwin-arm64, @github/copilot-darwin-x64, @github/copilot-linux-arm64, @github/copilot-linux-x64, @github/copilot-win32-arm64, @github/copilot-win32-x64). These are leaf packages with no further transitive dependencies.
  • Dev dependency depth: eslint, vitest, and quicktype-core each bring large transitive trees, but these are not shipped.
Source

nodejs/package-lock.json:664-679 (copilot platform binaries)

4.2 Python SDK -- Very Shallow

Only 2 runtime dependencies. pydantic has its own dependency tree (pydantic-core, typing-extensions, annotated-types), but this is standard and well-understood.

4.3 Go SDK -- Very Shallow

Only 3 direct dependencies with 1 indirect (go-cmp). The go.sum file is only 8 lines, confirming a remarkably flat dependency graph.

Source

go/go.sum:1-8 (complete file -- only 4 modules with their hashes)

4.4 .NET SDK -- Shallow

5 package references, all from Microsoft. The PrivateAssets="compile" on StreamJsonRpc means it is internalized at build time, reducing the transitive surface for consumers.

5. Key Dependency Analysis

5.1 @github/copilot -- The Copilot CLI Binary Package

What it is: A first-party GitHub npm package that bundles the Copilot CLI as platform-specific native binaries distributed through optional dependencies. It follows the same pattern as esbuild, turbo, and other native-binary npm packages.

What it provides:

  • Native CLI binary via platform packages (@github/copilot-{os}-{arch}), loaded through npm-loader.js
  • JavaScript entry point (index.js) that the SDK resolves and spawns as a Node.js child process
  • SDK integration point (sdk/index.js) used by CopilotClient.getBundledCliPath() to locate the CLI
  • JSON Schema definitions (schemas/api.schema.json, schemas/session-events.schema.json) consumed by the codegen toolchain to generate typed RPC bindings for all four SDKs

How the Node.js SDK uses it (from nodejs/src/client.ts:88-99):

function getBundledCliPath(): string {
    const sdkUrl = import.meta.resolve("@github/copilot/sdk");
    const sdkPath = fileURLToPath(sdkUrl);
    return join(dirname(dirname(sdkPath)), "index.js");
}

How codegen uses it (from scripts/codegen/utils.ts:29-46):

// Resolves schemas from the installed @github/copilot package
const schemaPath = path.join(
    REPO_ROOT,
    "nodejs/node_modules/@github/copilot/schemas/session-events.schema.json"
);
Version Discrepancy

The SDK declares ^1.0.3-0 (nodejs/package.json:47) while the test harness declares ^0.0.421 (test/harness/package.json:14). The harness uses an older pre-1.0 version -- this is a notable divergence that may cause test results to differ from SDK behavior. The lock file resolves the SDK copy to 1.0.3-0 (nodejs/package-lock.json:665).

5.2 vscode-jsonrpc -- JSON-RPC Protocol Layer

What it is: Microsoft's JSON-RPC 2.0 implementation, originally built for the Language Server Protocol (LSP) in VS Code. Published under the vscode-languageserver family of packages.

What the SDK uses from it (from nodejs/src/client.ts:20-25 and nodejs/src/session.ts:10-11):

  • createMessageConnection -- creates a bidirectional JSON-RPC connection over streams
  • StreamMessageReader / StreamMessageWriter -- stream-based message framing (stdio or TCP)
  • MessageConnection -- the connection type for sending requests/notifications
  • ResponseError / ConnectionError -- typed error classes for RPC failures

Why it matters: This is the core transport abstraction. The entire Node.js SDK communicates with the Copilot CLI through this library. The ^8.2.1 version constraint pins to the v8.x line which is the current stable release. The .NET SDK uses the equivalent Microsoft library StreamJsonRpc (same team, same protocol, different runtime).

5.3 zod -- Schema Validation (Tool Parameters)

What it is: Zod is a TypeScript-first schema declaration and validation library. Version 4.x introduces toJSONSchema() as a native method.

How the SDK uses it: Zod is NOT directly imported in the SDK source code. Instead, the SDK defines a ZodSchema interface (nodejs/src/types.ts:148-151) that any object with a toJSONSchema() method satisfies:

export interface ZodSchema<T = unknown> {
    _output: T;
    toJSONSchema(): Record<string, unknown>;
}

The SDK checks for this interface at runtime (nodejs/src/client.ts:61-68):

function isZodSchema(value: unknown): value is { toJSONSchema(): Record<string, unknown> } {
    return (
        value != null &&
        typeof value === "object" &&
        "toJSONSchema" in value &&
        typeof (value as { toJSONSchema: unknown }).toJSONSchema === "function"
    );
}
Design Pattern

This is a duck-typing / structural typing approach. The SDK does not import from zod -- it accepts any schema-like object. Zod is a runtime dependency because the defineTool helper and examples (e.g., nodejs/examples/basic-example.ts:5, nodejs/test/e2e/tools.test.ts:8) use it for schema definitions. Users are expected to pair zod with the SDK for tool parameter type inference.

6. Version Constraints

6.1 Strategy by Ecosystem

Ecosystem Strategy Example Notes
npm (Node.js SDK) Caret ranges (^) ^8.2.1 Allows minor/patch updates within major version
npm (codegen) Caret ranges (^) ^15.0.4 Same strategy
pip (Python) Minimum floor (>=) >=2.0 Very permissive -- allows any version above floor
Go modules Exact versions v0.4.2 Go modules pin exact versions in go.sum
NuGet (.NET) Exact versions via central management 10.2.0 Directory.Packages.props pins exact versions centrally

6.2 Notable Version Constraint Decisions

Pre-release pinning on @github/copilot

^1.0.3-0 in nodejs/package.json:47 -- the -0 suffix indicates a pre-release tag. The caret range with a pre-release means npm will only resolve to >=1.0.3-0 <2.0.0 for pre-release versions of 1.0.3, and any stable >=1.0.3.

.NET Central Package Management

dotnet/Directory.Packages.props:4 sets ManagePackageVersionsCentrally=true, meaning individual .csproj files cannot specify versions -- they are all controlled from this single file. This ensures version consistency across src and test projects.

Python's permissive floors

pydantic>=2.0 (python/pyproject.toml:27) allows any Pydantic 2.x release. This is intentionally broad to avoid conflicts with user applications that may pin specific Pydantic versions.

Node.js engine constraint

"node": ">=20.0.0" (nodejs/package.json:69) -- enforces a minimum Node.js 20 requirement. This corresponds to Node.js 20 LTS.

6.3 Pinned vs Range Summary

SDK Pinned (Exact) Range Pre-release
Node.js 0 16 (all caret) 1 (@github/copilot)
Python 0 8 (all minimum floor) 0
Go 3 (all exact via go.sum) 0 0
.NET 9 (all exact via central mgmt) 0 0

7. Dependency Update Strategy

7.1 Dependabot Configuration

Source: /.github/dependabot.yaml

The repository uses Dependabot v2 with weekly updates and a multi-ecosystem group strategy.

multi-ecosystem-groups:
  all:
    schedule:
      interval: 'weekly'
Source

/.github/dependabot.yaml:2-5

Monitored ecosystems:

Ecosystem Directory Group
GitHub Actions / all
Dev Containers / all
npm (SDK) /nodejs all
npm (harness) /test/harness all
pip /python all
Go modules /go all
NuGet /dotnet all
Source

/.github/dependabot.yaml:6-38

7.2 Update Flow Analysis

Grouped PRs: The multi-ecosystem-group: all with patterns: ['*'] means Dependabot will attempt to group ALL dependency updates across ALL ecosystems into a single weekly PR. This reduces PR noise but means a failure in one ecosystem can block updates in others.

Notable Gaps
  • The scripts/codegen/ npm package is NOT monitored by Dependabot. Its dependencies (json-schema, json-schema-to-typescript, quicktype-core, tsx) will not receive automated update PRs.
  • The nodejs/samples/ directory is not monitored either.

7.3 NuGet Source Configuration

<packageSources>
    <clear />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
<packageSourceMapping>
    <packageSource key="nuget.org">
        <package pattern="*" />
    </packageSource>
</packageSourceMapping>
Source

dotnet/nuget.config:1-12

Security Best Practice

The NuGet config clears all default sources and explicitly adds only nuget.org with a source mapping that requires ALL packages to come from nuget.org. This prevents dependency confusion attacks via private feed injection.

8. Internal Dependencies

8.1 Codegen Pipeline

The code generation toolchain is the central connective tissue of the monorepo. It lives at scripts/codegen/ and generates typed bindings for all four SDKs from the JSON Schema files bundled inside @github/copilot.

Dependency chain:

Codegen Pipeline -- Dependency Chain
flowchart TD
  A["@github/copilot\n(npm package)"] --> S1["schemas/api.schema.json"]
  A --> S2["schemas/session-events.schema.json"]
  S1 --> B["scripts/codegen/\n(Node.js toolchain)"]
  S2 --> B
  B --> C["typescript.ts\nnodejs/src/generated/rpc.ts"]
  B --> D["csharp.ts\ndotnet/src/Generated/"]
  B --> E["python.ts\npython/copilot/generated/"]
  B --> F["go.ts\ngo/generated/"]
          
Source

scripts/codegen/package.json:6-10 (generate scripts), scripts/codegen/utils.ts:29-46 (schema resolution)

Key Insight

The codegen reads schemas from nodejs/node_modules/@github/copilot/schemas/ (scripts/codegen/utils.ts:32). This means:

  1. npm install in the nodejs/ directory must run before codegen can execute.
  2. All four SDKs' generated code depends on the version of @github/copilot installed in the Node.js project.
  3. There is a hidden build-order dependency: npm install (nodejs/)codegenbuild (any SDK).

8.2 .NET SDK's Cross-Ecosystem Dependency

The .NET build extracts the Copilot CLI version from the Node.js lockfile:

<Exec Command="node -e &quot;console.log(require('./nodejs/package-lock.json')
    .packages['node_modules/@github/copilot'].version)&quot;"
    WorkingDirectory="$(MSBuildThisFileDirectory)../.." />
Source

dotnet/src/GitHub.Copilot.SDK.csproj:42-44

This means the .NET SDK build requires:

  • Node.js to be installed on the build machine
  • The nodejs/package-lock.json to exist and contain the resolved @github/copilot version
  • This version is written to a .props file and shipped in the NuGet package

8.3 Test Harness

The test harness at test/harness/ is an independent Node.js project with its own package.json. It is NOT published and serves as cross-SDK integration test infrastructure.

  • Uses its own copy of @github/copilot (version ^0.0.421 -- significantly older than the SDK's ^1.0.3-0)
  • Brings in @modelcontextprotocol/sdk and openai for testing MCP and AI interactions
  • Shares vitest and tsx with the main Node.js SDK
Source

test/harness/package.json:4 ("Not to be published")

9. Platform Requirements

9.1 Minimum Versions

Platform Required Version Source
Node.js >=20.0.0 nodejs/package.json:69
Python >=3.11 python/pyproject.toml:10
Go 1.24 go/go.mod:3
.NET net8.0 (with C# 14 / LangVersion 14) dotnet/Directory.Build.props:4-5

9.2 Supported Python Versions

Explicitly classified for Python 3.11, 3.12, 3.13, and 3.14.

Source

python/pyproject.toml:19-23

9.3 .NET Build Requirements

  • AOT Compatible: IsAotCompatible=true (dotnet/src/GitHub.Copilot.SDK.csproj:16)
  • Nullable reference types: enabled (dotnet/Directory.Build.props:7)
  • Warnings as errors: enabled (dotnet/Directory.Build.props:9)
  • Reflection-free JSON: Test project disables reflection-based serialization to validate NativeAOT compatibility (dotnet/test/GitHub.Copilot.SDK.Test.csproj:14)

9.4 Node.js SDK Module System

The Node.js SDK is an ESM-only package ("type": "module" at nodejs/package.json:22). It provides dual exports:

  • . (main): ./dist/index.js with types at ./dist/index.d.ts
  • ./extension: ./dist/extension.js with types at ./dist/extension.d.ts
Source

nodejs/package.json:11-19

9.5 Copilot CLI Platform Binaries

The @github/copilot package supports 6 platform targets via optional dependencies:

Package OS Architecture
@github/copilot-darwin-arm64 macOS ARM64 (Apple Silicon)
@github/copilot-darwin-x64 macOS x86_64
@github/copilot-linux-arm64 Linux ARM64
@github/copilot-linux-x64 Linux x86_64
@github/copilot-win32-arm64 Windows ARM64
@github/copilot-win32-x64 Windows x86_64
Source

nodejs/package-lock.json:672-678

10. Potential Risks

10.1 Version Divergence: @github/copilot Between SDK and Harness

Location Version Constraint Resolved
nodejs/package.json:47 ^1.0.3-0 1.0.3-0
test/harness/package.json:14 ^0.0.421 0.0.421 range
Risk: Version Divergence

The test harness uses a 0.0.x pre-1.0 version while the SDK uses 1.0.x. This means integration tests may exercise a different CLI version than what ships with the SDK. If the test harness is testing cross-SDK protocol behavior, there is a risk that tests pass against a CLI version that has different behavior from what SDK consumers will encounter.

10.2 Pre-release Dependency on Core Package

Pre-release Risk

@github/copilot at version 1.0.3-0 is a pre-release (-0 suffix per semver). The SDK itself at 0.1.8 is also pre-1.0. Both packages are in active development with no stability guarantees. Any consumer building on this SDK should expect breaking changes.

10.3 Codegen Not Monitored by Dependabot

Dependabot Gap

The scripts/codegen/package.json directory is absent from the Dependabot configuration (/.github/dependabot.yaml). Dependencies like quicktype-core, json-schema-to-typescript, and json-schema will NOT receive automated update PRs.

Similarly, nodejs/samples/ is not monitored.

10.4 Zod v4 -- Bleeding Edge

Ecosystem Compatibility

The SDK depends on zod ^4.3.6. Zod 4 is a very recent major release. Most of the npm ecosystem still uses Zod 3.x. Users who have existing Zod 3.x schemas will need to migrate or maintain two versions. The toJSONSchema() method the SDK relies on is a Zod 4 API.

10.5 Cross-Ecosystem Build Dependency

Fragile Coupling

The .NET SDK build invokes node to read the Node.js lockfile (dotnet/src/GitHub.Copilot.SDK.csproj:42). This creates:

  • A hard dependency on Node.js being installed for .NET builds
  • A dependency on the Node.js lockfile being up to date
  • A fragile coupling between the Node.js and .NET build pipelines

If nodejs/package-lock.json does not exist or does not contain the expected path, the .NET build will fail with error: "CopilotCliVersion could not be read from nodejs/package-lock.json" (dotnet/src/GitHub.Copilot.SDK.csproj:45).

10.6 Single-Maintainer Risk Assessment

Dependency Maintainer(s) Risk
@github/copilot GitHub (internal) Corporate single-source; no community fork possible
vscode-jsonrpc Microsoft Low risk -- large org, many contributors
zod Colin McDonnell (primary) + community Medium -- popular but primarily single-author project
pydantic Samuel Colvin + team Low risk -- well-funded, growing team
klauspost/compress Klaus Post (primary) Medium -- prolific but single primary maintainer
google/jsonschema-go Google Low risk -- corporate backed
quicktype-core quicktype contributors Medium -- niche tool, sporadic updates
StreamJsonRpc Microsoft Low risk -- used in Visual Studio

10.7 Python Version Floor Permissiveness

pydantic>=2.0 allows installing Pydantic 2.0.0 through the latest. Early Pydantic 2.x releases had breaking changes and bugs. A tighter floor (e.g., >=2.7) would be safer.

Similarly, python-dateutil>=2.9.0.post0 is very specific for the floor (a post-release version), which is appropriate.

10.8 No Lock File for Python

Note

The Python SDK uses pyproject.toml with no requirements.txt lock file or poetry.lock / pdm.lock. Reproducible builds depend on the downstream consumer's lock file. This is standard for libraries but worth noting.

10.9 Go Version Requirement

Go 1.24 (go/go.mod:3) is quite recent. Users on older Go versions (1.22, 1.23) will be unable to use the SDK.

Appendix: Complete Dependency Count Summary

Complete Dependency Count Summary
flowchart LR
  A["<b>~49</b><br/>Total Unique Dependencies"] ~~~ B["<b>13</b><br/>Runtime Dependencies"] ~~~ C["<b>25</b><br/>Dev Dependencies"] ~~~ D["<b>11</b><br/>Shared / Tooling"]
          
SDK Runtime Deps Dev Deps Total Direct
Node.js 3 15 18
Python 2 6 8
Go 3 0 3
.NET 5 4 (test only) 9
Codegen tool 4 0 4
Test harness 0 7 7
Total unique ~49

The repository maintains a lean dependency footprint across all four SDKs, with the heaviest dependency surface being in the Node.js SDK and its associated build tooling.