-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.html
More file actions
319 lines (303 loc) Β· 69.8 KB
/
index.html
File metadata and controls
319 lines (303 loc) Β· 69.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Offscale - Automate your API lifecycle from spec to package release. Generate strongly-typed SDKs and interactive documentation.">
<title>Offscale - SDKs & Interactive API Docs</title>
<link rel="stylesheet" href="styles.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/devicon.min.css" />
<noscript>
<style>
#theme-toggle { display: none !important; }
</style>
</noscript>
</head>
<body>
<a href="#main-content" class="skip-link sr-only focusable">Skip to main content</a>
<header class="header">
<div class="container">
<a href="index.html" class="text-inherit no-underline"><h1 class="logo">Offscale</h1></a>
<nav class="main-nav align-center" aria-label="Main Navigation" >
<a href="index.html" class="active opacity-1" >SDKs & Docs</a>
<a href="ecosystem.html">Ecosystem</a>
<button popovertarget="consulting-popover" id="consulting-link" class="nav-consulting-btn" aria-label="Consulting (Closed)">Consulting</button>
<a href="https://github.com/SamuelMarks/cdd-ctl" target="_blank" rel="noopener" aria-label="cdd-ctl on GitHub" class="nav-icon-link">
<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="icon-24">
<path d="M12 2C6.477 2 2 6.477 2 12c0 4.42 2.865 8.166 6.839 9.489.5.092.682-.217.682-.482 0-.237-.008-.866-.013-1.7-2.782.603-3.369-1.34-3.369-1.34-.454-1.156-1.11-1.462-1.11-1.462-.908-.62.069-.608.069-.608 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.087 2.91.831.092-.646.35-1.086.636-1.336-2.22-.253-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.029-2.683-.103-.253-.446-1.27.098-2.647 0 0 .84-.269 2.75 1.025A9.578 9.578 0 0112 6.836c.85.004 1.705.114 2.504.336 1.909-1.294 2.747-1.025 2.747-1.025.546 1.377.203 2.394.1 2.647.64.699 1.028 1.592 1.028 2.683 0 3.842-2.339 4.687-4.566 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.578.688.48C19.138 20.161 22 16.418 22 12c0-5.523-4.477-10-10-10z"/>
</svg>
</a>
<button id="theme-toggle" class="theme-toggle theme-toggle-btn" aria-label="Toggle theme">
<span class="light-icon" aria-hidden="true">βοΈ</span>
<span class="dark-icon" aria-hidden="true">π</span>
</button>
</nav>
</div>
</header>
<main id="main-content">
<section class="hero hero-pipeline">
<div class="container">
<h2 class="hero-title">
<span class="static-text m-ie-0" >OpenAPI in. Packages and Docs out. <span class="accent-primary">Zero-touch.</span></span>
</h2>
<p class="hero-subtitle hero-subtitle-spacing" >Code generation is only half the solution. Automate your entire developer experience pipeline. Build, test, and publish idiomatic clients directly to native registries, and deploy interactive HTML docsβfully autonomously.</p>
<div class="hero-actions">
<a href="https://github.com/SamuelMarks/cdd-ctl" target="_blank" rel="noopener" class="btn btn-primary">Get Started on GitHub →</a>
<a href="#demo" class="btn btn-outline">Interactive Demo ↓</a>
</div>
</div>
</section>
<section class="features" aria-label="Key Features">
<div class="container features-grid">
<!-- Column 1 -->
<article class="feature-card">
<div class="card-diagram" aria-hidden="true">
<svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="mindmapDiagram inline-svg svg-418" viewBox="5 5 418.2774353027344 279.8509826660156"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:hsl(206.4, 100%, 100%);}#my-svg .error-text{fill:#000000;stroke:#000000;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#ff6a00;stroke:#ff6a00;}#my-svg .marker.cross{stroke:#ff6a00;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;}#my-svg p{margin:0;}#my-svg .edge{stroke-width:3;}#my-svg .section--1 rect,#my-svg .section--1 path,#my-svg .section--1 circle,#my-svg .section--1 polygon,#my-svg .section--1 path{fill:hsl(26.4, 100%, 70.0980392157%);}#my-svg .section--1 text{fill:#333;}#my-svg .node-icon--1{font-size:40px;color:#333;}#my-svg .section-edge--1{stroke:hsl(26.4, 100%, 70.0980392157%);}#my-svg .edge-depth--1{stroke-width:17;}#my-svg .section--1 line{stroke:rgb(0, 85.4, 152.4999999999);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-0 rect,#my-svg .section-0 path,#my-svg .section-0 circle,#my-svg .section-0 polygon,#my-svg .section-0 path{fill:hsl(-93.6, 100%, 70.0980392157%);}#my-svg .section-0 text{fill:#333;}#my-svg .node-icon-0{font-size:40px;color:#333;}#my-svg .section-edge-0{stroke:hsl(-93.6, 100%, 70.0980392157%);}#my-svg .edge-depth-0{stroke-width:14;}#my-svg .section-0 line{stroke:rgb(85.4, 152.4999999999, 0);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-1 rect,#my-svg .section-1 path,#my-svg .section-1 circle,#my-svg .section-1 polygon,#my-svg .section-1 path{fill:hsl(206.4, 100%, 75%);}#my-svg .section-1 text{fill:#333;}#my-svg .node-icon-1{font-size:40px;color:#333;}#my-svg .section-edge-1{stroke:hsl(206.4, 100%, 75%);}#my-svg .edge-depth-1{stroke-width:11;}#my-svg .section-1 line{stroke:rgb(127.5, 56.1, 0);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-2 rect,#my-svg .section-2 path,#my-svg .section-2 circle,#my-svg .section-2 polygon,#my-svg .section-2 path{fill:hsl(56.4, 100%, 70.0980392157%);}#my-svg .section-2 text{fill:#333;}#my-svg .node-icon-2{font-size:40px;color:#333;}#my-svg .section-edge-2{stroke:hsl(56.4, 100%, 70.0980392157%);}#my-svg .edge-depth-2{stroke-width:8;}#my-svg .section-2 line{stroke:rgb(0, 9.15, 152.4999999999);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-3 rect,#my-svg .section-3 path,#my-svg .section-3 circle,#my-svg .section-3 polygon,#my-svg .section-3 path{fill:hsl(86.4, 100%, 70.0980392157%);}#my-svg .section-3 text{fill:#333;}#my-svg .node-icon-3{font-size:40px;color:#333;}#my-svg .section-edge-3{stroke:hsl(86.4, 100%, 70.0980392157%);}#my-svg .edge-depth-3{stroke-width:5;}#my-svg .section-3 line{stroke:rgb(67.1, 0, 152.4999999999);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-4 rect,#my-svg .section-4 path,#my-svg .section-4 circle,#my-svg .section-4 polygon,#my-svg .section-4 path{fill:hsl(116.4, 100%, 70.0980392157%);}#my-svg .section-4 text{fill:#333;}#my-svg .node-icon-4{font-size:40px;color:#333;}#my-svg .section-edge-4{stroke:hsl(116.4, 100%, 70.0980392157%);}#my-svg .edge-depth-4{stroke-width:2;}#my-svg .section-4 line{stroke:rgb(143.3499999999, 0, 152.4999999999);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-5 rect,#my-svg .section-5 path,#my-svg .section-5 circle,#my-svg .section-5 polygon,#my-svg .section-5 path{fill:hsl(146.4, 100%, 70.0980392157%);}#my-svg .section-5 text{fill:#333;}#my-svg .node-icon-5{font-size:40px;color:#333;}#my-svg .section-edge-5{stroke:hsl(146.4, 100%, 70.0980392157%);}#my-svg .edge-depth-5{stroke-width:-1;}#my-svg .section-5 line{stroke:rgb(152.4999999999, 0, 85.4);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-6 rect,#my-svg .section-6 path,#my-svg .section-6 circle,#my-svg .section-6 polygon,#my-svg .section-6 path{fill:hsl(176.4, 100%, 70.0980392157%);}#my-svg .section-6 text{fill:#333;}#my-svg .node-icon-6{font-size:40px;color:#333;}#my-svg .section-edge-6{stroke:hsl(176.4, 100%, 70.0980392157%);}#my-svg .edge-depth-6{stroke-width:-4;}#my-svg .section-6 line{stroke:rgb(152.4999999999, 0, 9.15);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-7 rect,#my-svg .section-7 path,#my-svg .section-7 circle,#my-svg .section-7 polygon,#my-svg .section-7 path{fill:hsl(236.4, 100%, 75%);}#my-svg .section-7 text{fill:#333;}#my-svg .node-icon-7{font-size:40px;color:#333;}#my-svg .section-edge-7{stroke:hsl(236.4, 100%, 75%);}#my-svg .edge-depth-7{stroke-width:-7;}#my-svg .section-7 line{stroke:rgb(127.5, 119.85, 0);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-8 rect,#my-svg .section-8 path,#my-svg .section-8 circle,#my-svg .section-8 polygon,#my-svg .section-8 path{fill:hsl(296.4, 100%, 70.0980392157%);}#my-svg .section-8 text{fill:#333;}#my-svg .node-icon-8{font-size:40px;color:#333;}#my-svg .section-edge-8{stroke:hsl(296.4, 100%, 70.0980392157%);}#my-svg .edge-depth-8{stroke-width:-10;}#my-svg .section-8 line{stroke:rgb(9.15, 152.4999999999, 0);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-9 rect,#my-svg .section-9 path,#my-svg .section-9 circle,#my-svg .section-9 polygon,#my-svg .section-9 path{fill:hsl(326.4, 100%, 70.0980392157%);}#my-svg .section-9 text{fill:#333;}#my-svg .node-icon-9{font-size:40px;color:#333;}#my-svg .section-edge-9{stroke:hsl(326.4, 100%, 70.0980392157%);}#my-svg .edge-depth-9{stroke-width:-13;}#my-svg .section-9 line{stroke:rgb(0, 152.4999999999, 67.1);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-10 rect,#my-svg .section-10 path,#my-svg .section-10 circle,#my-svg .section-10 polygon,#my-svg .section-10 path{fill:hsl(356.4, 100%, 70.0980392157%);}#my-svg .section-10 text{fill:#333;}#my-svg .node-icon-10{font-size:40px;color:#333;}#my-svg .section-edge-10{stroke:hsl(356.4, 100%, 70.0980392157%);}#my-svg .edge-depth-10{stroke-width:-16;}#my-svg .section-10 line{stroke:rgb(0, 152.4999999999, 143.3499999999);stroke-width:3;}#my-svg .disabled,#my-svg .disabled circle,#my-svg .disabled text{fill:lightgray;}#my-svg .disabled text{fill:#efefef;}#my-svg .section-root rect,#my-svg .section-root path,#my-svg .section-root circle,#my-svg .section-root polygon{fill:hsl(26.4, 100%, 70.0980392157%);}#my-svg .section-root text{fill:#333;}#my-svg .section-root span{color:#333;}#my-svg .section-2 span{color:#333;}#my-svg .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#my-svg .edge{fill:none;}#my-svg .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
#my-svg .mindmap-node span { color: #333 !important; }
#my-svg .mindmap-node p { color: #333 !important; }
#my-svg .node span { color: #333 !important; }
#my-svg .node p { color: #333 !important; }
</style><g><marker id="my-svg_mindmap-pointEnd" class="marker mindmap" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_mindmap-pointStart" class="marker mindmap" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><g class="subgraphs"/><g class="edgePaths"><path d="M223.577,153.054L220.747,158.818C217.917,164.582,212.257,176.11,206.597,187.638C200.937,199.166,195.276,210.694,192.446,216.457L189.616,222.221" id="edge_0_1" class="edge-thickness-normal edge-pattern-solid edge section-edge-0 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_1" data-points="W3sieCI6MjIzLjU3NzI5MTAzMDc1MTksInkiOjE1My4wNTM4NTk2NjY3NjE1M30seyJ4IjoyMDYuNTk2NzQ0ODIxMjkzMSwieSI6MTg3LjYzNzY0Mzk1ODQzNjA2fSx7IngiOjE4OS42MTYxOTg2MTE4MzQzLCJ5IjoyMjIuMjIxNDI4MjUwMTEwNn1d"/><path d="M228.819,124.652L228.202,117.926C227.586,111.2,226.352,97.747,225.119,84.295C223.886,70.842,222.652,57.39,222.036,50.664L221.419,43.937" id="edge_0_2" class="edge-thickness-normal edge-pattern-solid edge section-edge-1 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_2" data-points="W3sieCI6MjI4LjgxODg5MTU0OTUwNCwieSI6MTI0LjY1MTk1OTk2MjQ5NDE1fSx7IngiOjIyNS4xMTg5MzkyNjcyODA5LCJ5Ijo4NC4yOTQ2NTc3OTk2NTQyfSx7IngiOjIyMS40MTg5ODY5ODUwNTc3OCwieSI6NDMuOTM3MzU1NjM2ODE0MjZ9XQ=="/><path d="M240.942,150.046L246.092,155.054C251.242,160.061,261.541,170.076,271.84,180.091C282.139,190.106,292.438,200.121,297.588,205.128L302.738,210.136" id="edge_0_3" class="edge-thickness-normal edge-pattern-solid edge section-edge-2 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_3" data-points="W3sieCI6MjQwLjk0MjM0Njk2NjQ1OTc1LCJ5IjoxNTAuMDQ2NDQxMDA1MDgyNDR9LHsieCI6MjcxLjg0MDAxMzg4NTU3NTcsInkiOjE4MC4wOTExNDYyODc3NTA5Mn0seyJ4IjozMDIuNzM3NjgwODA0NjkxNiwieSI6MjEwLjEzNTg1MTU3MDQxOTR9XQ=="/><path d="M244.631,143.642L253.44,146.114C262.25,148.586,279.869,153.53,297.489,158.474C315.108,163.419,332.727,168.363,341.537,170.835L350.347,173.307" id="edge_0_4" class="edge-thickness-normal edge-pattern-solid edge section-edge-3 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_4" data-points="W3sieCI6MjQ0LjYzMDUxNTIzOTg4MDMsInkiOjE0My42NDE5MzkzMzEzODI2Mn0seyJ4IjoyOTcuNDg4NjIxODcxMzUxOCwieSI6MTU4LjQ3NDQ3NzI3NjE4MjQ4fSx7IngiOjM1MC4zNDY3Mjg1MDI4MjMzNCwieSI6MTczLjMwNzAxNTIyMDk4MjM1fV0="/><path d="M219.735,128.832L213.6,122.52C207.466,116.207,195.197,103.583,182.929,90.958C170.66,78.333,158.391,65.709,152.257,59.397L146.123,53.084" id="edge_0_5" class="edge-thickness-normal edge-pattern-solid edge section-edge-4 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_5" data-points="W3sieCI6MjE5LjczNDUyMDQ5NzEzOTA3LCJ5IjoxMjguODMyMTA3NTk0NjU1MzN9LHsieCI6MTgyLjkyODcwNTE3ODI1MSwieSI6OTAuOTU4MTQ0OTkzOTA1NTl9LHsieCI6MTQ2LjEyMjg4OTg1OTM2MjksInkiOjUzLjA4NDE4MjM5MzE1NTg3fV0="/><path d="M245.119,138.151L251.379,137.548C257.638,136.946,270.157,135.74,282.677,134.534C295.196,133.328,307.715,132.123,313.974,131.52L320.234,130.917" id="edge_0_6" class="edge-thickness-normal edge-pattern-solid edge section-edge-5 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_6" data-points="W3sieCI6MjQ1LjExOTI1OTk1ODIxNjE2LCJ5IjoxMzguMTUxMzIzODY1MTQzNX0seyJ4IjoyODIuNjc2NTgzMjk3MTY1MDUsInkiOjEzNC41MzQxODk1MDE3NzQyMn0seyJ4IjozMjAuMjMzOTA2NjM2MTEzOTQsInkiOjEzMC45MTcwNTUxMzg0MDQ5NX1d"/><path d="M217.601,147.748L209.294,153.133C200.987,158.518,184.372,169.288,167.757,180.057C151.143,190.827,134.528,201.597,126.22,206.982L117.913,212.366" id="edge_0_7" class="edge-thickness-normal edge-pattern-solid edge section-edge-6 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_7" data-points="W3sieCI6MjE3LjYwMTM2NzQ2NDYwMiwieSI6MTQ3Ljc0ODIzNDcyODQxNzMyfSx7IngiOjE2Ny43NTcyNDIyNjg5MjQ1MywieSI6MTgwLjA1NzM1MjY0NDM4NzA0fSx7IngiOjExNy45MTMxMTcwNzMyNDcwNywieSI6MjEyLjM2NjQ3MDU2MDM1Njc2fV0="/><path d="M244.231,134.317L253.943,130.671C263.655,127.024,283.079,119.732,302.502,112.439C321.926,105.147,341.35,97.854,351.062,94.208L360.774,90.562" id="edge_0_8" class="edge-thickness-normal edge-pattern-solid edge section-edge-7 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_8" data-points="W3sieCI6MjQ0LjIzMTIzNTc0MDY4ODA1LCJ5IjoxMzQuMzE3MDA1MDE2NTU5NTN9LHsieCI6MzAyLjUwMjQyMzQ3MjY4MDIsInkiOjExMi40Mzk0NzAyNTY0NjA4OH0seyJ4IjozNjAuNzczNjExMjA0NjcyNCwieSI6OTAuNTYxOTM1NDk2MzYyMjJ9XQ=="/><path d="M239.43,127.775L244.053,121.864C248.677,115.954,257.923,104.133,267.17,92.312C276.416,80.492,285.662,68.671,290.286,62.76L294.909,56.85" id="edge_0_9" class="edge-thickness-normal edge-pattern-solid edge section-edge-8 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_9" data-points="W3sieCI6MjM5LjQzMDE0MTk3NDE4MjU2LCJ5IjoxMjcuNzc0NTI3NjQwNTg1MjJ9LHsieCI6MjY3LjE2OTUwODM4OTQ4MywieSI6OTIuMzEyMjkyMDIwOTk0fSx7IngiOjI5NC45MDg4NzQ4MDQ3ODM0LCJ5Ijo1Ni44NTAwNTY0MDE0MDI3N31d"/><path d="M216.117,144.787L210.588,146.829C205.058,148.872,193.998,152.957,182.938,157.042C171.878,161.127,160.819,165.212,155.289,167.254L149.759,169.297" id="edge_0_10" class="edge-thickness-normal edge-pattern-solid edge section-edge-9 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_10" data-points="W3sieCI6MjE2LjExNzQ4OTc0NTAwNTEsInkiOjE0NC43ODY1MjU3MjM4ODI3fSx7IngiOjE4Mi45MzgyMDE2MTQxMjA1NCwieSI6MTU3LjA0MTYyNDA3ODIyMDU0fSx7IngiOjE0OS43NTg5MTM0ODMyMzYsInkiOjE2OS4yOTY3MjI0MzI1NTgzN31d"/><path d="M216.349,133.805L209.493,130.94C202.638,128.074,188.928,122.344,175.218,116.613C161.508,110.883,147.797,105.153,140.942,102.287L134.087,99.422" id="edge_0_11" class="edge-thickness-normal edge-pattern-solid edge section-edge-10 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_11" data-points="W3sieCI6MjE2LjM0ODU5MzUzMTY5NjQ4LCJ5IjoxMzMuODA0NzQ2NDE2Nzk0NH0seyJ4IjoxNzUuMjE3ODgyODk2MTMzOTEsInkiOjExNi42MTM0MzkzNTI3OTA4fSx7IngiOjEzNC4wODcxNzIyNjA1NzEzNSwieSI6OTkuNDIyMTMyMjg4Nzg3MjJ9XQ=="/><path d="M233.759,154.158L235.64,161.835C237.521,169.512,241.284,184.866,245.046,200.22C248.809,215.574,252.572,230.928,254.453,238.605L256.334,246.282" id="edge_0_12" class="edge-thickness-normal edge-pattern-solid edge section-edge-0 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_12" data-points="W3sieCI6MjMzLjc1ODU3NDE2ODMzODY3LCJ5IjoxNTQuMTU4MjM3MDk4ODgzMTJ9LHsieCI6MjQ1LjA0NjQwMzkwNjE1ODg0LCJ5IjoyMDAuMjIwMTQ1NzE3NDY0MDV9LHsieCI6MjU2LjMzNDIzMzY0Mzk3OSwieSI6MjQ2LjI4MjA1NDMzNjA0NDk4fV0="/><path d="M215.192,139.279L203.758,139.042C192.324,138.805,169.457,138.331,146.59,137.857C123.723,137.383,100.856,136.91,89.423,136.673L77.989,136.436" id="edge_0_13" class="edge-thickness-normal edge-pattern-solid edge section-edge-1 edge-depth-1" style="undefined;;;undefined" data-edge="true" data-et="edge" data-id="edge_0_13" data-points="W3sieCI6MjE1LjE5MTU2NTMxNjc4MjMyLCJ5IjoxMzkuMjc4NTc5MDAzNDc1Njd9LHsieCI6MTQ2LjU5MDI2Njk0ODUwMDU4LCJ5IjoxMzcuODU3MTQ1MDQzMDM4Mzd9LHsieCI6NzcuOTg4OTY4NTgwMjE4ODUsInkiOjEzNi40MzU3MTEwODI2MDEwN31d"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="edge_0_1" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_2" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_3" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_4" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_5" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_6" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_7" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_8" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_9" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_10" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_11" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_12" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="edge_0_13" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node mindmap-node section-root section--1" id="node_0" transform="translate(230.18834639700117, 139.5893155993084)"><circle class="basic label-container" r="32.4921875" cx="0" cy="0"/><g class="label" transform="translate(-22.4921875, -9)"><rect/><foreignObject width="44.984375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>OpenAPI</p></span></div></foreignObject></g></g><g class="node mindmap-node section-0" id="node_1" transform="translate(183.00514324558503, 235.6859723175637)"><path id="node-1" class="node-bkg node-0" d="M-23.59375 9 v-18 q0,-5 5,-5 h37.1875 q5,0 5,5 v18 q0,5 -5,5 h-37.1875 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-23.59375" y1="14" x2="23.59375" y2="14"/><g class="label" transform="translate(-3.59375, -9)"><rect/><foreignObject width="7.1875" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>C</p></span></div></foreignObject></g></g><g class="node mindmap-node section-1" id="node_2" transform="translate(220.04953213756062, 29)"><path id="node-2" class="node-bkg node-0" d="M-29.8828125 9 v-18 q0,-5 5,-5 h49.765625 q5,0 5,5 v18 q0,5 -5,5 h-49.765625 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-29.8828125" y1="14" x2="29.8828125" y2="14"/><g class="label" transform="translate(-9.8828125, -9)"><rect/><foreignObject width="19.765625" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>C++</p></span></div></foreignObject></g></g><g class="node mindmap-node section-2" id="node_3" transform="translate(313.4916813741502, 220.59297697619343)"><path id="node-3" class="node-bkg node-0" d="M-26.7421875 9 v-18 q0,-5 5,-5 h43.484375 q5,0 5,5 v18 q0,5 -5,5 h-43.484375 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-26.7421875" y1="14" x2="26.7421875" y2="14"/><g class="label" transform="translate(-6.7421875, -9)"><rect/><foreignObject width="13.484375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>C#</p></span></div></foreignObject></g></g><g class="node mindmap-node section-3" id="node_4" transform="translate(364.7888973457025, 177.35963895305656)"><path id="node-4" class="node-bkg node-0" d="M-27.28125 9 v-18 q0,-5 5,-5 h44.5625 q5,0 5,5 v18 q0,5 -5,5 h-44.5625 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-27.28125" y1="14" x2="27.28125" y2="14"/><g class="label" transform="translate(-7.28125, -9)"><rect/><foreignObject width="14.5625" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Go</p></span></div></foreignObject></g></g><g class="node mindmap-node section-4" id="node_5" transform="translate(135.66906395950082, 42.32697438850278)"><path id="node-5" class="node-bkg node-0" d="M-32.109375 9 v-18 q0,-5 5,-5 h54.21875 q5,0 5,5 v18 q0,5 -5,5 h-54.21875 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-32.109375" y1="14" x2="32.109375" y2="14"/><g class="label" transform="translate(-12.109375, -9)"><rect/><foreignObject width="24.21875" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Java</p></span></div></foreignObject></g></g><g class="node mindmap-node section-5" id="node_6" transform="translate(335.16482019732894, 129.47906340424004)"><path id="node-6" class="node-bkg node-0" d="M-35.625 9 v-18 q0,-5 5,-5 h61.25 q5,0 5,5 v18 q0,5 -5,5 h-61.25 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-35.625" y1="14" x2="35.625" y2="14"/><g class="label" transform="translate(-15.625, -9)"><rect/><foreignObject width="31.25" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Kotlin</p></span></div></foreignObject></g></g><g class="node mindmap-node section-6" id="node_7" transform="translate(105.32613814084789, 220.52538968946567)"><path id="node-7" class="node-bkg node-0" d="M-30.6171875 9 v-18 q0,-5 5,-5 h51.234375 q5,0 5,5 v18 q0,5 -5,5 h-51.234375 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-30.6171875" y1="14" x2="30.6171875" y2="14"/><g class="label" transform="translate(-10.6171875, -9)"><rect/><foreignObject width="21.234375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>PHP</p></span></div></foreignObject></g></g><g class="node mindmap-node section-7" id="node_8" transform="translate(374.8165005483593, 85.28962491361335)"><path id="node-8" class="node-bkg node-0" d="M-38.4609375 9 v-18 q0,-5 5,-5 h66.921875 q5,0 5,5 v18 q0,5 -5,5 h-66.921875 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-38.4609375" y1="14" x2="38.4609375" y2="14"/><g class="label" transform="translate(-18.4609375, -9)"><rect/><foreignObject width="36.921875" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Python</p></span></div></foreignObject></g></g><g class="node mindmap-node section-8" id="node_9" transform="translate(304.1506703819648, 45.03526844267958)"><path id="node-9" class="node-bkg node-0" d="M-32.90625 9 v-18 q0,-5 5,-5 h55.8125 q5,0 5,5 v18 q0,5 -5,5 h-55.8125 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-32.90625" y1="14" x2="32.90625" y2="14"/><g class="label" transform="translate(-12.90625, -9)"><rect/><foreignObject width="25.8125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Ruby</p></span></div></foreignObject></g></g><g class="node mindmap-node section-9" id="node_10" transform="translate(135.68805683123992, 174.49393255713267)"><path id="node-10" class="node-bkg node-0" d="M-31.40625 9 v-18 q0,-5 5,-5 h52.8125 q5,0 5,5 v18 q0,5 -5,5 h-52.8125 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-31.40625" y1="14" x2="31.40625" y2="14"/><g class="label" transform="translate(-11.40625, -9)"><rect/><foreignObject width="22.8125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Rust</p></span></div></foreignObject></g></g><g class="node mindmap-node section-10" id="node_11" transform="translate(120.24741939526666, 93.6375631062732)"><path id="node-11" class="node-bkg node-0" d="M-32.9765625 9 v-18 q0,-5 5,-5 h55.953125 q5,0 5,5 v18 q0,5 -5,5 h-55.953125 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-32.9765625" y1="14" x2="32.9765625" y2="14"/><g class="label" transform="translate(-12.9765625, -9)"><rect/><foreignObject width="25.953125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Shell</p></span></div></foreignObject></g></g><g class="node mindmap-node section-0" id="node_12" transform="translate(259.9044614153165, 260.8509758356197)"><path id="node-12" class="node-bkg node-0" d="M-33.6640625 9 v-18 q0,-5 5,-5 h57.328125 q5,0 5,5 v18 q0,5 -5,5 h-57.328125 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-33.6640625" y1="14" x2="33.6640625" y2="14"/><g class="label" transform="translate(-13.6640625, -9)"><rect/><foreignObject width="27.328125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Swift</p></span></div></foreignObject></g></g><g class="node mindmap-node section-1" id="node_13" transform="translate(62.9921875, 136.12497448676834)"><path id="node-13" class="node-bkg node-0" d="M-47.9921875 9 v-18 q0,-5 5,-5 h85.984375 q5,0 5,5 v18 q0,5 -5,5 h-85.984375 q-5,0 -5,-5 Z"/><line class="node-line-" x1="-47.9921875" y1="14" x2="47.9921875" y2="14"/><g class="label" transform="translate(-27.9921875, -9)"><rect/><foreignObject width="55.984375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>TypeScript</p></span></div></foreignObject></g></g></g></g></svg>
</div>
<h3>Autonomous SDK Generation</h3>
<p>Trigger our GitOps pipeline with an OpenAPI spec to instantly synthesize strongly-typed client libraries across 13 languages. Eliminate manual intervention and configuration drift.</p>
</article>
<!-- Column 2 -->
<article class="feature-card">
<div class="lang-icons lang-icons-container" aria-hidden="true" >
<i class="devicon-python-plain" title="PyPI" role="img" aria-label="Python (PyPI)"></i>
<i class="devicon-rust-plain" title="Crates.io" role="img" aria-label="Rust (Crates.io)"></i>
<i class="devicon-npm-original-wordmark" title="npm" role="img" aria-label="Node.js (npm)"></i>
<i class="devicon-go-plain" title="Go Modules" role="img" aria-label="Go (Go Modules)"></i>
<i class="devicon-java-plain" title="Maven" role="img" aria-label="Java (Maven)"></i>
<i class="devicon-ruby-plain" title="RubyGems" role="img" aria-label="Ruby (RubyGems)"></i>
<i class="devicon-apple-original" title="CocoaPods" role="img" aria-label="Apple (CocoaPods)"></i>
<i class="devicon-csharp-plain" title="NuGet" role="img" aria-label="C# (NuGet)"></i>
</div>
<h3>Native Registry Publishing</h3>
<p>Go beyond repository generation. Our pipeline fully automates the release lifecycleβhandling semantic versioning, dependency resolution, packaging, and publishing directly to package registries like PyPI, npm, crates.io, and Maven.</p>
</article>
</div>
</section>
<!-- Big Feature Section: Interactive Docs -->
<section class="features section-alt-padding" aria-label="Interactive API Documentation Frontend">
<div class="container">
<div class="section-header">
<h2 class="section-title">Interactive API Documentation</h2>
<p class="section-subtitle">Complement your generated SDKs with a comprehensive, interactive developer portal.</p>
</div>
<div class="features-split">
<div class="features-split-text">
<ul class="features-list">
<li>
<h4 class="features-list-title">π Static HTML Compilation</h4>
<p class="features-list-desc">Compile your documentation into performant, static HTML, CSS, and JavaScript. Host seamlessly on Amazon S3, GitHub Pages, or any static file server without backend dependencies.</p>
</li>
<li>
<h4 class="features-list-title">π» SDK-Integrated Snippets</h4>
<p class="features-list-desc">Ensure perfect accuracy. Our documentation engine automatically integrates precise, copy-ready code snippets for every endpoint across all 13 supported languages, derived directly from the generated SDKs.</p>
</li>
<li>
<h4 class="features-list-title">β‘ Interactive API Explorer</h4>
<p class="features-list-desc">Enable users to execute live API calls directly from the browser. Validate request payloads, inspect raw responses, and debug integrations seamlessly within the documentation.</p>
</li>
</ul>
</div>
<div class="features-split-image">
<svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart inline-svg svg-736" viewBox="0 0 736.96875 269"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:14px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:hsl(206.4, 100%, 100%);}#my-svg .error-text{fill:#000000;stroke:#000000;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#ff6a00;stroke:#ff6a00;}#my-svg .marker.cross{stroke:#ff6a00;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:14px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#000000;}#my-svg .cluster-label span{color:#000000;}#my-svg .cluster-label span p{}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#fff1e6;stroke:#ff6a00;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#ff6a00!important;stroke-width:0;stroke:#ff6a00;}#my-svg .arrowheadPath{fill:#0b0b0b;}#my-svg .edgePath .path{stroke:#ff6a00;stroke-width:2.0px;}#my-svg .flowchart-link{stroke:#ff6a00;fill:none;}#my-svg .edgeLabel{background-color:hsl(-93.6, 100%, 95.0980392157%);text-align:center;}#my-svg .edgeLabel p{background-color:hsl(-93.6, 100%, 95.0980392157%);}#my-svg .edgeLabel rect{opacity:0.5;background-color:hsl(-93.6, 100%, 95.0980392157%);fill:hsl(-93.6, 100%, 95.0980392157%);}#my-svg .labelBkg{background-color:rgba(241, 230.0000000001, 255, 0.5);}#my-svg .cluster rect{fill:hsl(206.4, 100%, 100%);stroke:hsl(206.4, 60%, 90%);stroke-width:1px;}#my-svg .cluster text{fill:#000000;}#my-svg .cluster span{color:#000000;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(206.4, 100%, 100%);border:1px solid hsl(206.4, 60%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:hsl(-93.6, 100%, 95.0980392157%);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:hsl(-93.6, 100%, 95.0980392157%);padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:hsl(-93.6, 100%, 95.0980392157%);fill:hsl(-93.6, 100%, 95.0980392157%);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
#my-svg .mindmap-node span { color: #333 !important; }
#my-svg .mindmap-node p { color: #333 !important; }
#my-svg .node span { color: #333 !important; }
#my-svg .node p { color: #333 !important; }
</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M153.813,134.5L157.979,134.5C162.146,134.5,170.479,134.5,178.146,134.5C185.813,134.5,192.813,134.5,196.313,134.5L199.813,134.5" id="L_A_B_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_A_B_0" data-points="W3sieCI6MTUzLjgxMjUsInkiOjEzNC41fSx7IngiOjE3OC44MTI1LCJ5IjoxMzQuNX0seyJ4IjoyMDMuODEyNSwieSI6MTM0LjV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M308.561,109L321.468,96.417C334.374,83.833,360.187,58.667,381.538,46.083C402.888,33.5,419.776,33.5,428.22,33.5L436.664,33.5" id="L_B_C_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_C_0" data-points="W3sieCI6MzA4LjU2MTEwNzY3MzI2NzMsInkiOjEwOX0seyJ4IjozODYsInkiOjMzLjV9LHsieCI6NDQwLjY2NDA2MjUsInkiOjMzLjV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M361,134.5L365.167,134.5C369.333,134.5,377.667,134.5,385.333,134.5C393,134.5,400,134.5,403.5,134.5L407,134.5" id="L_B_D_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_D_0" data-points="W3sieCI6MzYxLCJ5IjoxMzQuNX0seyJ4IjozODYsInkiOjEzNC41fSx7IngiOjQxMSwieSI6MTM0LjV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M308.561,160L321.468,172.583C334.374,185.167,360.187,210.333,376.937,222.917C393.688,235.5,401.375,235.5,405.219,235.5L409.063,235.5" id="L_B_E_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_B_E_0" data-points="W3sieCI6MzA4LjU2MTEwNzY3MzI2NzMsInkiOjE2MH0seyJ4IjozODYsInkiOjIzNS41fSx7IngiOjQxMy4wNjI1LCJ5IjoyMzUuNX1d" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M529.711,33.5L538.822,33.5C547.932,33.5,566.154,33.5,582.56,42.19C598.967,50.88,613.559,68.26,620.855,76.95L628.15,85.64" id="L_C_F_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_F_0" data-points="W3sieCI6NTI5LjcxMDkzNzUsInkiOjMzLjV9LHsieCI6NTg0LjM3NSwieSI6MzMuNX0seyJ4Ijo2MzAuNzIyNDY0MDg4MjUxNiwieSI6ODguNzAzNjEzMDIxMjc0ODJ9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M559.375,134.5L563.542,134.5C567.708,134.5,576.042,134.5,583.708,134.5C591.375,134.5,598.375,134.5,601.875,134.5L605.375,134.5" id="L_D_F_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_D_F_0" data-points="W3sieCI6NTU5LjM3NSwieSI6MTM0LjV9LHsieCI6NTg0LjM3NSwieSI6MTM0LjV9LHsieCI6NjA5LjM3NSwieSI6MTM0LjV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M557.313,235.5L561.823,235.5C566.333,235.5,575.354,235.5,587.16,226.81C598.967,218.12,613.559,200.74,620.855,192.05L628.15,183.36" id="L_E_F_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_E_F_0" data-points="W3sieCI6NTU3LjMxMjUsInkiOjIzNS41fSx7IngiOjU4NC4zNzUsInkiOjIzNS41fSx7IngiOjYzMC43MjI0NjQwODgyNTE2LCJ5IjoxODAuMjk2Mzg2OTc4NzI1Mn1d" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_A_B_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_B_C_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_B_D_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_B_E_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_C_F_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_D_F_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_E_F_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="flowchart-A-0" transform="translate(80.90625, 134.5)"><rect class="basic label-container" x="-72.90625" y="-25.5" width="145.8125" height="51"/><g class="label" transform="translate(-42.90625, -10.5)"><rect/><foreignObject width="85.8125" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>OpenAPI Spec</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-B-1" transform="translate(282.40625, 134.5)"><rect class="basic label-container" x="-78.59375" y="-25.5" width="157.1875" height="51"/><g class="label" transform="translate(-48.59375, -10.5)"><rect/><foreignObject width="97.1875" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Offscale Engine</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-C-3" transform="translate(485.1875, 33.5)"><rect class="basic label-container" x="-44.5234375" y="-25.5" width="89.046875" height="51"/><g class="label" transform="translate(-14.5234375, -10.5)"><rect/><foreignObject width="29.046875" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>SDKs</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-D-5" transform="translate(485.1875, 134.5)"><rect class="basic label-container" x="-74.1875" y="-25.5" width="148.375" height="51"/><g class="label" transform="translate(-44.1875, -10.5)"><rect/><foreignObject width="88.375" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Code Snippets</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-E-7" transform="translate(485.1875, 235.5)"><rect class="basic label-container" x="-72.125" y="-25.5" width="144.25" height="51"/><g class="label" transform="translate(-42.125, -10.5)"><rect/><foreignObject width="84.25" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>HTML/CSS/JS</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-F-9" transform="translate(669.171875, 134.5)"><circle class="basic label-container" r="59.796875" cx="0" cy="0"/><g class="label" transform="translate(-52.296875, -21)"><rect/><foreignObject width="104.59375" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel" ><p>Interactive<br />Developer Portal</p></span></div></foreignObject></g></g></g></g></g></svg>
</div>
</div>
</div>
</section>
<!-- Interactive Demo Banner -->
<section id="demo" aria-labelledby="demo-heading" class="demo-section">
<div class="demo-bg"></div>
<div class="container relative z-index-1 demo-container">
<div class="demo-content">
<h2 id="demo-heading" class="demo-title">Interactive Live Demo <span class="badge-live"><span class="badge-dot-live"></span>Live Now</span></h2>
<p class="demo-subtitle" style="margin-left: 0; margin-right: 0;">Experience our WebAssembly (WASM) powered pipeline locally in your browser. Input an OpenAPI spec and instantly preview the generated SDK codeβfully client-side, with zero backend dependency.</p>
<div class="demo-actions" style="justify-content: flex-start;">
<a href="../cdd-web-ui" class="btn btn-demo">Try the Live Demo Now →</a>
</div>
</div>
<div class="demo-visual" aria-hidden="true">
<div class="widget-preview">
<div class="widget-header">
<div class="widget-dots"><span class="dot red"></span><span class="dot yellow"></span><span class="dot green"></span></div>
<div class="widget-title-text">cdd-web-ui β Powered by WASM</div>
</div>
<div class="widget-body">
<div class="widget-pane">
<div class="pane-label">openapi.yaml</div>
<div class="pane-code">
<span class="token-key">openapi:</span> <span class="token-string">3.1.0</span><br>
<span class="token-key">info:</span><br>
<span class="token-key">title:</span> <span class="token-string">Petstore API</span><br>
<span class="token-key">paths:</span><br>
<span class="token-key">/pet:</span><br>
<span class="token-key">post:</span> ...
</div>
</div>
<div class="widget-divider">
<div class="wasm-badge">β‘ WASM</div>
</div>
<div class="widget-pane code-pane">
<div class="pane-label">client.rs (Rust)</div>
<div class="pane-code">
// ...<br>
<span class="token-keyword">pub async fn</span> <span class="token-func">add_pet</span>(<br>
client: &<span class="token-type">Client</span>,<br>
base_url: &<span class="token-type">str</span>,<br>
auth_token: <span class="token-type">Option</span><&<span class="token-type">str</span>>,<br>
body: <span class="token-type">Pet</span><br>
) -> <span class="token-type">Result</span><<span class="token-type">Pet</span>, reqwest::<span class="token-type">Error</span>> {<br>
// ...
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Coming Soon Roadmap -->
<section id="roadmap" aria-labelledby="roadmap-heading" class="roadmap-section">
<div class="container">
<div class="section-header" style="margin-bottom: 48px;">
<div class="badge-coming-soon" style="margin-bottom: 16px;">
<span class="badge-dot"></span>
In Development
</div>
<h2 id="roadmap-heading" class="roadmap-title" style="margin-bottom: 16px;">Self-Service Dashboard</h2>
<p class="roadmap-subtitle">We are continuously extending our pipeline capabilities. Upcoming features for your centralized command center include:</p>
</div>
<div class="roadmap-grid">
<!-- Feature 1 -->
<article class="roadmap-card">
<div class="roadmap-icon">π¦</div>
<h3 class="roadmap-card-title">Automated Registry Publishing</h3>
<p class="roadmap-card-desc">Deploy generated packages directly to native package registries, including PyPI, crates.io, RubyGems, npm, and Maven.</p>
</article>
<!-- Feature 2 -->
<article class="roadmap-card">
<div class="roadmap-icon">π</div>
<h3 class="roadmap-card-title">Hosted API Documentation</h3>
<p class="roadmap-card-desc">One-click generation and cloud publishing of interactive, static HTML documentation for your APIs and SDKs.</p>
</article>
</div>
<!-- Email Gathering Form -->
<div style="margin-top: 64px; display: flex; justify-content: center; flex-direction: column; align-items: center;">
<h3 class="roadmap-card-title" style="margin-bottom: 24px; text-align: center;">Stay Updated</h3>
<iframe src="https://docs.google.com/forms/d/e/1FAIpQLSddXpoMELteYsRAuTTRTZrXUafDZfBPYa8fFfK7E1pTZ5cJhw/viewform?embedded=true" width="640" height="450" frameborder="0" marginheight="0" marginwidth="0">
<div style="text-align: center; padding: 20px;">
<p>It seems your browser does not support iframes, or they are disabled.</p>
<p><a href="https://docs.google.com/forms/d/e/1FAIpQLSddXpoMELteYsRAuTTRTZrXUafDZfBPYa8fFfK7E1pTZ5cJhw/viewform?usp=publish-editor" target="_blank" rel="noopener noreferrer" style="color: var(--primary); text-decoration: underline;">Click here to fill out our update form</a>.</p>
</div>
</iframe>
<noscript>
<div style="text-align: center; padding: 20px; margin-top: 16px; border: 1px solid var(--border); border-radius: 8px; background-color: var(--surface);">
<p>JavaScript is required to display the embedded form properly.</p>
<p><a href="https://docs.google.com/forms/d/e/1FAIpQLSddXpoMELteYsRAuTTRTZrXUafDZfBPYa8fFfK7E1pTZ5cJhw/viewform?usp=publish-editor" target="_blank" rel="noopener noreferrer" style="color: var(--primary); text-decoration: underline;">Please click here to open the form directly</a>.</p>
</div>
</noscript>
</div>
</div>
</section>
<!-- Comparison Tables Section -->
<section id="comparison" class="comparison-section comparison-section-bg" aria-labelledby="comparison-heading" >
<div class="container">
<div class="section-header">
<h2 id="comparison-heading" class="section-title">Why Offscale?</h2>
<p class="section-subtitle">Evaluate how our independent, end-to-end pipeline compares to alternative SDK generators.</p>
</div>
<div class="table-container">
<table class="comparison-table"><caption>Language Support Comparison</caption>
<thead>
<tr>
<th scope="col" class="col-25">Language Support</th>
<th class="highlight col-20" >Offscale</th>
<th scope="col" class="col-18">Speakeasy</th>
<th scope="col" class="col-18">Stainless</th>
<th scope="col" class="col-19">Postman / Fern</th>
</tr>
</thead>
<tbody>
<tr><th scope="row">Python</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td></tr>
<tr><th scope="row">TypeScript</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td></tr>
<tr><th scope="row">Go</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td></tr>
<tr><th scope="row">Java</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td></tr>
<tr><th scope="row">C#</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td></tr>
<tr><th scope="row">PHP</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td></tr>
<tr><th scope="row">Ruby</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td></tr>
<tr><th scope="row">Kotlin</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td></tr>
<tr class="table-row-alt"><th scope="row"><strong>Rust</strong></th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td></tr>
<tr class="table-row-alt"><th scope="row"><strong>Swift</strong></th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td></tr>
<tr class="table-row-alt"><th scope="row"><strong>C++</strong></th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td></tr>
<tr class="table-row-alt"><th scope="row"><strong>C</strong></th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td></tr>
<tr class="table-row-alt"><th scope="row"><strong>Shell / Bash</strong></th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td></tr>
<tr>
<td class="font-bold">Total Supported</td>
<td class="highlight font-bold text-lg" >13</td>
<td class="font-bold">7</td>
<td class="font-bold">8</td>
<td class="font-bold">6</td>
</tr>
</tbody>
</table>
</div>
<div class="table-container">
<table class="comparison-table"><caption>Automation & DevEx Comparison</caption>
<thead>
<tr>
<th scope="col" class="col-25">Automation & DevEx</th>
<th class="highlight col-20" >Offscale</th>
<th scope="col" class="col-18">Speakeasy</th>
<th scope="col" class="col-18">Stainless</th>
<th scope="col" class="col-19">Postman / Fern</th>
</tr>
</thead>
<tbody>
<tr><th scope="row">OpenAPI to Typed SDK</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td></tr>
<tr><th scope="row">CLI Code Generation</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td></tr>
<tr><th scope="row">Auto-Publish Packages*</th><td class="highlight"><span class="check-yes">β
Free</span></td><td><span class="check-partial">π° Paid Tier</span></td><td><span class="check-partial">π° Paid Tier</span></td><td><span class="check-partial">π° Paid Tier</span></td></tr>
<tr><th scope="row">Static HTML Docs</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-no">β Hosted Only</span></td><td><span class="check-no">β Hosted Only</span></td><td><span class="check-no">β Hosted Only</span></td></tr>
<tr><th scope="row">13-Language Snippets</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-no">β Partial</span></td><td><span class="check-no">β Partial</span></td><td><span class="check-no">β Partial</span></td></tr>
<tr><th scope="row">Interactive API Testing</th><td class="highlight"><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td><td><span class="check-no">β No</span></td><td><span class="check-yes">β
Yes</span></td></tr>
<tr><th scope="row">Terraform Generation</th><td class="highlight"><span class="check-no">β No</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td></tr>
<tr><th scope="row">MCP Integration</th><td class="highlight"><span class="check-no">β No</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-yes">β
Yes</span></td><td><span class="check-no">β No</span></td></tr>
</tbody>
</table>
</div>
<p class="table-footnote">* Native registry publishing including PyPI, npm, crates.io, Maven, RubyGems, CocoaPods, and NuGet.</p>
</div>
</section>
</main>
<!-- Native HTML Popover API -->
<div id="consulting-popover" popover class="custom-popover" aria-labelledby="popover-title">
<h3 id="popover-title" class="popover-title">Consulting Services</h3>
<p class="popover-body">Our consultancy services have transitioned exclusively to product development as of March 2026.</p>
<button class="popover-button" popovertarget="consulting-popover" popovertargetaction="hide">Acknowledge</button>
</div>
<footer class="footer">
<div class="container">
<p>© 2026 Offscale. Automating the API lifecycle, from spec to package release.</p>
<div class="footer-links">
<a href="https://github.com/SamuelMarks/cdd-ctl" target="_blank" rel="noopener" aria-label="cdd-ctl on GitHub">
<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="footer-icon">
<path d="M12 2C6.477 2 2 6.477 2 12c0 4.42 2.865 8.166 6.839 9.489.5.092.682-.217.682-.482 0-.237-.008-.866-.013-1.7-2.782.603-3.369-1.34-3.369-1.34-.454-1.156-1.11-1.462-1.11-1.462-.908-.62.069-.608.069-.608 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.087 2.91.831.092-.646.35-1.086.636-1.336-2.22-.253-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.029-2.683-.103-.253-.446-1.27.098-2.647 0 0 .84-.269 2.75 1.025A9.578 9.578 0 0112 6.836c.85.004 1.705.114 2.504.336 1.909-1.294 2.747-1.025 2.747-1.025.546 1.377.203 2.394.1 2.647.64.699 1.028 1.592 1.028 2.683 0 3.842-2.339 4.687-4.566 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.578.688.48C19.138 20.161 22 16.418 22 12c0-5.523-4.477-10-10-10z"/>
</svg>
GitHub
</a>
</div>
</div>
</footer>
<script type="module" src="/script.js"></script>
</body>
</html>