Target Languages
The targets section specifies which languages to generate SDKs for and their language-specific configuration.
Supported Languages
Section titled “Supported Languages”| Language | Status | Package Manager |
|---|---|---|
| TypeScript | Supported | npm |
| Python | Supported | pip/poetry |
| Java | Supported | Maven/Gradle |
| Go | Preview | go modules |
| C# | Supported | NuGet |
| PHP | Planned | Composer |
| Ruby | Planned | RubyGems |
Basic Usage
Section titled “Basic Usage”Simple List
Section titled “Simple List”Generate SDKs with default settings:
targets: - typescript - python - go - javaWith Configuration
Section titled “With Configuration”Specify language-specific options:
targets: typescript: package_name: "@acme/sdk" module_format: esm generator_version: "0.1.0"
python: package_name: acme-sdk min_version: "3.9" generator_version: "0.3.0"
java: group_id: com.acme artifact_id: acme-sdk generator_version: "0.2.0"
go: module: github.com/acme/sdk-go generator_version: "0.1.0"
csharp: package_id: Acme.Sdk root_namespace: Acme.Sdk target_frameworks: [netstandard2.0, net8.0, net9.0] generator_version: "0.1.0"TypeScript Configuration
Section titled “TypeScript Configuration”targets: typescript: package_name: "@acme/sdk" # npm package name module_format: esm # Module format: esm or cjs generator_version: "0.1.0" # Pin the TypeScript generator versionOptions
Section titled “Options”| Option | Default | Description |
|---|---|---|
package_name | kebab-case of sdk.name | npm package name. Use a scoped name (e.g. @acme/sdk) for organization-scoped packages. |
module_format | esm | Module format (esm or cjs). Controls package.json#type and conditional exports. |
generator_version | latest | Pinned generator version (e.g. "0.1.0"). See Generator versioning. |
Module Formats
Section titled “Module Formats”targets: typescript: module_format: esmGenerates ES modules:
export { Client } from './client.js';export type { User, UserCreate } from './types.js';targets: typescript: module_format: cjsGenerates CommonJS modules:
module.exports = { Client };const { User } = require('./types');Generated Package
Section titled “Generated Package”sdks/typescript/├── src/│ ├── client.ts│ ├── resources/│ │ └── users.ts│ └── types/│ └── index.ts├── package.json├── tsconfig.json└── README.mdPython Configuration
Section titled “Python Configuration”targets: python: package_name: acme-sdk # PyPI package name min_version: "3.9" # Minimum Python version generator_version: "0.3.0" # Pin the Python generator versionOptions
Section titled “Options”| Option | Default | Description |
|---|---|---|
package_name | sdk.name (snake_case) | PyPI package name |
min_version | "3.8" | Minimum Python version |
generator_version | latest | Pinned generator version (e.g. "0.3.0"). See Generator versioning. |
Generated Package
Section titled “Generated Package”sdks/python/├── acme_sdk/│ ├── __init__.py│ ├── client.py│ ├── resources/│ │ └── users.py│ └── types/│ └── __init__.py├── pyproject.toml├── setup.py└── README.mdPython Version Support
Section titled “Python Version Support”targets: python: min_version: "3.9" # Requires Python 3.9+Go Configuration Preview
Section titled “Go Configuration ”targets: go: module: github.com/acme/sdk-go # Go module path generator_version: "0.1.0" # Pin the Go generator versionOptions
Section titled “Options”| Option | Default | Description |
|---|---|---|
module | github.com/org/sdk.name | Go module path |
generator_version | latest | Pinned generator version (e.g. "0.1.0"). See Generator versioning. |
Generated Package
Section titled “Generated Package”sdks/go/├── client.go├── resources/│ └── users.go├── types/│ └── types.go├── go.mod├── go.sum└── README.mdNaming Conventions
Section titled “Naming Conventions”Go uses exported (capitalized) names:
// Generated Go codeclient.Users.List(ctx)client.Users.Get(ctx, "user-123")client.Users.Create(ctx, UserCreate{Name: "John"})Java Configuration
Section titled “Java Configuration”targets: java: group_id: com.acme # Maven group ID artifact_id: acme-sdk # Maven artifact ID generator_version: "0.2.0" # Pin the Java generator versionOptions
Section titled “Options”| Option | Default | Description |
|---|---|---|
group_id | com.example | Maven group ID |
artifact_id | sdk.name | Maven artifact ID |
generator_version | latest | Pinned generator version (e.g. "0.2.0"). See Generator versioning. |
Generated Package
Section titled “Generated Package”sdks/java/├── src/main/java/com/acme/sdk/│ ├── Client.java│ ├── resources/│ │ └── Users.java│ └── types/│ └── User.java├── pom.xml├── build.gradle└── README.mdBuild Systems
Section titled “Build Systems”Soxom generates configuration for both Maven and Gradle:
<groupId>com.acme</groupId><artifactId>acme-sdk</artifactId><version>1.0.0</version>group = 'com.acme'archivesBaseName = 'acme-sdk'version = '1.0.0'C# Configuration
Section titled “C# Configuration”targets: csharp: package_id: Acme.Sdk # NuGet package ID root_namespace: Acme.Sdk # Root C# namespace target_frameworks: [netstandard2.0, net8.0, net9.0] # Multi-target TFMs generator_version: "0.1.0" # Pin the C# generator versionOptions
Section titled “Options”| Option | Default | Description |
|---|---|---|
package_id | PascalCase form of sdk.name | NuGet package ID (e.g. Acme.Sdk). PascalCase is recommended; dotted segments map to namespace levels. |
root_namespace | same as package_id | Root C# namespace for emitted types. |
target_frameworks | [netstandard2.0, net8.0, net9.0] | Target framework monikers to publish. The generated SDK is multi-targeted; netstandard2.0 covers downstream consumers on .NET Framework / Mono / Xamarin while net8.0 + net9.0 enable AOT and trimming on modern .NET. |
generator_version | latest | Pinned generator version (e.g. "0.1.0"). See Generator versioning. |
Generated Package
Section titled “Generated Package”sdks/csharp/├── src/│ ├── AcmeSdkClient.cs│ ├── Resources/│ │ └── UsersResource.cs│ ├── Models/│ │ └── User.cs│ └── Serialization/│ └── SoxomJsonContext.cs├── Acme.Sdk.csproj└── README.mdThe emitted SoxomJsonContext is a JsonSerializerContext source-generated for every model — the SDK is trim-safe and AOT-compatible on net8.0 / net9.0 out of the box.
Complete Example
Section titled “Complete Example”version: "1.0"
sdk: name: acme-platform-sdk version: 1.0.0 description: Official SDK for Acme Platform API
spec: path: ./openapi.yaml
targets: typescript: package_name: "@acme/platform-sdk" module_format: esm generator_version: "0.1.0"
python: package_name: acme-platform-sdk min_version: "3.9" generator_version: "0.3.0"
java: group_id: com.acme.platform artifact_id: platform-sdk generator_version: "0.2.0"
go: module: github.com/acme/platform-sdk-go generator_version: "0.1.0"
csharp: package_id: Acme.Platform.Sdk root_namespace: Acme.Platform.Sdk target_frameworks: [netstandard2.0, net8.0, net9.0] generator_version: "0.1.0"Pinning generator versions
Section titled “Pinning generator versions”Each language’s generator is versioned independently. The generator_version field on a target pins which version of that generator produces the SDK. Omit it to track the latest stable generator for the language.
Pinning keeps spec changes and generator changes on separate axes — a spec-only change produces a spec-only diff in the Staging Release, instead of mixing in unrelated generator drift. See Generator versioning for the full story, including upgrade guidance and notes on the Go preview generator.
Output
Section titled “Output”Generated SDKs are committed to a managed Staging Repository per SDK Target — there’s no local output path to configure.
Per-target builds
Section titled “Per-target builds”Each SDK Target is an independent resource with its own build queue. When you push to the Config Repository, only targets whose config or pinned generator version changed will rebuild; the others stay on their existing Staging Release. There’s no build-time target selection — what builds is determined by what changed.
Next Steps
Section titled “Next Steps”- Features Overview - Learn about pagination, retries, and more
- Language Guides - Detailed guides for each language