Skip to Content

How We Built and Shipped SDKs Across 5 Major Ecosystems

Building a reliable API gateway is only half the battle. To deliver a truly exceptional developer experience, developers must be able to integrate your services in their native programming language with zero friction.

Rather than forcing developers to write boilerplate HTTP requests, we designed, built, tested, and published official client SDKs across five major programming language ecosystems:

  1. Node.js / TypeScript on npm
  2. Python on PyPI
  3. .NET / C# on NuGet
  4. PHP on Packagist / Composer
  5. Java on Maven Central

Here is the complete engineering walkthrough of how we architected these libraries with zero bloat, automated our distribution pipelines, and achieved seamless multi-registry publishing.

1. Core Architectural Principles

Before writing a single line of code, we established four non-negotiable engineering rules across every client library:

A. Zero Unnecessary Runtime Dependencies

Heavy dependency trees create version conflicts and security vulnerabilities in client applications.

  • In Node.js, we relied on native modern runtime primitives.
  • In .NET, we leveraged built-in System.Net.Http and System.Text.Json.
  • In Java, we utilized JDK 17 java.net.http and lightweight parsing.
  • In PHP, we built directly on native ext-curl and ext-json.

B. Idiomatic Language Design

Each SDK feels completely native to its language:

  • Node.js: Promises, async iterators for streaming, and full TypeScript type definitions.
  • Python: Synchronous and asynchronous clients (asyncio), context managers, and type hints.
  • .NET: Multi-targeted frameworks, async/await Task-based APIs, and decimal precision for exact monetary telemetry.
  • PHP: Strict types, PSR-4 namespace compliance, and builder options.
  • Java: Fluent builders, immutable records, thread-safe instances, and zero external baggage.

C. First-Class Telemetry & Header Preservation

Our API returns rich operational telemetry (such as execution costs, compute savings, and routing metadata) in standard response headers. The SDKs automatically parse, normalize, and expose these metrics directly on the response objects without altering the underlying data payload.

D. Built-in Resilience and Security

Every SDK includes automatic exponential backoff retries for transient network errors and rate limits, alongside cryptographic HMAC SHA256 webhook signature verification helpers.

2. Platform Deep-Dive and Registry Publishing


Ecosystem 1: Node.js & TypeScript (npm)

Architecture

The Node.js SDK supports both CommonJS and ES Modules. We authored comprehensive TypeScript declaration files (index.d.ts) alongside the implementation to provide immediate autocompletion, type safety, and inline documentation in IDEs like VS Code.

Automated Publishing Workflow

We configured modern package publishing to the npm registry with provenance and automated access tokens:

bash

# Packaging and publishing to npm

npm publish --access public

Developers can install and initialize the package in one command:

javascript

import { Client } from "@bithostin/ai-sdk";

const client = new Client("your_api_key_here");

const response = await client.chat.complete({

messages: [{ role: "user", content: "Hello world" }],

model: "gpt-4o"

});

console.log(response.outputText);

Ecosystem 2: Python (PyPI)

Architecture

The Python package adheres to modern Python packaging standards (PEP 517, PEP 518, and PEP 621) defined in a clean pyproject.toml. It provides both synchronous and asynchronous client implementations with complete static type definitions.

Automated Publishing via OpenID Connect (OIDC)

Instead of storing long-lived API tokens, we configured PyPI Trusted Publishing via OpenID Connect (OIDC). When a new version tag is pushed to GitHub, PyPI cryptographically verifies the GitHub Actions workflow identity and issues a short-lived token:

yaml

# GitHub Actions PyPI Release Step

- name: Publish package distributions to PyPI

uses: pypa/gh-action-pypi-publish@release/v1

with:

packages-dir: dist/

Installation and usage:

bash

pip install ai-sdk

python

from ai_sdk import Client

client = Client(api_key="your_api_key_here")

response = client.chat.complete(

messages=[{"role": "user", "content": "Analyze system performance"}],

model="gpt-4o"

)

print(response.output_text)

Ecosystem 3: .NET & C# (NuGet)

Multi-Target Architecture

Enterprise .NET teams run diverse environments ranging from modern cloud services to cross-platform applications. We configured our project file (.csproj) to multi-target multiple runtimes simultaneously:

  • Modern .NET: .NET 8.0 and .NET 9.0
  • Standard Runtimes: .NET Standard 2.0 and .NET Standard 2.1
Packaging and NuGet Distribution

The packaging step builds the assembly, includes XML documentation for IntelliSense, and bundles the package into .nupkg format:

bash

dotnet pack src/Client.csproj -c Release -o ./nupkg /p:Version=0.1.2

dotnet nuget push nupkg/*.nupkg --api-key $NUGET_API_KEY --source https://api.nuget.org/v3/index.json

Installation:

bash

dotnet add package AiSdk

Ecosystem 4: PHP (Packagist / Composer)

Architecture

The PHP client is engineered for extreme performance and reliability in web requests. It uses zero third-party packages, avoiding version conflicts with framework dependencies like Guzzle or Symfony HTTP. It strictly requires PHP 8.1+ with typed properties, readonly classes, and native curl handles.

Packagist Webhook Synchronization

We linked the repository directly to Packagist using GitHub webhooks. Whenever a new release tag is pushed, Packagist receives an authenticated payload and immediately updates the global package catalog:

bash

composer require organization/ai-sdk

php

<?php

use AiSdk\Client;

$client = new Client('your_api_key_here');

$response = $client->chat([

['role' => 'user', 'content' => 'Summarize report']

]);

echo $response->outputText;

Ecosystem 5: Java (Maven Central / Sonatype Central Portal)

Zero-Dependency Engineering

In Java, bringing in third-party JSON libraries or HTTP clients frequently causes dependency collisions. Our Java client is self-contained using Java 17 standard libraries (java.net.http.HttpClient) with immutable records.

Maven Central Portal Deployment

Publishing to Maven Central requires a structured bundle containing:

  1. Compiled classes binary JAR (artifact-version.jar)
  2. Sources JAR (artifact-version-sources.jar)
  3. Javadoc documentation JAR (artifact-version-javadoc.jar)
  4. Valid Maven POM metadata (artifact-version.pom)
  5. SHA1, MD5, and cryptographic PGP/GPG detached signatures for every file.

Our automated release script generates the bundle and deploys it directly to the Sonatype Central Publisher API:

xml

<dependency>

<groupId>io.github.organization</groupId>

<artifactId>ai-sdk</artifactId>

<version>0.1.2</version>

</dependency>

java

import com.organization.sdk.Client;

import com.organization.sdk.Types.ChatResponse;

import java.util.List;

import java.util.Map;

Client client = Client.builder("your_api_key_here").build();

ChatResponse response = client.chat(List.of(Map.of("role", "user", "content", "Generate invoice")));

System.out.println(response.outputText());

3. Automated CI/CD Release Matrix

To ensure updates and improvements can be released across all five platforms in seconds without human error, we unified the release lifecycle under GitHub Actions:

  1. Semantic Versioning: Bumping the version updates metadata files synchronously.
  2. Automated Unit Tests: Each repository runs isolated test suites with zero live network dependencies using local mock transports.
  3. Artifact Generation: Bundles, wheels, packages, and tarballs are built in clean, ephemeral runners.
  4. Global Distribution: Artifacts are dispatched to public registry APIs in parallel.

With official SDKs live across npm, PyPI, NuGet, Packagist, and Maven Central, developers in any tech stack can integrate our API in seconds with complete confidence.

Published SDK packages are available here:

https://www.npmjs.com/package/@bithostin/securhost

https://pypi.org/project/securhost/

https://www.nuget.org/packages/SecurHost.Sdk/

https://packagist.org/packages/securhost/ai-sdk

https://central.sonatype.com/artifact/io.github.ramkrishna70/securhost-sdk


This delivery made us feel, we can now deliver end to end SaaS with proper integration and documentation...


How We Built and Shipped SDKs Across 5 Major Ecosystems
Bithost August 30, 2026
Share this post
Metadata-Driven APIs: Building APIs That Evolve Without Code Changes