1<!DOCTYPE html><html dir="ltr" lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate">
1<script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.CuErLuAJ.js"></script>
1<script>(()=>{const sel='body link[rel="stylesheet"]';document.addEventListener("astro:before-preparation",(e)=>{const load=e.loader;e.loader=async()=>{await load();const links=[...e.newDocument.querySelectorAll(sel)].filter((l)=>!document.head.querySelector('link[rel="stylesheet"][href="'+l.getAttribute("href")+'"]'));await Promise.all(links.map((l)=>new Promise((done)=>{const c=document.createElement("link");for(const a of l.attributes){c.setAttribute(a.name,a.value);}c.onload=done;c.onerror=done;document.head.append(c);})));};});document.addEventListener("astro:before-swap",(e)=>{for(const l of e.newDocument.querySelectorAll(sel)){e.newDocument.head.append(l);}});})();</script>
1<title>About - Stainless Code</title><link href="/icon.svg" rel="icon" type="image/svg+xml"><link href="/icon-dark.svg" media="(prefers-color-scheme: dark)" rel="icon" type="image/svg+xml"><link href="/icon.svg" media="(prefers-color-scheme: light)" rel="icon" type="image/svg+xml"><link href="/apple-touch-icon.png" rel="apple-touch-icon"><style>@font-face{font-family:"Inter Tight-549c20c2a96ee466";src:url("/_astro/fonts/2536380416fd59fe.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:italic;}@font-face{font-family:"Inter Tight-549c20c2a96ee466";src:url("/_astro/fonts/2536380416fd59fe.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:500;font-style:italic;}@font-face{font-family:"Inter Tight-549c20c2a96ee466";src:url("/_astro/fonts/2536380416fd59fe.woff2") format("woff2");font-display:swap;
1unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:600;font-style:italic;}@font-face{font-family:"Inter Tight-549c20c2a96ee466";src:url("/_astro/fonts/2536380416fd59fe.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:700;font-style:italic;}@font-face{font-family:"Inter Tight-549c20c2a96ee466";src:url("/_astro/fonts/6d4bffbf7335e8f1.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:normal;}@font-face{font-family:"Inter Tight-549c20c2a96ee466";src:url("/_astro/fonts/6d4bffbf7335e8f1.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:500;font-style:normal;}@font-face{font-family:"Inter Tight-549c20c2a96ee466";src:url("/_astro/fonts/6d4bffbf7335e8f1.woff2") format("woff2");font-display:swap;
1unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:600;font-style:normal;}@font-face{font-family:"Inter Tight-549c20c2a96ee466";src:url("/_astro/fonts/6d4bffbf7335e8f1.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:700;font-style:normal;}@font-face{font-family:"Inter Tight-549c20c2a96ee466 fallback: Arial";src:local("Arial");font-display:swap;font-weight:400;font-style:italic;size-adjust:96.4951%;ascent-override:100.3937%;descent-override:24.9972%;line-gap-override:0%;}@font-face{font-family:"Inter Tight-549c20c2a96ee466 fallback: Arial";src:local("Arial");font-display:swap;font-weight:500;font-style:italic;size-adjust:96.4951%;ascent-override:100.3937%;descent-override:24.9972%;line-gap-override:0%;}@font-face{font-family:"Inter Tight-549c20c2a96ee466 fallback: Arial";src:local("Arial");font-display:swap;font-weight:600;font-style:italic;size-adjust:96.4951%;ascent-override:100.3937%;descent-override:24.9972%;line-gap-override:0%;}@font-face{font-family:"Inter Tight-549c20c2a96ee466 fallback: Arial Bold";src:local("Arial Bold");font-display:swap;font-weight:700;font-style:italic;size-adjust:89.6236%;ascent-override:108.0909%;
1descent-override:26.9138%;line-gap-override:0%;}@font-face{font-family:"Inter Tight-549c20c2a96ee466 fallback: Arial";src:local("Arial");font-display:swap;font-weight:400;font-style:normal;size-adjust:96.4951%;ascent-override:100.3937%;descent-override:24.9972%;line-gap-override:0%;}@font-face{font-family:"Inter Tight-549c20c2a96ee466 fallback: Arial";src:local("Arial");font-display:swap;font-weight:500;font-style:normal;size-adjust:96.4951%;ascent-override:100.3937%;descent-override:24.9972%;line-gap-override:0%;}@font-face{font-family:"Inter Tight-549c20c2a96ee466 fallback: Arial";src:local("Arial");font-display:swap;font-weight:600;font-style:normal;size-adjust:96.4951%;ascent-override:100.3937%;descent-override:24.9972%;line-gap-override:0%;}@font-face{font-family:"Inter Tight-549c20c2a96ee466 fallback: Arial Bold";src:local("Arial Bold");font-display:swap;font-weight:700;font-style:normal;size-adjust:89.6236%;ascent-override:108.0909%;descent-override:26.9138%;line-gap-override:0%;}:root{--blume-ff-inter-tight:"Inter Tight-549c20c2a96ee466","Inter Tight-549c20c2a96ee466 fallback: Arial","Inter Tight-549c20c2a96ee466 fallback: Arial Bold",ui-sans-serif,system-ui,sans-serif;}</style><style>@font-face{font-family:Inter-80c999eb7b37dc76;src:url("/_astro/fonts/91753f8d8da3aeb7.woff2") format("woff2");font-display:swap;
1unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:italic;}@font-face{font-family:Inter-80c999eb7b37dc76;src:url("/_astro/fonts/91753f8d8da3aeb7.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:500;font-style:italic;}@font-face{font-family:Inter-80c999eb7b37dc76;src:url("/_astro/fonts/91753f8d8da3aeb7.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:600;font-style:italic;}@font-face{font-family:Inter-80c999eb7b37dc76;src:url("/_astro/fonts/91753f8d8da3aeb7.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:700;font-style:italic;}@font-face{font-family:Inter-80c999eb7b37dc76;src:url("/_astro/fonts/e868cdf4720e9ea5.woff2") format("woff2");font-display:swap;
1unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:normal;}@font-face{font-family:Inter-80c999eb7b37dc76;src:url("/_astro/fonts/e868cdf4720e9ea5.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:500;font-style:normal;}@font-face{font-family:Inter-80c999eb7b37dc76;src:url("/_astro/fonts/e868cdf4720e9ea5.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:600;font-style:normal;}@font-face{font-family:Inter-80c999eb7b37dc76;src:url("/_astro/fonts/e868cdf4720e9ea5.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:700;font-style:normal;}@font-face{font-family:"Inter-80c999eb7b37dc76 fallback: Arial";src:local("Arial");font-display:swap;font-weight:400;font-style:italic;size-adjust:107.7766%;ascent-override:89.885%;descent-override:22.3806%;line-gap-override:0%;}@font-face{font-family:"Inter-80c999eb7b37dc76 fallback: Arial";src:local("Arial");font-display:swap;font-weight:500;font-style:italic;size-adjust:107.7766%;ascent-override:89.885%;descent-override:22.3806%;line-gap-override:0%;}@font-face{font-family:"Inter-80c999eb7b37dc76 fallback: Arial";src:local("Arial");font-display:swap;font-weight:600;font-style:italic;size-adjust:107.7766%;ascent-override:89.885%;descent-override:22.3806%;line-gap-override:0%;}@font-face{font-family:"Inter-80c999eb7b37dc76 fallback: Arial Bold";src:local("Arial Bold");font-display:swap;font-weight:700;font-style:italic;size-adjust:100.1017%;ascent-override:96.7765%;descent-override:24.0966%;line-gap-override:0%;}@font-face{font-family:"Inter-80c999eb7b37dc76 fallback: Arial";src:local("Arial");font-display:swap;font-weight:400;font-style:normal;size-adjust:107.7766%;ascent-override:89.885%;descent-override:22.3806%;line-gap-override:0%;}@font-face{font-family:"Inter-80c999eb7b37dc76 fallback: Arial";src:local("Arial");font-display:swap;font-weight:500;font-style:normal;size-adjust:107.7766%;ascent-override:89.885%;descent-override:22.3806%;line-gap-override:0%;}@font-face{font-family:"Inter-80c999eb7b37dc76 fallback: Arial";src:local("Arial");font-display:swap;font-weight:600;font-style:normal;size-adjust:107.7766%;ascent-override:89.885%;descent-override:22.3806%;line-gap-override:0%;}@font-face{font-family:"Inter-80c999eb7b37dc76 fallback: Arial Bold";src:local("Arial Bold");font-display:swap;font-weight:700;font-style:normal;size-adjust:100.1017%;ascent-override:96.7765%;descent-override:24.0966%;line-gap-override:0%;}:root{--blume-ff-inter:Inter-80c999eb7b37dc76,"Inter-80c999eb7b37dc76 fallback: Arial","Inter-80c999eb7b37dc76 fallback: Arial Bold",ui-sans-serif,system-ui,sans-serif;}</style><link rel="preload" href="/_astro/fonts/e868cdf4720e9ea5.woff2" as="font" type="font/woff2" crossorigin><style>@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6";src:url("/_astro/fonts/89a9b6ed1259cb6e.woff2") format("woff2");font-display:swap;
1unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:italic;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6";src:url("/_astro/fonts/89a9b6ed1259cb6e.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:500;font-style:italic;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6";src:url("/_astro/fonts/89a9b6ed1259cb6e.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:600;font-style:italic;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6";src:url("/_astro/fonts/181a29443484632f.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:normal;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6";src:url("/_astro/fonts/181a29443484632f.woff2") format("woff2");font-display:swap;
1unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:500;font-style:normal;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6";src:url("/_astro/fonts/181a29443484632f.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:600;font-style:normal;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6 fallback: Courier New";src:local("Courier New");font-display:swap;font-weight:400;font-style:italic;size-adjust:99.9837%;ascent-override:100.5164%;descent-override:29.5048%;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6 fallback: Courier New";src:local("Courier New");font-display:swap;font-weight:500;font-style:italic;size-adjust:99.9837%;ascent-override:100.5164%;descent-override:29.5048%;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6 fallback: Courier New";src:local("Courier New");font-display:swap;font-weight:600;font-style:italic;size-adjust:99.9837%;ascent-override:100.5164%;descent-override:29.5048%;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6 fallback: Courier New";src:local("Courier New");font-display:swap;font-weight:400;font-style:normal;size-adjust:99.9837%;ascent-override:100.5164%;descent-override:29.5048%;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6 fallback: Courier New";src:local("Courier New");font-display:swap;font-weight:500;font-style:normal;size-adjust:99.9837%;ascent-override:100.5164%;descent-override:29.5048%;}@font-face{font-family:"Geist Mono-d6a5e74e4234a2f6 fallback: Courier New";src:local("Courier New");font-display:swap;font-weight:600;font-style:normal;size-adjust:99.9837%;ascent-override:100.5164%;descent-override:29.5048%;}:root{--blume-ff-geist-mono:"Geist Mono-d6a5e74e4234a2f6","Geist Mono-d6a5e74e4234a2f6 fallback: Courier New",ui-monospace,"SF Mono",Menlo,monospace;}</style><link rel="preload" href="/_astro/fonts/181a29443484632f.woff2" as="font" type="font/woff2" crossorigin><link rel="canonical" href="https://stainless-code.com/about"><meta name="description" content="Who Stainless Code is, how we ship open-source libraries, and where product docs live â without a platform pitch."><meta property="og:type" content="website"><meta property="og:site_name" content="Stainless Code"><meta property="og:title" content="About - Stainless Code"><meta property="og:description" content="Who Stainless Code is, how we ship open-source libraries, and where product docs live â without a platform pitch."><meta property="og:url" content="https://stainless-code.com/about"><meta property="og:image" content="https://stainless-code.com/og/about.png"><meta property="og:image:type" content="image/png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="About - Stainless Code"><meta name="twitter:image" content="https://stainless-code.com/og/about.png"><meta name="twitter:image:alt" content="About - Stainless Code"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="About - Stainless Code"><meta name="twitter:description" content="Who Stainless Code is, how we ship open-source libraries, and where product docs live â without a platform pitch."><link href="/agent-readability.json" rel="describedby" type="application/json"><link href="/llms.txt" rel="describedby" type="text/plain"><link href="/about.md" rel="alternate" type="text/markdown">
1<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@id":"https://stainless-code.com#website","@type":"WebSite","name":"Stainless Code","url":"https://stainless-code.com"},{"@id":"https://stainless-code.com/about#page","@type":"TechArticle","headline":"About","inLanguage":"en","name":"About","url":"https://stainless-code.com/about","description":"Who Stainless Code is, how we ship open-source libraries, and where product docs live â without a platform pitch.","dateModified":"2026-09-21T17:52:04.000Z","isPartOf":{"@id":"https://stainless-code.com#website"}}]}</script>
1<script data-mode="system">(()=>{const m=document.currentScript?.dataset.mode??"system";const apply=()=>{const s=localStorage.getItem("blume-theme");const sys=matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";document.documentElement.dataset.theme=s??(m==="system"?sys:m);};apply();document.addEventListener("astro:before-swap",(e)=>{const t=document.documentElement.dataset.theme;if(t){e.newDocument.documentElement.dataset.theme=t;}});document.addEventListener("astro:after-swap",apply);})();</script>
1<link rel="stylesheet" href="/_astro/base-href.hedmsDFs.css"><style>.medium-zoom-overlay{opacity:0;will-change:opacity;transition:opacity .3s;position:fixed;inset:0}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{cursor:pointer;cursor:zoom-out;will-change:transform;position:relative}.medium-zoom-overlay{backdrop-filter:blur(4px);z-index:100}.medium-zoom-image--opened{z-index:101}@media (prefers-reduced-motion:reduce){html .medium-zoom-image,html .medium-zoom-overlay{transition:none!important}}[data-theme=dark] [data-astro-cid-z74pxftp][data-blume-color-swatch]{background:var(--blume-color-dark,var(--blume-color-light))}[data-astro-cid-m664wbq4][data-blume-tooltip-panel]{pointer-events:none;visibility:hidden}[data-astro-cid-m664wbq4][data-blume-tooltip-trigger]:focus+[data-astro-cid-m664wbq4][data-blume-tooltip-panel],.group[data-astro-cid-m664wbq4]:hover [data-astro-cid-m664wbq4][data-blume-tooltip-panel]{pointer-events:auto;visibility:visible}blume-panel-tabs pre.astro-code{background:0 0!important;border:0!important;border-radius:0!important;margin:0!important;padding:.75rem 1rem!important}blume-panel-tabs pre.astro-code:before{content:none!important}blume-panel-tabs [data-blume-copy]{display:none!important}.experience-entries[data-astro-cid-selgvv25] [data-astro-cid-selgvv25]:is(h2,p,ul,ol){font-size:inherit;line-height:inherit;font-weight:inherit;margin:0}.experience-entries[data-astro-cid-selgvv25] article[data-astro-cid-selgvv25]>header[data-astro-cid-selgvv25] h2[data-astro-cid-selgvv25]{letter-spacing:-.01em;font-size:.875rem;font-weight:500;line-height:1.25}.experience-entries[data-astro-cid-selgvv25] article[data-astro-cid-selgvv25]>header[data-astro-cid-selgvv25] p[data-astro-cid-selgvv25]{color:var(--blume-muted-foreground);margin-top:.125rem;font-size:.75rem;line-height:1.35}.experience-entries[data-astro-cid-selgvv25] article[data-astro-cid-selgvv25]>p[data-astro-cid-selgvv25],.experience-entries[data-astro-cid-selgvv25] article[data-astro-cid-selgvv25]>ol[data-astro-cid-selgvv25]{color:var(--blume-muted-foreground);margin-top:1rem;font-size:.8125rem;line-height:1.5}.experience-entries[data-astro-cid-selgvv25] article[data-astro-cid-selgvv25]>ul[data-astro-cid-selgvv25]{margin-top:1rem}.experience-entries[data-astro-cid-selgvv25] article[data-astro-cid-selgvv25]>ul[data-astro-cid-selgvv25] a[data-astro-cid-selgvv25]{font-size:.75rem;text-decoration:none} 2</style>
2<script type="module" src="/_astro/page.t5QGEUPo.js"></script>
2</head><body class="bg-background font-sans text-foreground antialiased" data-blume-code-copy="" data-blume-image-zoom data-i18n-copied="Copied!" data-i18n-copy-code="Copy code" data-i18n-diagram-error="Could not render this diagram."><a class="absolute start-[-999px] top-0 z-[100] bg-accent px-4 py-2 text-accent-foreground focus:start-0" href="#blume-content">Skip to content</a><header class="sticky top-0 z-40 flex h-16 items-center gap-3 bg-background/90 px-4 backdrop-blur md:px-6" data-blume-header><button aria-label="Toggle navigation" class="inline-flex size-9 cursor-pointer items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted hover:text-foreground lg:hidden" data-blume-nav-toggle type="button"><svg aria-hidden="true" height="20" viewBox="0 0 24 24" width="20" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 5h16M4 12h16M4 19h16"/></svg></button><a class="inline-flex min-w-0 items-center gap-2 font-semibold text-base text-foreground" href="/"><span aria-hidden="true" class="inline-flex h-5 shrink-0 items-center [&>svg]:h-5 [&>svg]:w-auto"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" class="logo-svg" aria-hidden="true"> 3 <!-- Three steel bars â company mark (distinct from product logos) --> 4 <rect class="logo-bar" x="4" y="5" width="3.5" height="14" rx="0.75" opacity="0.45" /> 5 <rect class="logo-bar" x="10.25" y="5" width="3.5" height="14" rx="0.75" opacity="0.7" /> 6 <rect class="logo-bar" x="16.5" y="5" width="3.5" height="14" rx="0.75" /> 7</svg> 8</span><span class="truncate">Stainless Code</span></a><nav aria-label="Sections" class="hidden gap-1 md:flex"><a class="rounded-full px-3 py-1.5 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:text-foreground" href="/products">Products</a><a aria-current="page" class="rounded-full px-3 py-1.5 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:text-foreground" href="/about">About</a><a class="rounded-full px-3 py-1.5 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:text-foreground" href="/team">Team</a><a class="rounded-full px-3 py-1.5 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:text-foreground" href="/experience">Experience</a><a class="rounded-full px-3 py-1.5 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:text-foreground" href="/contact">Contact</a></nav><div class="flex-1"></div>
8<script type="module" src="/_astro/Search.astro_astro_type_script_index_0_lang.BJmg8QL8.js"></script>
8<blume-search class="contents" data-i18n-all="All" data-i18n-ask="Ask AI" data-i18n-ask-hint="Get an instant answer from AI" data-i18n-dev="Search is available in the production build." data-i18n-empty="No results found." data-i18n-error="Something went wrong. Please try again." data-i18n-popular="Popular" data-i18n-results="Results"><button aria-label="Search" class="inline-flex h-9 cursor-pointer items-center gap-2 rounded-full border border-border bg-background px-3 text-muted-foreground text-sm transition-colors hover:border-foreground hover:text-foreground lg:min-w-40" data-blume-search-open type="button"><svg aria-hidden="true" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="m21 21l-4.34-4.34"/><circle cx="11" cy="11" r="8"/></g></svg><span class="flex-1 text-start max-lg:hidden">Search</span><kbd class="font-mono text-[0.7rem] max-lg:hidden" data-blume-search-kbd>âK</kbd></button><dialog aria-label="Search docs" class="mx-auto mt-[8vh] mb-auto h-[min(480px,90dvh)] w-[min(62.5rem,94vw)] flex-col overflow-hidden rounded-blume border border-border bg-background/80 p-0 text-foreground shadow-2xl outline-none backdrop-blur-xl backdrop:bg-black/30 open:flex sm:mt-auto" data-blume-search-dialog><div class="flex items-center gap-2.5 border-border border-b px-4 py-3 text-muted-foreground"><svg aria-hidden="true" height="18" viewBox="0 0 24 24" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="m21 21l-4.34-4.34"/><circle cx="11" cy="11" r="8"/></g></svg><input aria-autocomplete="list" aria-controls="blume-search-listbox" aria-expanded="false" aria-label="Search docs" autocomplete="off" class="flex-1 border-0 bg-transparent text-foreground text-sm pointer-coarse:text-base focus:outline-none [&::-webkit-search-cancel-button]:appearance-none" data-blume-search-input placeholder="Search documentationâ¦" role="combobox" type="search"><kbd class="rounded border border-border bg-muted px-1 py-0.5 font-mono text-[0.7rem]">Esc</kbd></div><div class="grid min-h-0 flex-1 md:grid-cols-[22rem_minmax(0,1fr)]" data-blume-search-grid><div class="flex min-h-0 flex-col md:border-border md:border-e"><div class="flex max-h-[5.75rem] flex-wrap gap-1.5 overflow-x-hidden overflow-y-auto overscroll-contain border-border border-b px-3 py-2 scrollbar-thin scrollbar-thumb-border scrollbar-track-transparent" data-blume-search-filters hidden></div><div aria-label="Search docs" class="min-h-0 flex-1 scrollbar-thin scrollbar-thumb-border scrollbar-track-transparent overflow-y-auto p-2" data-blume-search-results id="blume-search-listbox" role="listbox"></div><p class="m-0 px-4 py-6 text-center text-muted-foreground text-sm" data-blume-search-message hidden></p></div><div class="hidden min-h-0 scrollbar-thin scrollbar-thumb-border scrollbar-track-transparent overflow-y-auto p-5 md:block" data-blume-search-preview></div></div><div class="flex items-center justify-between gap-3 border-border border-t px-3 py-2 text-muted-foreground text-xs"><span></span><div class="flex items-center gap-3"><span class="flex items-center gap-1"><kbd class="rounded border border-border bg-muted px-1 py-0.5 font-mono text-[0.65rem]">â</kbd><kbd class="rounded border border-border bg-muted px-1 py-0.5 font-mono text-[0.65rem]">â</kbd>navigate</span><span class="flex items-center gap-1"><kbd class="rounded border border-border bg-muted px-1 py-0.5 font-mono text-[0.65rem]">âµ</kbd>open</span><span class="flex items-center gap-1 max-md:hidden"><kbd class="rounded border border-border bg-muted px-1 py-0.5 font-mono text-[0.65rem]" data-blume-search-preview-kbd>âJ</kbd>preview</span></div></div></dialog>
8<script data-blume-search-popular type="application/json">[{"icon":"\u003csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003ccircle cx=\"12\" cy=\"12\" r=\"10\"/>\u003cpath d=\"M12 16v-4m0-4h.01\"/>\u003c/g>\u003c/svg>","label":"About","route":"/about"},{"icon":"\u003csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003cpath d=\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73zm1 .27V12\"/>\u003cpath d=\"M3.29 7L12 12l8.71-5M7.5 4.27l9 5.15\"/>\u003c/g>\u003c/svg>","label":"Products","route":"/products"},{"icon":"\u003csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003cpath d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M16 3.128a4 4 0 0 1 0 7.744M22 21v-2a4 4 0 0 0-3-3.87\"/>\u003ccircle cx=\"9\" cy=\"7\" r=\"4\"/>\u003c/g>\u003c/svg>","label":"Team","route":"/team"},{"icon":"\u003csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003cpath d=\"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"/>\u003crect width=\"20\" height=\"14\" x=\"2\" y=\"6\" rx=\"2\"/>\u003c/g>\u003c/svg>","label":"Experience","route":"/experience"},{"icon":"\u003csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003cpath d=\"m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"/>\u003crect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"/>\u003c/g>\u003c/svg>","label":"Contact","route":"/contact"},{"icon":"\u003cspan aria-hidden=\"true\" style=\"display:inline-flex;width:16px;height:16px\">\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" class=\"logo-svg\" aria-hidden=\"true\">\n \u003crect\n class=\"logo-frame\"\n x=\"3.25\"\n y=\"3.25\"\n width=\"17.5\"\n height=\"17.5\"\n rx=\"3.5\"\n stroke-width=\"2\"\n />\n \u003crect\n class=\"logo-select\"\n x=\"11.25\"\n y=\"11.25\"\n width=\"6.5\"\n height=\"6.5\"\n rx=\"1.5\"\n />\n\u003c/svg>\u003c/span>","label":"Codemap","route":"https://stainless-code.com/codemap"},{"icon":"\u003cspan aria-hidden=\"true\" style=\"display:inline-flex;width:16px;height:16px\">\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" class=\"logo-svg\" aria-hidden=\"true\">\n \u003ccircle\n class=\"logo-ring\"\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke-width=\"1.75\"\n stroke-dasharray=\"4 3\"\n stroke-dashoffset=\"6\"\n opacity=\"0.55\"\n />\n \u003ccircle class=\"logo-settled\" cx=\"12\" cy=\"12\" r=\"4.5\" />\n\u003c/svg>\u003c/span>","label":"Persist","route":"https://stainless-code.com/persist"},{"icon":"\u003cspan aria-hidden=\"true\" style=\"display:inline-flex;width:16px;height:16px\">\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" class=\"logo-svg\" aria-hidden=\"true\">\n \u003crect class=\"logo-layer\" x=\"2\" y=\"17\" width=\"20\" height=\"3.5\" rx=\"1\" opacity=\"0.3\"/>\n \u003crect class=\"logo-layer\" x=\"3\" y=\"12\" width=\"18\" height=\"3.5\" rx=\"1\" opacity=\"0.45\"/>\n \u003crect class=\"logo-active\" x=\"5\" y=\"7\" width=\"16\" height=\"3.5\" rx=\"1\"/>\n \u003crect class=\"logo-top logo-layer\" x=\"4\" y=\"2\" width=\"14\" height=\"3.5\" rx=\"1\" opacity=\"0.55\"/>\n\u003c/svg>\u003c/span>","label":"Layers","route":"https://stainless-code.com/layers"},{"icon":"\u003cspan aria-hidden=\"true\" style=\"display:inline-flex;width:16px;height:16px\">\u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" class=\"logo-svg\" aria-hidden=\"true\">\n \u003cpath class=\"logo-tick-out\" d=\"M4.2 5.8v12.4\" stroke=\"currentColor\" stroke-width=\"1.9\" stroke-linecap=\"round\" opacity=\"0.42\" />\n \u003cpath class=\"logo-tick-out\" d=\"M19.8 5.8v12.4\" stroke=\"currentColor\" stroke-width=\"1.9\" stroke-linecap=\"round\" opacity=\"0.42\" />\n \u003cpath class=\"logo-open\" d=\"M10.2 6h-1.3a1.3 1.3 0 0 0-1.3 1.3v9.4a1.3 1.3 0 0 0 1.3 1.3h1.3\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n \u003cpath class=\"logo-close\" d=\"M13.8 6h1.3a1.3 1.3 0 0 1 1.3 1.3v9.4a1.3 1.3 0 0 1-1.3 1.3h-1.3\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n \u003ccircle class=\"logo-node\" cx=\"12\" cy=\"12\" r=\"2.2\" />\n\u003c/svg>\u003c/span>","label":"Lossless","route":"https://stainless-code.com/lossless"}]</script>
8</blume-search><div class="flex items-center gap-2"><a aria-label="GitHub repository" class="inline-flex size-9 cursor-pointer items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted hover:text-foreground" href="https://github.com/stainless-code/stainless-code" rel="noreferrer" target="_blank"><svg aria-hidden="true" fill="currentColor" height="18" viewBox="0 0 16 16" width="18" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z"/></svg></a><button aria-label="Toggle color theme" class="inline-flex size-9 cursor-pointer items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted hover:text-foreground" data-blume-theme-toggle type="button"><span class="inline-flex dark:hidden"><svg aria-hidden="true" height="18" viewBox="0 0 24 24" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="12" cy="12" r="4"/><path d="M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41"/></g></svg></span><span class="hidden dark:inline-flex"><svg aria-hidden="true" height="18" viewBox="0 0 24 24" width="18" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"/></svg></span></button></div></header>
8<script>(()=>{const dr=()=>{const h=document.querySelector("[data-blume-header]");if(h){document.documentElement.style.setProperty("--blume-drawer-top",h.getBoundingClientRect().bottom+"px");}};document.addEventListener("click",(e)=>{const t=e.target.closest("[data-blume-theme-toggle]");if(t){const d=document.documentElement;const next=d.dataset.theme==="dark"?"light":"dark";const s=document.createElement("style");s.appendChild(document.createTextNode("*,*::before,*::after{transition:none!important}"));document.head.appendChild(s);d.dataset.theme=next;localStorage.setItem("blume-theme",next);window.getComputedStyle(d).opacity;setTimeout(()=>document.head.removeChild(s),1);}const n=e.target.closest("[data-blume-nav-toggle]");if(n){const d=document.documentElement;const open=d.toggleAttribute("data-blume-nav-open");if(open){dr();}d.style.overflow=open?"hidden":"";}const b=e.target.closest("[data-blume-banner-dismiss]");if(b){const bar=b.closest("[data-blume-banner]");const k=bar&&bar.getAttribute("data-banner-key");if(k){localStorage.setItem("blume-banner:"+k,"1");}document.documentElement.setAttribute("data-blume-banner-hidden","");requestAnimationFrame(dr);}});addEventListener("resize",()=>{const d=document.documentElement;if(!d.hasAttribute("data-blume-nav-open")){return;}if(matchMedia("(min-width:64rem)").matches){d.removeAttribute("data-blume-nav-open");d.style.overflow="";}else{dr();}});})();</script>
8<div class="mx-auto grid grid-cols-1 items-start lg:grid-cols-[17.5rem_minmax(0,1fr)] xl:grid-cols-[17.5rem_minmax(0,1fr)_17.5rem]" data-blume-doc-grid><aside aria-label="Primary" data-blume-nav-drawer class="fixed top-[var(--blume-drawer-top,4rem)] start-0 z-[35] h-[calc(100dvh-var(--blume-drawer-top,4rem))] w-64 max-w-[80vw] -translate-x-[105%] overflow-y-auto border-border border-e bg-background px-5 pt-4 pb-6 transition-transform rtl:translate-x-[105%] [:where([data-blume-nav-open])_&]:translate-x-0! lg:sticky lg:top-16 lg:z-auto lg:h-[calc(100dvh-4rem)] lg:w-auto lg:max-w-none lg:translate-x-0! lg:scrollbar-thin lg:scrollbar-thumb-border lg:scrollbar-track-transparent lg:border-e-0 lg:bg-transparent lg:px-4"><nav aria-label="Featured" class="mb-4 border-border border-b pb-4"><ul class="m-0 list-none p-0"><li><a class="block rounded-[0.65rem] px-2.5 py-1.5 text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground" href="https://github.com/stainless-code" rel="noreferrer" target="_blank"><span class="flex items-center gap-2"><svg aria-hidden="true" class="shrink-0 text-muted-foreground" height="14" viewBox="0 0 24 24" width="14" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5c.08-1.25-.27-2.48-1-3.5c.28-1.15.28-2.35 0-3.5c0 0-1 0-3 1.5c-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.4 5.4 0 0 0 4 9c0 3.5 3 5.5 6 5.5c-.39.49-.68 1.05-.85 1.65S8.93 17.38 9 18v4"/><path d="M9 18c-4.51 2-5-2-7-2"/></g></svg><span class="flex-1 truncate">GitHub</span><svg aria-hidden="true" class="shrink-0 text-muted-foreground opacity-60" height="12" viewBox="0 0 24 24" width="12" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 7h10v10M7 17L17 7"/></svg></span></a></li></ul></nav><nav aria-label="Sections" class="mb-4 border-border border-b pb-4 md:hidden"><ul class="m-0 list-none p-0"><li><a class="block rounded-[0.65rem] px-2.5 py-1.5 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:bg-muted aria-[current=page]:text-foreground" href="/products">Products</a></li><li><a aria-current="page" class="block rounded-[0.65rem] px-2.5 py-1.5 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:bg-muted aria-[current=page]:text-foreground" href="/about">About</a></li><li><a class="block rounded-[0.65rem] px-2.5 py-1.5 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:bg-muted aria-[current=page]:text-foreground" href="/team">Team</a></li><li><a class="block rounded-[0.65rem] px-2.5 py-1.5 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:bg-muted aria-[current=page]:text-foreground" href="/experience">Experience</a></li><li><a class="block rounded-[0.65rem] px-2.5 py-1.5 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:bg-muted aria-[current=page]:text-foreground" href="/contact">Contact</a></li></ul></nav><nav data-blume-nav-tree><ul class="m-0 list-none space-y-px p-0"><li><a aria-current="page" class="block rounded-[0.65rem] px-2.5 py-1.5 text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground aria-[current=page]:bg-muted aria-[current=page]:font-medium aria-[current=page]:text-foreground" href="/about"><span class="flex items-center gap-2"><span class="flex-1 truncate">About</span></span></a></li></ul>
8<script type="module">var e=class extends HTMLElement{connectedCallback(){this.dataset.ready||(this.dataset.ready=`1`,this.addEventListener(`click`,e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-nav-to]`);if(n&&this.contains(n)){let t=n.getAttribute(`data-nav-to`);t&&this.panel(t)&&(e.preventDefault(),this.show(t,!0));return}let r=t.closest(`[data-nav-back]`);r&&this.contains(r)&&(e.preventDefault(),this.show(r.getAttribute(`data-nav-back`)||`root`,!0))}),this.show(this.dataset.initial||`root`,!1))}panel(e){return this.querySelector(`[data-nav-panel="${e}"]`)}depth(e){return e===`root`?0:e.split(`.`).length}reduced(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}show(e,t){let n=this.panel(e)||this.panel(`root`);if(!n)return;let r=n.getAttribute(`data-nav-panel`),i=this.active;if(i===n)return;if(this.finishSlide&&this.finishSlide(),this.active=n,this.dataset.active=r,!(t&&i)||this.reduced()){for(let e of this.querySelectorAll(`[data-nav-panel]`))e.hidden=e!==n;return}let a=this.depth(r)>this.depth(i.getAttribute(`data-nav-panel`));this.slide(i,n,a)}slide(e,t,n){let r=getComputedStyle(this).direction===`rtl`?-1:1,i=(n?-1:1)*r,a=e.offsetHeight;this.style.position=`relative`,this.style.overflow=`hidden`,this.style.height=`${a}px`,t.hidden=!1;for(let n of[e,t])n.style.position=`absolute`,n.style.top=`0`,n.style.insetInlineStart=`0`,n.style.width=`100%`;let o=t.offsetHeight;this.style.height=`${o}px`;let s={duration:260,easing:`cubic-bezier(0.33, 1, 0.68, 1)`},c=[e.animate([{transform:`translateX(0)`},{transform:`translateX(${i*100}%)`}],s),t.animate([{transform:`translateX(${-i*100}%)`},{transform:`translateX(0)`}],s),this.animate([{height:`${a}px`},{height:`${o}px`}],s)],l=!1,u=()=>{if(!l){l=!0;for(let e of c)e.cancel();e.hidden=!0;for(let n of[e,t])n.style.position=``,n.style.top=``,n.style.insetInlineStart=``,n.style.width=``,n.style.transform=``;this.style.position=``,this.style.overflow=``,this.style.height=``,this.finishSlide=null}};this.finishSlide=u,c[0].finished.then(u,u)}};customElements.get(`blume-nav`)||customElements.define(`blume-nav`,e);</script>
8</nav></aside>
8<script>(()=>{const drawer=()=>document.querySelector("[data-blume-nav-drawer]");const center=()=>{const n=drawer();const s=n&&(n.querySelector("[data-blume-nav-tree]")||n);if(!s)return;let l=null;for(const a of s.querySelectorAll('a[aria-current="page"]')){if(a.getClientRects().length){l=a;break;}}if(!l)return;const r=n.getBoundingClientRect();const t=l.getBoundingClientRect();if(t.top>=r.top&&t.bottom<=r.bottom)return;n.scrollTop+=t.top-r.top-(n.clientHeight-t.height)/2;};let saved=-1;document.addEventListener("astro:before-swap",()=>{const n=drawer();saved=n?n.scrollTop:-1;});document.addEventListener("astro:after-swap",()=>{const n=drawer();if(n&&saved>=0){n.scrollTop=saved;}center();});center();})();</script>
8<main class="px-6 pt-6 pb-10 lg:px-8 xl:px-10" id="blume-content"><details class="group mx-auto mb-6 max-w-content rounded-blume border border-border xl:hidden"><summary class="flex cursor-pointer list-none items-center justify-between gap-2 px-4 py-3 font-medium text-foreground text-sm [&::-webkit-details-marker]:hidden"><span>On this page</span><svg aria-hidden="true" class="text-muted-foreground transition-transform group-open:rotate-180" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></svg></summary><blume-toc class="block"><ul class="m-0 list-none border-border border-t p-2"><li data-depth="2" style="padding-inline-start:0rem"><a class="block rounded-md px-2 py-1.5 text-muted-foreground text-sm transition-colors hover:text-foreground aria-[current=location]:font-medium aria-[current=location]:text-foreground" href="#why-stainless-code">Why Stainless Code</a></li><li data-depth="2" style="padding-inline-start:0rem"><a class="block rounded-md px-2 py-1.5 text-muted-foreground text-sm transition-colors hover:text-foreground aria-[current=location]:font-medium aria-[current=location]:text-foreground" href="#hub-vs-product-docs">Hub vs product docs</a></li><li data-depth="2" style="padding-inline-start:0rem"><a class="block rounded-md px-2 py-1.5 text-muted-foreground text-sm transition-colors hover:text-foreground aria-[current=location]:font-medium aria-[current=location]:text-foreground" href="#how-we-ship">How we ship</a></li><li data-depth="2" style="padding-inline-start:0rem"><a class="block rounded-md px-2 py-1.5 text-muted-foreground text-sm transition-colors hover:text-foreground aria-[current=location]:font-medium aria-[current=location]:text-foreground" href="#people">People</a></li><li data-depth="2" style="padding-inline-start:0rem"><a class="block rounded-md px-2 py-1.5 text-muted-foreground text-sm transition-colors hover:text-foreground aria-[current=location]:font-medium aria-[current=location]:text-foreground" href="#faq">FAQ</a></li></ul></blume-toc></details><article class="prose mx-auto max-w-content" dir="ltr"><h1>About</h1><p class="text-lg text-muted-foreground">Who Stainless Code is, how we ship open-source libraries, and where product docs live â without a platform pitch.</p><p>We ship libraries, not a platform.</p> 9<p>Stainless Code is the GitHub org and company hub behind open-source TypeScript and JavaScript tooling for modern apps and AI-agent workflows. This site indexes those libraries and states how we ship. Product guides stay on each libraryâs own docs.</p> 10<h2 id="why-stainless-code"><a class="blume-heading-anchor" href="#why-stainless-code">Why Stainless Code</a></h2> 11<ol> 12<li><strong>Sharp contracts</strong> â Public APIs you can pin and reason about.</li> 13<li><strong>Independent libraries</strong> â Pick what you need. MIT-licensed, no forced stack.</li> 14<li><strong>Built for agents too</strong> â Machine-readable docs and predictable packages where agents work.</li> 15</ol> 16<h2 id="hub-vs-product-docs"><a class="blume-heading-anchor" href="#hub-vs-product-docs">Hub vs product docs</a></h2> 17<p>This domain root is the <strong>company index</strong>: pitch, catalog, and outbound links. Each flagship library owns its docs tree:</p> 18<div class="blume-table-scroll" tabindex="0"><table> 19<thead> 20<tr> 21<th>Product</th> 22<th>Docs</th> 23</tr> 24</thead> 25<tbody> 26<tr> 27<td>Codemap</td> 28<td><a href="https://stainless-code.com/codemap">stainless-code.com/codemap</a></td> 29</tr> 30<tr> 31<td>Persist</td> 32<td><a href="https://stainless-code.com/persist">stainless-code.com/persist</a></td> 33</tr> 34<tr> 35<td>Layers</td> 36<td><a href="https://stainless-code.com/layers">stainless-code.com/layers</a></td> 37</tr> 38<tr> 39<td>Lossless</td> 40<td><a href="https://stainless-code.com/lossless">stainless-code.com/lossless</a></td> 41</tr> 42</tbody> 43</table></div> 44<p>Full one-liners, npm packages, and legacy utilities: <a href="/products">product index</a>.</p> 45<h2 id="how-we-ship"><a class="blume-heading-anchor" href="#how-we-ship">How we ship</a></h2> 46<ul> 47<li>Source and issues live under the <a href="https://github.com/stainless-code">
47stainless-code</a> GitHub org.</li> 48<li>Packages are typically MIT â confirm in each repoâs license file.</li> 49<li>Prefer agent-readable docs (<code>llms.txt</code>) and clear package contracts over sprawling frameworks.</li> 50<li>Want to help? Open an issue or PR on the relevant product repo. There is no separate company contribution guide beyond each libraryâs docs.</li> 51</ul> 52<h2 id="people"><a class="blume-heading-anchor" href="#people">People</a></h2> 53<p>Today Stainless Code is founded and maintained by one person â see <a href="/team">Team</a>. Selected companies and products in the founderâs background: <a href="/experience">Experience</a>. Company and partnership questions: <a href="/contact">Contact</a>.</p> 54<h2 id="faq"><a class="blume-heading-anchor" href="#faq">FAQ</a></h2> 55<div class="not-prose my-6 overflow-hidden rounded-blume border border-border [&>details:not(:first-of-type)]:border-border [&>details:not(:first-of-type)]:border-t"><details class="not-prose" data-blume-accordion id="is-stainless-code-a-platform"><summary class="flex cursor-pointer list-none items-center justify-between p-4 font-medium [&::-webkit-details-marker]:hidden"><span class="flex items-start gap-2"><span><span class="block">Is Stainless Code a platform?</span></span></span><svg aria-hidden="true" class="text-muted-foreground transition-transform [details[open]>summary_&]:rotate-180" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></svg></summary><div class="px-4 pb-4 [&>:first-child]:mt-0! [&>:last-child]:mb-0!">No. We ship independent open-source libraries â not a unified suite or hosted platform. Pick the packages you need.</div></details>
55<script type="module">var e=window;if(!e.__blumeAccordionHash){e.__blumeAccordionHash=!0;let t=()=>{let e=new Map;for(let t of document.querySelectorAll(`[data-blume-accordion][id]`)){let n=e.get(t.id)??0;e.set(t.id,n+1),n>0&&(t.id=`${t.id}-${n+1}`)}},n=()=>{let e=decodeURIComponent(window.location.hash.slice(1));return e&&document.getElementById(e)?.matches(`[data-blume-accordion]`)?document.getElementById(e):null},r=()=>{let e=n();e&&(e.open=!0,requestAnimationFrame(()=>{e.scrollIntoView({block:`start`})}))};document.addEventListener(`toggle`,e=>{let t=e.target;!(t instanceof HTMLDetailsElement)||!t.matches(`[data-blume-accordion]`)||!t.open||!t.id||history.replaceState(null,``,`#${encodeURIComponent(t.id)}`)},!0);let i=()=>{t(),r()};window.addEventListener(`hashchange`,r),document.addEventListener(`astro:after-swap`,i),document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,i,{once:!0}):i()}</script>
55<details class="not-prose" data-blume-accordion id="where-do-product-docs-live"><summary class="flex cursor-pointer list-none items-center justify-between p-4 font-medium [&::-webkit-details-marker]:hidden"><span class="flex items-start gap-2"><span><span class="block">Where do product docs live?</span></span></span><svg aria-hidden="true" class="text-muted-foreground transition-transform [details[open]>summary_&]:rotate-180" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></svg></summary><div class="px-4 pb-4 [&>:first-child]:mt-0! [&>:last-child]:mb-0!">Each library has its own docs site under stainless-code.com (for example /codemap, /persist, /layers, /lossless). This hub is the company index and pitch â not a second copy of those guides.</div></details><details class="not-prose" data-blume-accordion id="how-do-codemap-persist-layers-and-lossless-differ"><summary class="flex cursor-pointer list-none items-center justify-between p-4 font-medium [&::-webkit-details-marker]:hidden"><span class="flex items-start gap-2"><span><span class="block">How do Codemap, Persist, Layers, and Lossless differ?</span></span></span><svg aria-hidden="true" class="text-muted-foreground transition-transform [details[open]>summary_&]:rotate-180" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></svg></summary><div class="px-4 pb-4 [&>:first-child]:mt-0! [&>:last-child]:mb-0!">Codemap indexes a local codebase for agents (SQL and recipes instead of scanning the tree). Persist adds hydration-aware persistence to reactive stores. Layers is a headless overlay manager â open any layer from anywhere. Lossless manages context for coding agents â aged history becomes summary pointers while every message stays verbatim and searchable. Different problems; no forced stack.</div></details><details class="not-prose" data-blume-accordion id="are-the-libraries-open-source"><summary class="flex cursor-pointer list-none items-center justify-between p-4 font-medium [&::-webkit-details-marker]:hidden"><span class="flex items-start gap-2"><span><span class="block">Are the libraries open source?</span></span></span><svg aria-hidden="true" class="text-muted-foreground transition-transform [details[open]>summary_&]:rotate-180" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></svg></summary><div class="px-4 pb-4 [&>:first-child]:mt-0! [&>:last-child]:mb-0!">Yes. Work lives under the stainless-code GitHub org and is typically MIT-licensed. Check each package for its license file.</div></details><details class="not-prose" data-blume-accordion id="what-is-llmstxt"><summary class="flex cursor-pointer list-none items-center justify-between p-4 font-medium [&::-webkit-details-marker]:hidden"><span class="flex items-start gap-2"><span><span class="block">What is llms.txt?</span></span></span><svg aria-hidden="true" class="text-muted-foreground transition-transform [details[open]>summary_&]:rotate-180" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></svg></summary><div class="px-4 pb-4 [&>:first-child]:mt-0! [&>:last-child]:mb-0!">A machine-readable docs map for AI agents. Product sites publish llms.txt so agents can navigate the docs without scraping the whole tree.</div></details><details class="not-prose" data-blume-accordion id="who-maintains-stainless-code"><summary class="flex cursor-pointer list-none items-center justify-between p-4 font-medium [&::-webkit-details-marker]:hidden"><span class="flex items-start gap-2"><span><span class="block">Who maintains Stainless Code?</span></span></span><svg aria-hidden="true" class="text-muted-foreground transition-transform [details[open]>summary_&
55]:rotate-180" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></svg></summary><div class="px-4 pb-4 [&>:first-child]:mt-0! [&>:last-child]:mb-0!">Today, founder and maintainer Sutu Sebastian. Team has profile links; Contact has the company email for partnerships.</div></details><details class="not-prose" data-blume-accordion id="does-stainless-code-have-a-client-portfolio"><summary class="flex cursor-pointer list-none items-center justify-between p-4 font-medium [&::-webkit-details-marker]:hidden"><span class="flex items-start gap-2"><span><span class="block">Does Stainless Code have a client portfolio?</span></span></span><svg aria-hidden="true" class="text-muted-foreground transition-transform [details[open]>summary_&]:rotate-180" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></svg></summary><div class="px-4 pb-4 [&>:first-child]:mt-0! [&>:last-child]:mb-0!">Stainless Code ships open-source libraries. The Experience page covers the founderâs background â SoftState, Flowbite React, and other product work â with client attribution kept on those companiesâ own sites where it belongs.</div></details></div>
55<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Is Stainless Code a platform?","acceptedAnswer":{"@type":"Answer","text":"No. We ship independent open-source libraries â not a unified suite or hosted platform. Pick the packages you need."}},{"@type":"Question","name":"Where do product docs live?","acceptedAnswer":{"@type":"Answer","text":"Each library has its own docs site under stainless-code.com (for example /codemap, /persist, /layers, /lossless). This hub is the company index and pitch â not a second copy of those guides."}},{"@type":"Question","name":"How do Codemap, Persist, Layers, and Lossless differ?","acceptedAnswer":{"@type":"Answer","text":"Codemap indexes a local codebase for agents (SQL and recipes instead of scanning the tree). Persist adds hydration-aware persistence to reactive stores. Layers is a headless overlay manager â open any layer from anywhere. Lossless manages context for coding agents â aged history becomes summary pointers while every message stays verbatim and searchable. Different problems; no forced stack."}},{"@type":"Question","name":"Are the libraries open source?","acceptedA
55nswer":{"@type":"Answer","text":"Yes. Work lives under the stainless-code GitHub org and is typically MIT-licensed. Check each package for its license file."}},{"@type":"Question","name":"What is llms.txt?","acceptedAnswer":{"@type":"Answer","text":"A machine-readable docs map for AI agents. Product sites publish llms.txt so agents can navigate the docs without scraping the whole tree."}},{"@type":"Question","name":"Who maintains Stainless Code?","acceptedAnswer":{"@type":"Answer","text":"Today, founder and maintainer Sutu Sebastian. Team has profile links; Contact has the company email for partnerships."}},{"@type":"Question","name":"Does Stainless Code have a client portfolio?","acceptedAnswer":{"@type":"Answer","text":"Stainless Code ships open-source libraries. The Experience page covers the founderâs background â SoftState, Flowbite React, and other product work â with client attribution kept on those companiesâ own sites where it belongs."}}]}</script>
55</article><p class="mx-auto mt-10 max-w-content text-muted-foreground text-sm">Last updated on September 21, 2026</p><section aria-label="Was this page helpful?" class="mx-auto mt-12 flex max-w-content items-center justify-between gap-4 border-border border-t pt-6" data-blume-page-feedback><p class="text-muted-foreground text-sm">Was this page helpful?</p><div class="flex items-center gap-2" data-feedback-actions><button class="inline-flex items-center gap-2 rounded-blume border border-border px-4 py-2 text-foreground text-sm transition-colors hover:border-foreground" data-feedback-value="yes" type="button"><svg aria-hidden="true" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 5.88L14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88M7 10v12"/></svg>Yes</button><button class="inline-flex items-center gap-2 rounded-blume border border-border px-4 py-2 text-foreground text-sm transition-colors hover:border-foreground" data-feedback-value="no" type="button"><svg aria-hidden="true" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 18.12L10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88M17 14V2"/></svg>No</button></div><p class="hidden text-muted-foreground text-sm" data-feedback-thanks>Thanks for your feedback!</p></section>
55<script type="module" src="/_astro/PageFeedback.astro_astro_type_script_index_0_lang.Dftfb4UG.js"></script>
55</main><aside aria-label="On this page" class="sticky top-16 hidden h-[calc(100dvh-4rem)] scrollbar-thin scrollbar-thumb-border scrollbar-track-transparent overflow-y-auto px-4 pt-6 pb-10 text-sm xl:block" data-blume-toc><p class="mb-3 font-semibold text-foreground text-sm">On this page</p><blume-toc class="block"><ul class="m-0 list-none p-0"><li data-depth="2" style="padding-inline-start:0rem"><a class="block py-1.5 text-muted-foreground transition-colors hover:text-foreground aria-[current=location]:font-medium aria-[current=location]:text-foreground" href="#why-stainless-code">Why Stainless Code</a></li><li data-depth="2" style="padding-inline-start:0rem"><a class="block py-1.5 text-muted-foreground transition-colors hover:text-foreground aria-[current=location]:font-medium aria-[current=location]:text-foreground" href="#hub-vs-product-docs">Hub vs product docs</a></li><li data-depth="2" style="padding-inline-start:0rem"><a class="block py-1.5 text-muted-foreground transition-colors hover:text-foreground aria-[current=location]:font-medium aria-[current=location]:text-foreground" href="#how-we-ship">How we ship</a></li><li data-depth="2" style="padding-inline-start:0rem"><a class="block py-1.5 text-muted-foreground transition-colors hover:text-foreground aria-[current=location]:font-medium aria-[current=location]:text-foreground" href="#people">People</a></li><li data-depth="2" style="padding-inline-start:0rem"><a class="block py-1.5 text-muted-foreground transition-colors hover:text-foreground aria-[current=location]:font-medium aria-[current=location]:text-foreground" href="#faq">FAQ</a></li></ul></blume-toc><div class="space-y-0.5 mt-8 border-border border-t pt-4" data-blume-page-actions data-i18n-chat-prompt="Read {url} so I can ask you questions about this page." data-i18n-copied="Copied!" data-i18n-copy-failed="Copy failed" data-i18n-generating="Generatingâ¦" data-md="/about.md"><a class="flex w-full items-center gap-2.5 py-1.5 text-start text-muted-foreground text-sm transition-colors hover:text-foreground" href="https://github.com/stainless-code/stainless-code/edit/main/content/about/index.mdx" rel="noreferrer" target="_blank"><span><svg class="size-4 shrink-0" fill="currentColor" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z"/></svg></span>Edit on GitHub</a><button class="flex w-full items-center gap-2.5 py-1.5 text-start text-muted-foreground text-sm transition-colors hover:text-foreground" data-blume-scroll-top type="button"><svg aria-hidden="true" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 12l7-7l7 7m-7 7V5"/></svg>Scroll to top</button><button class="flex w-full items-center gap-2.5 py-1.5 text-start text-muted-foreground text-sm transition-colors hover:text-foreground" data-blume-copy-page type="button"><svg aria-hidden="true" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></g></svg><span data-blume-copy-label>Copy as Markdown</span></button>
55<details class="group relative" data-blume-dropdown><summary class="flex w-full items-center gap-2.5 py-1.5 text-start text-muted-foreground text-sm transition-colors hover:text-foreground cursor-pointer list-none [&::-webkit-details-marker]:hidden"><svg aria-hidden="true" height="16" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg>Open in chat<svg aria-hidden="true" class="ms-auto transition-transform group-open:rotate-180" height="14" viewBox="0 0 24 24" width="14" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></svg></summary><div class="absolute top-full right-2 z-50 mt-1 w-max min-w-[14rem] max-w-[22rem] rounded-blume border border-border bg-background p-1 shadow-xl" data-blume-menu><a class="flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-start text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground" data-open-in="v0" rel="noreferrer" target="_blank"><span><svg class="size-4 shrink-0" fill="currentColor" viewBox="0 0 147 70" xmlns="http://www.w3.org/2000/svg"><path d="M56 50.2031V14H70V60.1562C70 65.5928 65.5928 70 60.1562 70C57.5605 70 54.9982 68.9992 53.1562 67.1573L0 14H19.7969L56 50.2031Z"/><path d="M147 56H133V23.9531L100.953 56H133V70H96.6875C85.8144 70 77 61.1856 77 50.3125V14H91V46.1562L123.156 14H91V0H127.312C138.186 0 147 8.81439 147 19.6875V56Z"/></svg></span><span class="flex-1">Open in v0</span><svg aria-hidden="true" height="13" viewBox="0 0 24 24" width="13" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg></a><hr class="my-1 border-border border-t"><a class="flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-start text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground" data-open-in="chatgpt" rel="noreferrer" target="_blank"><span><svg class="size-4 shrink-0" fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"/></svg></span><span class="flex-1">Open in ChatGPT</span><svg aria-hidden="true" height="13" viewBox="0 0 24 24" width="13" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg></a><a class="flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-start text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground" data-open-in="claude" rel="noreferrer" target="_blank"><span><svg class="size-4 shrink-0" fill="currentColor" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" fill-rule="evenodd" d="M2.3545 7.9775L4.7145 6.654L4.7545 6.539L4.7145 6.475H4.6L4.205 6.451L2.856 6.4145L1.6865 6.366L0.5535 6.305L0.268 6.2445L0 5.892L0.0275 5.716L0.2675 5.5555L0.6105 5.5855L1.3705 5.637L2.5095 5.716L3.3355 5.7645L4.56 5.892H4.7545L4.782 5.8135L4.715 5.7645L4.6635 5.716L3.4845 4.918L2.2085 4.074L1.5405 3.588L1.1785 3.3425L0.9965 3.1115L0.9175 2.6075L1.2455 2.2465L1.686 2.2765L1.7985 2.307L2.245 2.65L3.199 3.388L4.4445 4.3045L4.627 4.4565L4.6995 4.405L4.709 4.3685L4.627 4.2315L3.9495 3.0085L3.2265 1.7635L2.9045 1.2475L2.8195 0.938C2.78711 0.819128 2.76965 0.696687 2.7675 0.5735L3.1415 0.067L3.348 0L3.846 0.067L4.056 0.249L4.366 0.956L4.867 2.0705L5.6445 3.5855L5.8725 4.0345L5.994 4.4505L6.0395 4.578H6.1185V4.505L6.1825 3.652L6.301 2.6045L6.416 1.257L6.456 0.877L6.644 0.422L7.0175 0.176L7.3095 0.316L7.5495 0.6585L7.516 0.8805L7.373 1.806L7.0935 3.2575L6.9115 4.2285H7.0175L7.139 4.1075L7.6315 3.4545L8.4575 2.4225L8.8225 2.0125L9.2475 1.5605L9.521 1.345H10.0375L10.4175 1.9095L10.2475 2.4925L9.7155 3.166L9.275 3.737L8.643 4.587L8.248 5.267L8.2845 5.322L8.3785 5.312L9.8065 5.009L10.578 4.869L11.4985 4.7115L11.915 4.9055L11.9605 5.103L11.7965 5.5065L10.812 5.7495L9.6575 5.9805L7.938 6.387L7.917 6.402L7.9415 6.4325L8.716 6.5055L9.047 6.5235H9.858L11.368 6.636L11.763 6.897L12 7.216L11.9605 7.4585L11.353 7.7685L10.533 7.574L8.6185 7.119L7.9
55625 6.9545H7.8715V7.0095L8.418 7.5435L9.421 8.4485L10.6755 9.6135L10.739 9.9025L10.578 10.13L10.408 10.1055L9.3055 9.277L8.88 8.9035L7.917 8.0935H7.853V8.1785L8.075 8.503L9.2475 10.2635L9.3085 10.8035L9.2235 10.98L8.9195 11.0865L8.5855 11.0255L7.8985 10.063L7.191 8.9795L6.6195 8.008L6.5495 8.048L6.2125 11.675L6.0545 11.86L5.69 12L5.3865 11.7695L5.2255 11.396L5.3865 10.658L5.581 9.696L5.7385 8.931L5.8815 7.981L5.9665 7.665L5.9605 7.644L5.8905 7.653L5.1735 8.6365L4.0835 10.109L3.2205 11.0315L3.0135 11.1135L2.655 10.9285L2.6885 10.5975L2.889 10.303L4.083 8.785L4.803 7.844L5.268 7.301L5.265 7.222H5.2375L2.066 9.28L1.501 9.353L1.2575 9.125L1.288 8.752L1.4035 8.6305L2.3575 7.9745L2.3545 7.9775Z"/></svg></span><span class="flex-1">Open in Claude</span><svg aria-hidden="true" height="13" viewBox="0 0 24 24" width="13" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg></a><a class="flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-start text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground" data-open-in="t3" rel="noreferrer" target="_blank"><span><svg class="size-4 shrink-0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z"/></svg></span><span class="flex-1">Open in T3 Chat</span><svg aria-hidden="true" height="13" viewBox="0 0 24 24" width="13" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg></a><a class="flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-start text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground" data-open-in="scira" rel="noreferrer" target="_blank"><span><svg class="size-4 shrink-0" fill="none" viewBox="0 0 910 934" xmlns="http://www.w3.org/2000/svg"><path d="M647.664 197.775C569.13 189.049 525.5 145.419 516.774 66.8849C508.048 145.419 464.418 189.049 385.884 197.775C464.418 206.501 508.048 250.131 516.774 328.665C525.5 250.131 569.13 206.501 647.664 197.775Z" fill="currentColor" stroke="currentColor" stroke-linejoin="round" stroke-width="8"/><path d="M857.5 508.116C763.259 497.644 710.903 445.288 700.432 351.047C689.961 445.288 637.605 497.644 543.364 508.116C637.605 518.587 689.961 570.943 700.432 665.184C710.903 570.943 763.259 518.587 857.5 508.116Z" stroke="currentColor" stroke-linejoin="round" stroke-width="20"/><path d="M889.949 121.237C831.049 114.692 798.326 81.9698 791.782 23.0692C785.237 81.9698 752.515 114.692 693.614 121.237C752.515 127.781 785.237 160.504 791.782 219.404C798.326 160.504 831.049 127.781 889.949 121.237Z" fill="currentColor" stroke="currentColor" stroke-linejoin="round" stroke-width="8"/><path d="M760.632 764.337C720.719 814.616 669.835 855.1 611.872 882.692C553.91 910.285 490.404 924.255 426.213 923.533C362.022 922.812 298.846 907.419 241.518 878.531C184.19 849.643 134.228 808.026 95.4548 756.863C56.6815 705.7 30.1238 646.346 17.8129 583.343C5.50207 520.339 7.76433 455.354 24.4266 393.359C41.089 331.364 71.7099 274.001 113.947 225.658C156.184 177.315 208.919 139.273 268.117 114.442" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="30"/></svg></span><span class="flex-1">Open in Scira</span><svg aria-hidden="true" height="13" viewBox="0 0 24 24" width="13" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg></a><a class="flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-start text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground" data-open-in="cursor" rel="noreferrer" target="_blank"><span>
55<svg class="size-4 shrink-0" viewBox="0 0 466.73 532.09" xmlns="http://www.w3.org/2000/svg"><path d="M457.43,125.94L244.42,2.96c-6.84-3.95-15.28-3.95-22.12,0L9.3,125.94c-5.75,3.32-9.3,9.46-9.3,16.11v247.99c0,6.65,3.55,12.79,9.3,16.11l213.01,122.98c6.84,3.95,15.28,3.95,22.12,0l213.01-122.98c5.75-3.32,9.3-9.46,9.3-16.11v-247.99c0-6.65-3.55-12.79-9.3-16.11h-.01ZM444.05,151.99l-205.63,356.16c-1.39,2.4-5.06,1.42-5.06-1.36v-233.21c0-4.66-2.49-8.97-6.53-11.31L24.87,145.67c-2.4-1.39-1.42-5.06,1.36-5.06h411.26c5.84,0,9.49,6.33,6.57,11.39h-.01Z" fill="currentColor"/></svg></span><span class="flex-1">Open in Cursor</span><svg aria-hidden="true" height="13" viewBox="0 0 24 24" width="13" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg></a></div></details></div>
55<script type="module" src="/_astro/PageActions.astro_astro_type_script_index_0_lang.AK6-JAVB.js"></script>
55</aside></div><button aria-label="Close navigation" class="fixed inset-0 z-[30] hidden cursor-pointer border-0 bg-black/40 [:where([data-blume-nav-open])_&]:block lg:hidden" data-blume-nav-toggle type="button"></button>
55<script type="module" src="/_astro/RootLayout.astro_astro_type_script_index_0_lang.C2mtSuhJ.js"></script>
55<blume-webmcp data-llms="true" data-search="true" hidden="true"></blume-webmcp>
55<script type="module" src="/_astro/WebMcp.astro_astro_type_script_index_0_lang.B5X_6mV2.js"></script>
55</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.