# Our design philosophy
Source: https://speakeasy.com/docs/sdks/languages/philosophy

import { supportedLanguages, ossComparisonData } from "@/lib/data/docs/languages";
import { CardGrid } from "@/components/card-grid";



SDKs are a critical interface for an API, which is why we put a lot of thought into developer experience. Our philosophy is that SDKs should be:

- **Type safe:** The SDKs we generate are fully typed, ensuring customers can catch errors early and often.
- **Human readable:** The SDKs we generate are easy for developers to read and debug in the customer's IDE. We avoid convoluted abstractions.
- **Batteries-included:** The SDKs we generate include everything from telemetry and retries to pagination.
- **Forward compatible:** Generated SDKs handle API evolution gracefully. Enums and unions are open to new values so that new versions of your API don't break old clients.
- **Fault tolerant:** Our generator is easy to use and outputs usable SDKs wherever possible. If a working SDK cannot be output, the OpenAPI document will be validated and any problems will be flagged. Generated SDKs also deserialize missing values gracefully while ensuring type safe SDKs.
- **Capable of going beyond OpenAPI:** Our generator covers the OpenAPI Specification and can extend where OpenAPI falls short.
- **Lean:** Our SDKs are meant to be powerful but lean, with minimal dependencies. We start with native language libraries and layer on third-party libraries only when the customer benefits far outweigh the cost of the extra dependency. We avoid adding unnecessary dependencies. 

Please see the table below for language-specific details.

<CardGrid cards={supportedLanguages} heading="Supported Languages" />

## OSS Comparisons

See how our SDKs compare to other open-source alternatives:

<CardGrid cards={ossComparisonData} heading="SDK Comparisons" />