{"repo":"stainlu/stainful","free":true,"listed":false,"github":"https://github.com/stainlu/stainful","clone":"git clone https://github.com/stainlu/stainful.git","description":"The open-source Stainless — point your existing stainless.yml at it and get the same idiomatic Python SDK. Zero migration. No SaaS.","language":"Python","stars":89,"topics":["api-client","codegen","developer-tools","httpx","openapi","openapi-codegen","pydantic","python","sdk-generator","stainless"],"license":"MIT","category":"api-integrations-sdks","readme_excerpt":"stainful The open-source Stainless. Generate an idiomatic Python SDK from an OpenAPI spec and a stainless.yml — open source, runs locally and in CI, no hosted service. --- stainful turns an OpenAPI 3.x spec and a Stainless config into a Python SDK that reads like it was written by hand — typed models, real error classes, retries, auto-pagination, streaming, sync and async. It reuses the stainless.yml format, so if you already have one, you can point stainful at it as-is. Migrating from Stainless? Anthropic acquired Stainless and is winding down the hosted SDK generator. stainful is a drop-in continuation path — see docs/migrating-from-stainless.md for the step-by-step (it should be a few minutes). Features - 🧬 Typed everything — pydantic v2 models, real discriminated unions from oneOf - 🔁 Auto-pagination — for item in client.things.list(): ... - 🛡️ Typed errors — except RateLimitError: instead of checking status codes - 🔄 Resilient — retries with exponential backoff + jitter, Retry-After , idempotency keys - 📡 Streaming — typed Server-Sent Events, identical surface in sync and async - 🎯 Precise optionality — required , optional , and nullable stay distinct - 🧭 Domain-shaped clients — client.chat.completions.create(...) , not flat stubs - ⚡ Sync + async generated from one model - 📦 Self-contained output — the generated SDK depends only on httpx + pydantic - 📑 stainful docs — emit a Stainless-style api.md from the same inputs (per-resource sections, Methods lists with ","default_branch":null,"files":null,"tree":[],"storefront":"/r/stainlu","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/stainlu/stainful/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}