1var uo=Object.defineProperty;var po=(e,t,o)=>t in e?uo(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var V=(e,t,o)=>(po(e,typeof t!="symbol"?t+"":t,o),o);import{g as yt,W as E,r as g,R as go,j as a,c as mo}from"./react-PPJ0mPjh.js";import{u as Ge,a as C1,b as yo,U as ye,G as D,T as ke,r as S,c as C,B as le,d as fo,I as ia,H as J,C as ne,A as Yt,D as _e,S as pe,e as F,f as vo,g as bo,h as wo,i as Tt,j as K,k as I1,l as Mt,m as te,L as wa,n as j1,o as E1,p as la,q as z1,s as St,t as ko,v as xo,M as Ao,w as Po}from"./mantine-DyaIkVVa.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function o(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function n(s){if(s.ep)return;s.ep=!0;const r=o(s);fetch(s.href,r)}})();var To=typeof Element<"u",Mo=typeof Map=="function",So=typeof Set=="function",_o=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function rt(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var o,n,s;if(Array.isArray(e)){if(o=e.length,o!=t.length)return!1;for(n=o;n--!==0;)if(!rt(e[n],t[n]))return!1;return!0}var r;if(Mo&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(r=e.entries();!(n=r.next()).done;)if(!t.has(n.value[0]))return!1;for(r=e.entries();!(n=r.next()).done;)if(!rt(n.value[1],t.get(n.value[0])))return!1;return!0}if(So&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(r=e.entries();!(n=r.next()).done;)if(!t.has(n.value[0]))return!1;return!0}if(_o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(o=e.length,o!=t.length)return!1;for(n=o;n--!==0;)if(e[n]!==t[n])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(s=Object.keys(e),o=s.length,o!==Object.keys(t).length)return!1;for(n=o;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,s[n]))return!1;if(To&&e instanceof Element)return!1;for(n=o;n--!==0;)if(!((s[n]==="_owner"||s[n]==="__v"||s[n]==="__o")&&e.$$typeof)&&!rt(e[s[n]],t[s[n]]))return!1;return!0}return e!==e&&t!==t}var Co=function(t,o){try{return rt(t,o)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}};const Io=yt(Co);var jo=function(e,t,o,n,s,r,i,l){if(!e){var h;if(t===void 0)h=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[o,n,s,r,i,l],p=0;h=new Error(t.replace(/%s/g,function(){return u[p++]})),h.name="Invariant Violation"}throw h.framesToPop=1,h}},Eo=jo;const ka=yt(Eo);var zo=function(t,o,n,s){var r=n?n.call(s,t,o):void 0;if(r!==void 0)return!!r;if(t===o)return!0;if(typeof t!="object"||!t||typeof o!="object"||!o)return!1;var i=Object.keys(t),l=Object.keys(o);if(i.length!==l.length)return!1;for(var h=Object.prototype.hasOwnProperty.bind(o),u=0;u<i.length;u++){var p=i[u];if(!h(p))return!1;var m=t[p],k=o[p];if(r=n?n.call(s,m,k,p):void 0,r===!1||r===void 0&&m!==k)return!1}return!0};const Oo=yt(zo);var O1=(e=>(e.BASE="base",e.BODY="body",e.HEAD="head",e.HTML="html",e.LINK="link",e.META="meta",e.NOSCRIPT="noscript",e.SCRIPT="script",e.STYLE="style",e.TITLE="title",e.FRAGMENT="Symbol(react.fragment)",e))(O1||{}),_t={link:{rel:["amphtml","canonical","alternate"]},script:{type:["application/ld+json"]}
1,meta:{charset:"",name:["generator","robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]}},xa=Object.values(O1),ft={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},R1=Object.entries(ft).reduce((e,[t,o])=>(e[o]=t,e),{}),$="data-rh",xe={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate",PRIORITIZE_SEO_TAGS:"prioritizeSeoTags"},Ae=(e,t)=>{for(let o=e.length-1;o>=0;o-=1){const n=e[o];if(Object.prototype.hasOwnProperty.call(n,t))return n[t]}return null},Ro=e=>{let t=Ae(e,"title");const o=Ae(e,xe.TITLE_TEMPLATE);if(Array.isArray(t)&&(t=t.join("")),o&&t)return o.replace(/%s/g,()=>t);const n=Ae(e,xe.DEFAULT_TITLE);return t||n||void 0},Lo=e=>Ae(e,xe.ON_CHANGE_CLIENT_STATE)||(()=>{}),Ct=(e,t)=>t.filter(o=>typeof o[e]<"u").map(o=>o[e]).reduce((o,n)=>({...o,...n}),{}),Do=(e,t)=>t.filter(o=>typeof o.base<"u").map(o=>o.base).reverse().reduce((o,n)=>{if(!o.length){const s=Object.keys(n);for(let r=0;r<s.length;r+=1){const l=s[r].toLowerCase();if(e.indexOf(l)!==-1&&n[l])return o.concat(n)}}return o},[]),qo=e=>console&&typeof console.warn=="function"&&console.warn(e),Ce=(e,t,o)=>{const n={};return o.filter(s=>Array.isArray(s[e])?!0:(typeof s[e]<"u"&&qo(`Helmet: ${e} should be of type "Array". Instead found type "${typeof s[e]}"`),!1)).map(s=>s[e]).reverse().reduce((s,r)=>{const i={};r.filter(h=>{let u;const p=Object.keys(h);for(let k=0;k<p.length;k+=1){const A=p[k],M=A.toLowerCase();t.indexOf(M)!==-1&&!(u==="rel"&&h[u].toLowerCase()==="canonical")&&!(M==="rel"&&h[M].toLowerCase()==="stylesheet")&&(u=M),t.indexOf(A)!==-1&&(A==="innerHTML"||A==="cssText"||A==="itemprop")&&(u=A)}if(!u||!h[u])return!1;const m=h[u].toLowerCase();return n[u]||(n[u]={}),i[u]||(i[u]={}),n[u][m]?!1:(i[u][m]=!0,!0)}).reverse().forEach(h=>s.push(h));const l=Object.keys(i);for(let h=0;h<l.length;h+=1){const u=l[h],p={...n[u],...i[u]};n[u]=p}return s},[]).reverse()},No=(e,t)=>{if(Array.isArray(e)&&e.length){for(let o=0;o<e.length;o+=1)if(e[o][t])return!0}return!1},Bo=e=>({baseTag:Do(["href"],e),bodyAttributes:Ct("bodyAttributes",e),defer:Ae(e,xe.DEFER),encode:Ae(e,xe.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:Ct("htmlAttributes",e),linkTags:Ce("link",["rel","href"],e),metaTags:Ce("meta",["name","charset","http-equiv","property","itemprop"],e),noscriptTags:Ce("noscript",["innerHTML"],e),onChangeClientState:Lo(e),scriptTags:Ce("script",["src","innerHTML"],e),styleTags:Ce("style",["cssText"],e),title:Ro(e),titleAttributes:Ct("titleAttributes",e),prioritizeSeoTags:No(e,xe.PRIORITIZE_SEO_TAGS)}),L1=e=>Array.isArray(e)?e.join(""):e,Ho=(e,t)=>{const o=Object.keys(e);for(let n=0;n<o.length;n+=1)if(t[o[n]]&&t[o[n]].includes(e[o[n]]))return!0;return!1},It=(e,t)=>Array.isArray(e)?e.reduce((o,n)=>(Ho(n,t)?o.priority.push(n):o.default.push(n),o),{priority:[],default:[]}):{default:e,priority:[]},Aa=(e,t)=>({...e,[t]:void 0}),Fo=["noscript","script","style"],Zt=(e,t=!0)=>t===!1?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"),D1=e=>Object.keys(e).reduce((t,o)=>{const n=typeof e[o]<"u"?`${o}="${e[o]}"`:`${o}`;return t?`${t} ${n}`:n},""),Go=(e,t,o,n)=>{const s=D1(o),r=L1(t);return s?`<${e} ${$}="true" ${s}>${Zt(r,n)}</${e}>`:`<${e} ${$}="true">${Zt(r,n)}</${e}>`},Wo=(e,t,o=!0)=>t.reduce((n,s)=>{const r=s,i=Object.keys(r).filter(u=>!(u==="innerHTML"||u==="cssText")).reduce((u,p)=>{const m=typeof r[p]>"u"?p:`${p}="${Zt(r[p],o)}"`;return u?`${u} ${m}`:m},""),l=r.innerHTML||r.cssText||"",h=Fo.indexOf(e)===-1;return`${n}<${e} ${$}="true" ${i}${h?"/>":`>${l}</${e}>`}`},""),q1=(e,t={})=>Object.keys(e).reduce((o,n)=>{const s=ft[n];return o[s||n]=e[n],o},t),$o=(e,t,o)=>{const n={key:t,[$]:!0},s=q1(o,n);return[E.createElement("title",s,t)]},it=(e,t)=>
1t.map((o,n)=>{const s={key:n,[$]:!0};return Object.keys(o).forEach(r=>{const l=ft[r]||r;if(l==="innerHTML"||l==="cssText"){const h=o.innerHTML||o.cssText;s.dangerouslySetInnerHTML={__html:h}}else s[l]=o[r]}),E.createElement(e,s)}),G=(e,t,o=!0)=>{switch(e){case"title":return{toComponent:()=>$o(e,t.title,t.titleAttributes),toString:()=>Go(e,t.title,t.titleAttributes,o)};case"bodyAttributes":case"htmlAttributes":return{toComponent:()=>q1(t),toString:()=>D1(t)};default:return{toComponent:()=>it(e,t),toString:()=>Wo(e,t,o)}}},Uo=({metaTags:e,linkTags:t,scriptTags:o,encode:n})=>{const s=It(e,_t.meta),r=It(t,_t.link),i=It(o,_t.script);return{priorityMethods:{toComponent:()=>[...it("meta",s.priority),...it("link",r.priority),...it("script",i.priority)],toString:()=>`${G("meta",s.priority,n)} ${G("link",r.priority,n)} ${G("script",i.priority,n)}`},metaTags:s.default,linkTags:r.default,scriptTags:i.default}},Vo=e=>{const{baseTag:t,bodyAttributes:o,encode:n=!0,htmlAttributes:s,noscriptTags:r,styleTags:i,title:l="",titleAttributes:h,prioritizeSeoTags:u}=e;let{linkTags:p,metaTags:m,scriptTags:k}=e,A={toComponent:()=>[],toString:()=>""};return u&&({priorityMethods:A,linkTags:p,metaTags:m,scriptTags:k}=Uo(e)),{priority:A,base:G("base",t,n),bodyAttributes:G("bodyAttributes",o,n),htmlAttributes:G("htmlAttributes",s,n),link:G("link",p,n),meta:G("meta",m,n),noscript:G("noscript",r,n),script:G("script",k,n),style:G("style",i,n),title:G("title",{title:l,titleAttributes:h},n)}},Jt=Vo,We=[],ca=!!(typeof window<"u"&&window.document&&window.document.createElement),Xt=class{constructor(e,t){V(this,"instances",[]);V(this,"canUseDOM",ca);V(this,"context");V(this,"value",{setHelmet:e=>{this.context.helmet=e},helmetInstances:{get:()=>this.canUseDOM?We:this.instances,add:e=>{(this.canUseDOM?We:this.instances).push(e)},remove:e=>{const t=(this.canUseDOM?We:this.instances).indexOf(e);(this.canUseDOM?We:this.instances).splice(t,1)}}});this.context=e,this.canUseDOM=t||!1,t||(e.helmet=Jt({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))}},Ko=parseInt(E.version.split(".")[0],10),ea=Ko>=19,Qo={},N1=E.createContext(Qo),Te,B1=(Te=class extends g.Component{constructor(o){super(o);V(this,"helmetData");ea?this.helmetData=null:this.helmetData=new Xt(this.props.context||{},Te.canUseDOM)}render(){return ea?E.createElement(E.Fragment,null,this.props.children):E.createElement(N1.Provider,{value:this.helmetData.value},this.props.children)}},V(Te,"canUseDOM",ca),Te),fe=(e,t)=>{const o=document.head||document.querySelector("head"),n=o.querySelectorAll(`${e}[${$}]`),s=[].slice.call(n),r=[];let i;return t&&t.length&&t.forEach(l=>{const h=document.createElement(e);for(const u in l)if(Object.prototype.hasOwnProperty.call(l,u))if(u==="innerHTML")h.innerHTML=l.innerHTML;else if(u==="cssText"){const p=l.cssText;h.appendChild(document.createTextNode(p))}else{const p=u,m=typeof l[p]>"u"?"":l[p];h.setAttribute(u,m)}h.setAttribute($,"true"),s.some((u,p)=>(i=p,h.isEqualNode(u)))?s.splice(i,1):r.push(h)}),s.forEach(l=>{var h;return(h=l.parentNode)==null?void 0:h.removeChild(l)}),r.forEach(l=>o.appendChild(l)),{oldTags:s,newTags:r}},ta=(e,t)=>{const o=document.getElementsByTagName(e)[0];if(!o)return;const n=o.getAttribute($),s=n?n.split(","):[],r=[...s],i=Object.keys(t);for(const l of i){const h=t[l]||"";o.getAttribute(l)!==h&&o.setAttribute(l,h),s.indexOf(l)===-1&&s.push(l);const u=r.indexOf(l);u!==-1&&r.splice(u,1)}for(let l=r.length-1;l>=0;l-=1)o.removeAttribute(r[l]);s.length===r.length?o.removeAttribute($):o.getAttribute($)!==i.join(",")&&o.setAttribute($,i.join(","))},Yo=(e,t)=>{typeof e<"u"&&document.title!==e&&(document.title=L1(e)),ta("title",t)},Pa=(e,t)=>{const{baseTag:o,bodyAttributes:n,htmlAttributes:s,linkTags:r,metaTags:i,noscriptTags:l,onChangeClientState:h,scriptTags:u,styleTags:p,title:m,titleAttributes:k}=e;ta("body",n),ta("html",s),Yo(m,k);const A={baseTag:fe("base",o),linkTags:fe("link",r),metaTags:fe("meta",i),noscriptTags:fe("noscript",l),scriptTags:fe("script",u),styleTags:fe("style",p)},M={},P={};Object.keys(A).forEach(b=>{const{newTags:j,oldTags:x}=A[b];j.length&&(M[b]=j),x.length&&(P[b]=A[b].oldTags)}),t&&t(),h(e,M,P)},Ie=null,Zo=e=>{Ie&&cancelAnimationFrame(Ie),e.defer?Ie=requestAnimationFrame(()=>{Pa(e,()=>{Ie=null})}):(Pa(e),Ie=null)},Jo=Zo,Ta=class extends g.Component{constructor(){super(...arguments);V(this,"rendered",!1)}shouldComponentUpdate(t){return!Oo(t,this.props)}componentDidUpdate(){this.emitChange()}componentWillUnmount(){const{helmetInstances:t}=this.props.context;t.remove(this),this.emitChange()}emitChange(){const{helmetInstances:t,setHelmet:o}=this.props.context;let n=null;const s=Bo(t.get().map(r=>{const{context:i,...l}=r.props;return l}));B1.canUseDOM?Jo(s):Jt&&(n=Jt(s)),o(n)}init(){if(this.rendered)return;this.rendered=!0;const{helmetInstances:t}=this.props.context;t.add(this),this.emitChange()}render(){return this.init(),null}},lt=[],Ma=e=>{const t={};for(const o of Object.keys(e))t[R1[o]||o]=e[o];return t},ce=e=>{const t={};for(const o of Object.keys(e)){const n=ft[o];t[n||o]=e[o]}return t},Sa=(e,t)=>{if(!ca)return;const o=document.getElementsByTagName(e)[0];if(!o)return;const n="data-rh-managed",s=o.getAttribute(n),r=s?s.split(","):[],i=Object.keys(t);for(const l of r)i.includes(l)||o.removeAttribute(l);for(const l of i){const h=t[l];h==null||h===!1?o.removeAttribute(l):h===!0?o.setAttribute(l,""):o.setAttribute(l,String(h))}i.length>0?o.setAttribute(n,i.join(",")):o.removeAttribute(n)},jt=()=>{const e={},t={};for(const o of lt){const{htmlAttributes:n,bodyAttributes:s}=o.props;n&&Object.assign(e,Ma(n)),s&&Object.assign(t,Ma(s))}Sa("html",e),Sa("body",t)}
1,Xo=class extends g.Component{componentDidMount(){lt.push(this),jt()}componentDidUpdate(){jt()}componentWillUnmount(){const e=lt.indexOf(this);e!==-1&<.splice(e,1),jt()}resolveTitle(){const{title:e,titleTemplate:t,defaultTitle:o}=this.props;return e&&t?t.replace(/%s/g,()=>Array.isArray(e)?e.join(""):e):e||o||void 0}renderTitle(){const e=this.resolveTitle();if(e===void 0)return null;const t=this.props.titleAttributes||{};return E.createElement("title",ce(t),e)}renderBase(){const{base:e}=this.props;return e?E.createElement("base",ce(e)):null}renderMeta(){const{meta:e}=this.props;return!e||!Array.isArray(e)?null:e.map((t,o)=>E.createElement("meta",{key:o,...ce(t)}))}renderLink(){const{link:e}=this.props;return!e||!Array.isArray(e)?null:e.map((t,o)=>E.createElement("link",{key:o,...ce(t)}))}renderScript(){const{script:e}=this.props;return!e||!Array.isArray(e)?null:e.map((t,o)=>{const{innerHTML:n,...s}=t,r=ce(s);return n&&(r.dangerouslySetInnerHTML={__html:n}),E.createElement("script",{key:o,...r})})}renderStyle(){const{style:e}=this.props;return!e||!Array.isArray(e)?null:e.map((t,o)=>{const{cssText:n,...s}=t,r=ce(s);return n&&(r.dangerouslySetInnerHTML={__html:n}),E.createElement("style",{key:o,...r})})}renderNoscript(){const{noscript:e}=this.props;return!e||!Array.isArray(e)?null:e.map((t,o)=>{const{innerHTML:n,...s}=t,r=ce(s);return n&&(r.dangerouslySetInnerHTML={__html:n}),E.createElement("noscript",{key:o,...r})})}render(){return E.createElement(E.Fragment,null,this.renderTitle(),this.renderBase(),this.renderMeta(),this.renderLink(),this.renderScript(),this.renderStyle(),this.renderNoscript())}},Qt,en=(Qt=class extends g.Component{shouldComponentUpdate(e){return!Io(Aa(this.props,"helmetData"),Aa(e,"helmetData"))}mapNestedChildrenToProps(e,t){if(!t)return null;switch(e.type){case"script":case"noscript":return{innerHTML:t};case"style":return{cssText:t};default:throw new Error(`<${e.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`)}}flattenArrayTypeChildren(e,t,o,n){return{...t,[e.type]:[...t[e.type]||[],{...o,...this.mapNestedChildrenToProps(e,n)}]}}mapObjectTypeChildren(e,t,o,n){switch(e.type){case"title":return{...t,[e.type]:n,titleAttributes:{...o}};case"body":return{...t,bodyAttributes:{...o}};case"html":return{...t,htmlAttributes:{...o}};default:return{...t,[e.type]:{...o}}}}mapArrayTypeChildrenToProps(e,t){let o={...t};return Object.keys(e).forEach(n=>{o={...o,[n]:e[n]}}),o}warnOnInvalidChildren(e,t){return ka(xa.some(o=>e.type===o),typeof e.type=="function"?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":`Only elements types ${xa.join(", ")} are allowed. Helmet does not support rendering <${e.type}> elements. Refer to our API for more information.`),ka(!t||typeof t=="string"||Array.isArray(t)&&!t.some(o=>typeof o!="string"),`Helmet expects a string as a child of <${e.type}>. Did you forget to wrap your children in braces? ( <${e.type}>{\`\`}</${e.type}> ) Refer to our API for more information.`),!0}mapChildrenToProps(e,t){let o={};return E.Children.forEach(e,n=>{if(!n||!n.props)return;const{children:s,...r}=n.props,i=Object.keys(r).reduce((h,u)=>(h[R1[u]||u]=r[u],h),{});let{type:l}=n;
1switch(typeof l=="symbol"?l=l.toString():this.warnOnInvalidChildren(n,s),l){case"Symbol(react.fragment)":t=this.mapChildrenToProps(s,t);break;case"link":case"meta":case"noscript":case"script":case"style":o=this.flattenArrayTypeChildren(n,o,i,s);break;default:t=this.mapObjectTypeChildren(n,t,i,s);break}}),this.mapArrayTypeChildrenToProps(o,t)}render(){const{children:e,...t}=this.props;let o={...t},{helmetData:n}=t;if(e&&(o=this.mapChildrenToProps(e,o)),n&&!(n instanceof Xt)){const s=n;n=new Xt(s.context,!0),delete o.helmetData}return ea?E.createElement(Xo,{...o}):n?E.createElement(Ta,{...o,context:n.value}):E.createElement(N1.Consumer,null,s=>E.createElement(Ta,{...o,context:s}))}},V(Qt,"defaultProps",{defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1}),Qt);const tn="modulepreload",an=function(e){return"/"+e},_a={},N=function(t,o,n){let s=Promise.resolve();if(o&&o.length>0){const r=document.getElementsByTagName("link");s=Promise.all(o.map(i=>{if(i=an(i),i in _a)return;_a[i]=!0;const l=i.endsWith(".css"),h=l?'[rel="stylesheet"]':"";if(!!n)for(let m=r.length-1;m>=0;m--){const k=r[m];if(k.href===i&&(!l||k.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${h}`))return;const p=document.createElement("link");if(p.rel=l?"stylesheet":tn,l||(p.as="script",p.crossOrigin=""),p.href=i,document.head.appendChild(p),l)return new Promise((m,k)=>{p.addEventListener("load",m),p.addEventListener("error",()=>k(new Error(`Unable to preload CSS for ${i}`)))})}))}return s.then(()=>t()).catch(r=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=r,window.dispatchEvent(i),!i.defaultPrevented)throw r})};/** 2 * @remix-run/router v1.15.0 3 * 4 * Copyright (c) Remix Software Inc. 5 * 6 * This source code is licensed under the MIT license found in the 7 * LICENSE.md file in the root directory of this source tree. 8 * 9 * @license MIT 10 */function Ne(){return Ne=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},Ne.apply(this,arguments)}var se;(function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"})(se||(se={}));const Ca="popstate";function on(e){e===void 0&&(e={});function t(n,s){let{pathname:r,search:i,hash:l}=n.location;return aa("",{pathname:r,search:i,hash:l},s.state&&s.state.usr||null,s.state&&s.state.key||"default")}function o(n,s){return typeof s=="string"?s:dt(s)}return sn(t,o,null,e)}function L(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function ha(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function nn(){return Math.random().toString(36).substr(2,8)}function Ia(e,t){return{usr:e.state,key:e.key,idx:t}}function aa(e,t,o,n){return o===void 0&&(o=null),Ne({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?Se(t):t,{state:o,key:t&&t.key||n||nn()})}function dt(e){let{pathname:t="/",search:o="",hash:n=""}=e;return o&&o!=="?"&&(t+=o.charAt(0)==="?"?o:"?"+o),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Se(e){let t={};if(e){let o=e.indexOf("#");o>=0&&(t.hash=e.substr(o),e=e.substr(0,o));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function sn(e,t,o,n){n===void 0&&(n={});let{window:s=document.defaultView,v5Compat:r=!1}=n,i=s.history,l=se.Pop,h=null,u=p();u==null&&(u=0,i.replaceState(Ne({},i.state,{idx:u}),""));function p(){return(i.state||{idx:null}).idx}function m(){l=se.Pop;let b=p(),j=b==null?null:b-u;u=b,h&&h({action:l,location:P.location,delta:j})}function k(b,j){l=se.Push;let x=aa(P.location,b,j);o&&o(x,b),u=p()+1;let T=Ia(x,u),H=P.createHref(x);try{i.pushState(T,"",H)}catch(Z){if(Z instanceof DOMException&&Z.name==="DataCloneError")throw Z;s.location.assign(H)}r&&h&&h({action:l,location:P.location,delta:1})}function A(b,j){l=se.Replace;let x=aa(P.location,b,j);o&&o(x,b),u=p();let T=Ia(x,u),H=P.createHref(x);i.replaceState(T,"",H),r&&h&&h({action:l,location:P.location,delta:0})}function M(b){let j=s.location.origin!=="null"?s.location.origin:s.location.href,x=typeof b=="string"?b:dt(b);return L(j,"No window.location.(origin|href) available to create URL for href: "+x),new URL(x,j)}let P={get action(){return l},get location(){return e(s,i)},listen(b){if(h)throw new Error("A history only accepts one active listener");return s.addEventListener(Ca,m),h=b,()=>{s.removeEventListener(Ca,m),h=null}},createHref(b){return t(s,b)},createURL:M,encodeLocation(b){let j=M(b);return{pathname:j.pathname,search:j.search,hash:j.hash}},push:k,replace:A,go(b){return i.go(b)}};return P}var ja;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(ja||(ja={}));function rn(e,t,o){o===void 0&&(o="/");let n=typeof t=="string"?Se(t):t,s=da(n.pathname||"/",o);if(s==null)return null;let r=H1(e);ln(r);let i=null;for(let l=0;i==null&&l<r.length;++l)i=fn(r[l],wn(s));return i}function H1(e,t,o,n){t===void 0&&(t=[]),o===void 0&&(o=[]),n===void 0&&(n="");let s=(r,i,l)=>{let h={relativePath:l===void 0?r.path||"":l,caseSensitive:r.caseSensitive===!0,childrenIndex:i,route:r};h.relativePath.startsWith("/")&&(L(h.relativePath.startsWith(n),'Absolute route path "'+h.relativePath+'" nested under path '+('"'+n+'" is not val
10id. An absolute child route path ')+"must start with the combined path of all its parent routes."),h.relativePath=h.relativePath.slice(n.length));let u=re([n,h.relativePath]),p=o.concat(h);r.children&&r.children.length>0&&(L(r.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),H1(r.children,t,p,u)),!(r.path==null&&!r.index)&&t.push({path:u,score:mn(u,r.index),routesMeta:p})};return e.forEach((r,i)=>{var l;if(r.path===""||!((l=r.path)!=null&&l.includes("?")))s(r,i);else for(let h of F1(r.path))s(r,i,h)}),t}function F1(e){let t=e.split("/");if(t.length===0)return[];let[o,...n]=t,s=o.endsWith("?"),r=o.replace(/\?$/,"");if(n.length===0)return s?[r,""]:[r];let i=F1(n.join("/")),l=[];return l.push(...i.map(h=>h===""?r:[r,h].join("/"))),s&&l.push(...i),l.map(h=>e.startsWith("/")&&h===""?"/":h)}function ln(e){e.sort((t,o)=>t.score!==o.score?o.score-t.score:yn(t.routesMeta.map(n=>n.childrenIndex),o.routesMeta.map(n=>n.childrenIndex)))}const cn=/^:[\w-]+$/,hn=3,dn=2,un=1,pn=10,gn=-2,Ea=e=>e==="*";function mn(e,t){let o=e.split("/"),n=o.length;return o.some(Ea)&&(n+=gn),t&&(n+=dn),o.filter(s=>!Ea(s)).reduce((s,r)=>s+(cn.test(r)?hn:r===""?un:pn),n)}function yn(e,t){return e.length===t.length&&e.slice(0,-1).every((n,s)=>n===t[s])?e[e.length-1]-t[t.length-1]:0}function fn(e,t){let{routesMeta:o}=e,n={},s="/",r=[];for(let i=0;i<o.length;++i){let l=o[i],h=i===o.length-1,u=s==="/"?t:t.slice(s.length)||"/",p=vn({path:l.relativePath,caseSensitive:l.caseSensitive,end:h},u);if(!p)return null;
vendor: 7,012 bytes, lines 10-19
10Object.assign(n,p.params);let m=l.route;r.push({params:n,pathname:re([s,p.pathname]),pathnameBase:Tn(re([s,p.pathnameBase])),route:m}),p.pathnameBase!=="/"&&(s=re([s,p.pathnameBase]))}return r}function vn(e,t){typeof e=="string"&&(e={path:e,caseSensitive:!1,end:!0});let[o,n]=bn(e.path,e.caseSensitive,e.end),s=t.match(o);if(!s)return null;let r=s[0],i=r.replace(/(.)\/+$/,"$1"),l=s.slice(1);return{params:n.reduce((u,p,m)=>{let{paramName:k,isOptional:A}=p;if(k==="*"){let P=l[m]||"";i=r.slice(0,r.length-P.length).replace(/(.)\/+$/,"$1")}const M=l[m];return A&&!M?u[k]=void 0:u[k]=kn(M||"",k),u},{}),pathname:r,pathnameBase:i,pattern:e}}function bn(e,t,o){t===void 0&&(t=!1),o===void 0&&(o=!0),ha(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],s="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(i,l,h)=>(n.push({paramName:l,isOptional:h!=null}),h?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),s+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):o?s+="\\/*$":e!==""&&e!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,t?void 0:"i"),n]}function wn(e){try{return decodeURI(e)}catch(t){return ha(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function kn(e,t){try{return decodeURIComponent(e)}catch(o){return ha(!1,'The value for the URL param "'+t+'" will not be decoded because'+(' the string "'+e+'" is a malformed URL segment. This is probably')+(" due to a bad percent encoding ("+o+").")),e}}function da(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let o=t.endsWith("/")?t.length-1:t.length,n=e.charAt(o);return n&&n!=="/"?null:e.slice(o)||"/"}function xn(e,t){t===void 0&&(t="/");let{pathname:o,search:n="",hash:s=""}=typeof e=="string"?Se(e):e;return{pathname:o?o.startsWith("/")?o:An(o,t):t,search:Mn(n),hash:Sn(s)}}function An(e,t){let o=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(s=>{s===".."?o.length>1&&o.pop():s!=="."&&o.push(s)}),o.length>1?o.join("/"):"/"}function Et(e,t,o,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+o+"` field. Alternatively you may provide the full path as ")+'a string in <Link to="..."> and the router will parse it for you.'}function Pn(e){return e.filter((t,o)=>o===0||t.route.path&&t.route.path.length>0)}function G1(e,t){let o=Pn(e);return t?o.map((n,s)=>s===e.length-1?n.pathname:n.pathnameBase):o.map(n=>n.pathnameBase)}function W1(e,t,o,n){n===void 0&&(n=!1);let s;typeof e=="string"?s=Se(e):(s=Ne({},e),L(!s.pathname||!s.pathname.includes("?"),Et("?","pathname","search",s)),L(!s.pathname||!s.pathname.includes("#"),Et("#","pathname","hash",s)),L(!s.search||!s.search.includes("#"),Et("#","search","hash",s)));let r=e===""||s.pathname==="",i=r?"/":s.pathname,l;if(i==null)l=o;else{let m=t.length-1;if(!n&&i.startsWith("..")){let k=i.split("/");for(;k[0]==="..";)k.shift(),m-=1;s.pathname=k.join("/")}l=m>=0?t[m]:"/"}let h=xn(s,l),u=i&&i!=="/"&&i.endsWith("/"),p=(r||i===".")&&o.endsWith("/");return!h.pathname.endsWith("/")&&(u||p)&&(h.pathname+="/"),h}const re=e=>e.join("/").replace(/\/\/+/g,"/"),Tn=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Mn=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Sn=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function _n(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const $1=["post","put","patch","delete"];new Set($1);const Cn=["get",...$1];new Set(Cn);/** 11 * React Router v6.22.0 12 * 13 * Copyright (c) Remix Software Inc. 14 * 15 * This source code is licensed under the MIT license found in the 16 * LICENSE.md file in the root directory of this source tree. 17 * 18 * @license MIT 19 */function Be(){return Be=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},Be.apply(this,arguments)}const ua=g.createContext(null),In=g.createContext(null),me=g.createContext(null),vt=g.createContext(null),ie=g.createContext({outlet:null,matches:[],isDataRoute:!1}),U1=g.createContext(null);function jn(e,t){let{relative:o}=t===void 0?{}:t;Fe()||L(!1);let{basename:n,navigator:s}=g.useContext(me),{hash:r,pathname:i,search:l}=K1(e,{relative:o}),h=i;return n!=="/"&&(h=i==="/"?n:re([n,i])),s.createHref({pathname:h,search:l,hash:r})}function Fe(){return g.useContext(vt)!=null}function Y(){return Fe()||L(!1),g.useContext(vt).location}function V1(e){g.useContext(me).static||g.useLayoutEffect(e)}function bt(){let{isDataRoute:e}=g.useContext(ie);return e?Wn():En()}function En(){Fe()||L(!1);let e=g.useContext(ua),{basename:t,future:o,navigator:n}=g.useContext(me),{matches:s}=g.useContext(ie),{pathname:r}=Y(),i=JSON.stringify(G1(s,o.v7_relativeSplatPath)),l=g.useRef(!1);return V1(()=>{l.current=!0}),g.useCallback(function(u,p){if(p===void 0&&(p={}),!l.current)return;if(typeof u=="number"){n.go(u);return}let m=W1(u,JSON.parse(i),r,p.relative==="path");e==null&&t!=="/"&&(m.pathname=m.pathname==="/"?t:re([t,m.pathname])),(p.replace?n.replace:n.push)(m,p.state,p)},[t,n,i,r,e])}function f3(){let{matches:e}=g.useContext(ie),t=e[e.length-1];return t?t.params:{}}function K1(e,t){let{relative:o}=t===void 0?{}:t,{future:n}=g.useContext(me),{matches:s}=g.useContext(ie),{pathname:r}=Y(),i=JSON.stringify(G1(s,n.v7_relativeSplatPath));return g.useMemo(()=>W1(e,JSON.parse(i),r,o==="path"),[e,i,r,o])}function zn(e,t){return On(e,t)}function On(e,t,o,n){Fe()||L(!1);let{navigator:s}=g.useContext(me),{matches:r}=g.useContext(ie),i=r[r.length-1],l=i?i.params:{};i&&i.pathname;let h=i?i.pathnameBase:"/";i&&i.route;let u=Y(),p;if(t){var m;let b=typeof t=="string"?Se(t):t;h==="/"||(m=b.pathname)!=null&&m.startsWith(h)||L(!1),p=b}else p=u;let k=p.pathname||"/",A=h==="/"?k:k.slice(h.length)||"/",M=rn(e,{pathname:A}),P=Nn(M&&M.map(b=>Object.assign({},b,{params:Object.assign({},l,b.params),pathname:re([h,s.encodeLocation?s.encodeLocation(b.pathname).pathname:b.pathname]),pathnameBase:b.pathnameBase==="/"?h:re([h,s.encodeLocation?s.encodeLocation(b.pathnameBase).pathname:b.pathnameBase])})),r,o,n);return t&&P?g.createElement(vt.Provider,{value:{location:Be({pathname:"/",search:"",hash:"",state:null,key:"default"},p),navigationType:se.Pop}},P):P}function Rn(){let e=Gn(),t=_n(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),o=e instanceof Error?e.stack:null,s={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return g.createElement(g.Fragment,null,g.createElement("h2",null,"Unexpected Application
19Error!"),g.createElement("h3",{style:{fontStyle:"italic"}},t),o?g.createElement("pre",{style:s},o):null,null)}const Ln=g.createElement(Rn,null);class Dn extends g.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,o){return o.location!==t.location||o.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:o.error,location:o.location,revalidation:t.revalidation||o.revalidation}}componentDidCatch(t,o){console.error("React Router caught the following error during render",t,o)}render(){return this.state.error!==void 0?g.createElement(ie.Provider,{value:this.props.routeContext},g.createElement(U1.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function qn(e){let{routeContext:t,match:o,children:n}=e,s=g.useContext(ua);return s&&s.static&&s.staticContext&&(o.route.errorElement||o.route.ErrorBoundary)&&(s.staticContext._deepestRenderedBoundaryId=o.route.id),g.createElement(ie.Provider,{value:t},n)}function Nn(e,t,o,n){var s;if(t===void 0&&(t=[]),o===void 0&&(o=null),n===void 0&&(n=null),e==null){var r;if((r=o)!=null&&r.errors)e=o.matches;else return null}let i=e,l=(s=o)==null?void 0:s.errors;if(l!=null){let p=i.findIndex(m=>m.route.id&&(l==null?void 0:l[m.route.id]));p>=0||L(!1),i=i.slice(0,Math.min(i.length,p+1))}let h=!1,u=-1;if(o&&n&&n.v7_partialHydration)for(let p=0;p<i.length;p++){let m=i[p];if((m.route.HydrateFallback||m.route.hydrateFallbackElement)&&(u=p),m.route.id){let{loaderData:k,errors:A}=o,M=m.route.loader&&k[m.route.id]===void 0&&(!A||A[m.route.id]===void 0);if(m.route.lazy||M){h=!0,u>=0?i=i.slice(0,u+1):i=[i[0]];break}}}return i.reduceRight((p,m,k)=>{let A,M=!1,P=null,b=null;o&&(A=l&&m.route.id?l[m.route.id]:void 0,P=m.route.errorElement||Ln,h&&(u<0&&k===0?($n("route-fallback",!1),M=!0,b=null):u===k&&(M=!0,b=m.route.hydrateFallbackElement||null)));let j=t.concat(i.slice(0,k+1)),x=()=>{let T;return A?T=P:M?T=b:m.route.Component?T=g.createElement(m.route.Component,null):m.route.element?T=m.route.element:T=p,g.createElement(qn,{match:m,routeContext:{outlet:p,matches:j,isDataRoute:o!=null},children:T})};return o&&(m.route.ErrorBoundary||m.route.errorElement||k===0)?g.createElement(Dn,{location:o.location,revalidation:o.revalidation,component:P,error:A,children:x(),routeContext:{outlet:null,matches:j,isDataRoute:!0}}):x()},null)}var Q1=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Q1||{}),ut=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(ut||{});function Bn(e){let t=g.useContext(ua);return t||L(!1),t}function Hn(e){let t=g.useContext(In);return t||L(!1),t}function Fn(e){let t=g.useContext(ie);return t||L(!1),t}function Y1(e){let t=Fn(),o=t.matches[t.matches.length-1];return o.route.id||L(!1),o.route.id}function Gn(){var e;let t=g.useContext(U1),o=Hn(ut.UseRouteError),n=Y1(ut.UseRouteError);return t!==void 0?t:(e=o.errors)==null?void 0:e[n]}function Wn(){let{router:e}=Bn(Q1.UseNavigateStable),t=Y1(ut.UseNavigateStable),o=g.useRef(!1);return V1(()=>{o.current=!0}),g.useCallback(function(s,r){r===void 0&&(r={}),o.current&&(typeof s=="number"?e.navigate(s):e.navigate(s,Be({fromRouteId:t},r)))},[e,t])}const za={};function $n(e,t,o){!t&&!za[e]&&(za[e]=!0)}function R(e){L(!1)}function Un(e){let{basename:t="/",children:o=null,location:n,navigationType:s=se.Pop,navigator:r,static:i=!1,future:l}=e;Fe()&&L(!1);let h=t.replace(/^\/*/,"/"),u=g.useMemo(()=>({basename:h,navigator:r,static:i,future:Be({v7_relativeSplatPath:!1},l)}),[h,l,r,i]);typeof n=="string"&&(n=Se(n));let{pathname:p="/",search:m="",hash:k="",state:A=null,key:M="default"}=n,P=g.useMemo(()=>{let b=da(p,h);return b==null?null:{location:{pathname:b,search:m,hash:k,state:A,key:M},navigationType:s}},[h,p,m,k,A,M,s]);return P==null?null:g.createElement(me.Provider,{value:u},g.createElement(vt.Provider,{children:o,value:P}))}function Vn(e){let{children:t,location:o}=e;return zn(oa(t),o)}new Promise(()=>{});
19function oa(e,t){t===void 0&&(t=[]);let o=[];return g.Children.forEach(e,(n,s)=>{if(!g.isValidElement(n))return;let r=[...t,s];if(n.type===g.Fragment){o.push.apply(o,oa(n.props.children,r));return}n.type!==R&&L(!1),!n.props.index||!n.props.children||L(!1);let i={id:n.props.id||r.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(i.children=oa(n.props.children,r)),o.push(i)}),o}/** 20 * React Router DOM v6.22.0 21 * 22 * Copyright (c) Remix Software Inc. 23 * 24 * This source code is licensed under the MIT license found in the 25 * LICENSE.md file in the root directory of this source tree. 26 * 27 * @license MIT 28 */function na(){return na=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},na.apply(this,arguments)}function Kn(e,t){if(e==null)return{};var o={},n=Object.keys(e),s,r;for(r=0;r<n.length;r++)s=n[r],!(t.indexOf(s)>=0)&&(o[s]=e[s]);return o}function Qn(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Yn(e,t){return e.button===0&&(!t||t==="_self")&&!Qn(e)}function sa(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,o)=>{let n=e[o];return t.concat(Array.isArray(n)?n.map(s=>[o,s]):[[o,n]])},[]))}function Zn(e,t){let o=sa(e);return t&&t.forEach((n,s)=>{o.has(s)||t.getAll(s).forEach(r=>{o.append(s,r)})}),o}const Jn=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],Xn="6";try{window.__reactRouterVersion=Xn}catch{}const es="startTransition",Oa=go[es];function ts(e){let{basename:t,children:o,future:n,window:s}=e,r=g.useRef();r.current==null&&(r.current=on({window:s,v5Compat:!0}));let i=r.current,[l,h]=g.useState({action:i.action,location:i.location}),{v7_startTransition:u}=n||{},p=g.useCallback(m=>{u&&Oa?Oa(()=>h(m)):h(m)},[h,u]);return g.useLayoutEffect(()=>i.listen(p),[i,p]),g.createElement(Un,{basename:t,children:o,location:l.location,navigationType:l.action,navigator:i,future:n})}const as=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",os=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,ae=g.forwardRef(function(t,o){let{onClick:n,relative:s,reloadDocument:r,replace:i,state:l,target:h,to:u,preventScrollReset:p,unstable_viewTransition:m}=t,k=Kn(t,Jn),{basename:A}=g.useContext(me),M,P=!1;if(typeof u=="string"&&os.test(u)&&(M=u,as))try{let T=new URL(window.location.href),H=u.startsWith("//")?new URL(T.protocol+u):new URL(u),Z=da(H.pathname,A);H.origin===T.origin&&Z!=null?u=Z+H.search+H.hash:P=!0}catch{}let b=jn(u,{relative:s}),j=ns(u,{replace:i,state:l,target:h,preventScrollReset:p,relative:s,unstable_viewTransition:m});function x(T){n&&n(T),T.defaultPrevented||j(T)}return g.createElement("a",na({},k,{href:M||b,onClick:P||r?n:x,ref:o,target:h}))});var Ra;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ra||(Ra={}));var La;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(La||(La={}));function ns(e,t){let{target:o,replace:n,state:s,preventScrollReset:r,relative:i,unstable_viewTransition:l}=t===void 0?{}:t,h=bt(),u=Y(),p=K1(e,{relative:i});return g.useCallback(m=>{if(Yn(m,o)){m.preventDefault();let k=n!==void 0?n:dt(u)===dt(p);h(e,{replace:k,state:s,preventScrollReset:r,relative:i,unstable_viewTransition:l})}},[u,h,p,n,s,o,e,r,i,l])}function v3(e){let t=g.useRef(sa(e)),o=g.useRef(!1),n=Y(),s=g.useMemo(()=>Zn(n.search,o.current?null:t.current),[n.search]),r=bt(),i=g.useCallback((l,h)=>{const u=sa(typeof l=="function"?l(s):l);o.current=!0,r("?"+u,h)},[r,s]);return[s,i]}var Z1={exports:{}},ss="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",rs=ss,is=rs;function J1(){}function X1(){}X1.resetWarningCache=J1;var ls=function(){function e(n,s,r,i,l,h){if(h!==is){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}e.isRequired=e;function t(){return e}var o={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol
28:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:X1,resetWarningCache:J1};return o.PropTypes=o,o};Z1.exports=ls();var cs=Z1.exports;const he=yt(cs);var hs={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},ds=Object.defineProperty,us=Object.defineProperties,ps=Object.getOwnPropertyDescriptors,pt=Object.getOwnPropertySymbols,eo=Object.prototype.hasOwnProperty,to=Object.prototype.propertyIsEnumerable,Da=(e,t,o)=>t in e?ds(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,qa=(e,t)=>{for(var o in t||(t={}))eo.call(t,o)&&Da(e,o,t[o]);if(pt)for(var o of pt(t))to.call(t,o)&&Da(e,o,t[o]);return e},gs=(e,t)=>us(e,ps(t)),ms=(e,t)=>{var o={};for(var n in e)eo.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(e!=null&&pt)for(var n of pt(e))t.indexOf(n)<0&&to.call(e,n)&&(o[n]=e[n]);return o},w=(e,t,o)=>{const n=g.forwardRef((s,r)=>{var i=s,{color:l="currentColor",size:h=24,stroke:u=2,children:p}=i,m=ms(i,["color","size","stroke","children"]);return g.createElement("svg",qa(gs(qa({ref:r},hs),{width:h,height:h,stroke:l,strokeWidth:u,className:`tabler-icon tabler-icon-${e}`}),m),[...o.map(([k,A])=>g.createElement(k,A)),...p||[]])});return n.propTypes={color:he.string,size:he.oneOfType([he.string,he.number]),stroke:he.oneOfType([he.string,he.number])},n.displayName=`${t}`,n},$e=w("activity","IconActivity",[["path",{d:"M3 12h4l3 8l4 -16l3 8h4",key:"svg-0"}]]),De=w("api","IconApi",[["path",{d:"M4 13h5",key:"svg-0"}],["path",{d:"M12 16v-8h3a2 2 0 0 1 2 2v1a2 2 0 0 1 -2 2h-3",key:"svg-1"}],["path",{d:"M20 8v8",key:"svg-2"}],["path",{d:"M9 16v-5.5a2.5 2.5 0 0 0 -5 0v5.5",key:"svg-3"}]]),ys=w("arrow-right","IconArrowRight",[["path",{d:"M5 12l14 0",key:"svg-0"}],["path",{d:"M13 18l6 -6",key:"svg-1"}],["path",{d:"M13 6l6 6",key:"svg-2"}]]),fs=w("arrows-split-2","IconArrowsSplit2",[["path",{d:"M21 17h-5.397a5 5 0 0 1 -4.096 -2.133l-.514 -.734a5 5 0 0 0 -4.096 -2.133h-3.897",key:"svg-0"}],["path",{d:"M21 7h-5.395a5 5 0 0 0 -4.098 2.135l-.51 .73a5 5 0 0 1 -4.097 2.135h-3.9",key:"svg-1"}],["path",{d:"M18 10l3 -3l-3 -3",key:"svg-2"}],["path",{d:"M18 20l3 -3l-3 -3",key:"svg-3"}]]),Ue=w("bell","IconBell",[["path",{d:"M10 5a2 2 0 1 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3h-16a4 4 0 0 0 2 -3v-3a7 7 0 0 1 4 -6",key:"svg-0"}],["path",{d:"M9 17v1a3 3 0 0 0 6 0v-1",key:"svg-1"}]]),vs=w("book","IconBook",[["path",{d:"M3 19a9 9 0 0 1 9 0a9 9 0 0 1 9 0",key:"svg-0"}],["path",{d:"M3 6a9 9 0 0 1 9 0a9 9 0 0 1 9 0",key:"svg-1"}],["path",{d:"M3 6l0 13",key:"svg-2"}],["path",{d:"M12 6l0 13",key:"svg-3"}],["path",{d:"M21 6l0 13",key:"svg-4"}]]),W=w("brain","IconBrain",[["path",{d:"M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8",key:"svg-0"}],["path",{d:"M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8",key:"svg-1"}],["path",{d:"M17.5 16a3.5 3.5 0 0 0 0 -7h-.5",key:"svg-2"}],["path",{d:"M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0",key:"svg-3"}],["path",{d:"M6.5 16a3.5 3.5 0 0 1 0 -7h.5",key:"svg-4"}],["path",{d:"M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10",key:"svg-5"}]]),Ve=w("brand-aws","IconBrandAws",[["path",{d:"M17 18.5a15.198 15.198 0 0 1 -7.37 1.44a14.62 14.62 0 0 1 -6.63 -2.94",key:"svg-0"}],["path",{d:"M19.5 21c.907 -1.411 1.451 -3.323 1.5 -5c-1.197 -.773 -2.577 -.935 -4 -1",key:"svg-1"}],["path",{d:"M3 11v-4.5a1.5 1.5 0 0 1 3 0v4.5",key:"svg-2"}],["path",{d:"M3 9h3",key:"svg-3"}],["path",{d:"M9 5l1.2 6l1.8 -4l1.8 4l1.2 -6",key:"svg-4"}],["path",{d:"M18 10.25c0 .414 .336 .75 .75 .75h1.25a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-1a1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1h1.25a.75 .75 0 0 1 .75 .75",key:"svg-5"}]]),ao=w("brand-discord","IconBrandDiscord",[["path",{d:"M8 12a1 1 0 1 0 2 0a1 1 0 0 0 -2 0",key:"svg-0"}],["path",{d:"M14 12a1 1 0 1 0 2 0a1 1 0 0 0 -2 0",key:"svg-1"}],["path",{d:"M15.5 17c0 1 1.5 3 2 3c1.5 0 2.833 -1.667 3.5 -3c.667 -1.667 .5 -5.833 -1.5 -11.5c-1.457 -1.015 -3 -1.34 -4.5 -1.5l-.972 1.923a11.913 11.913 0 0 0 -4.053 0l-.975 -1.923c-1.5 .16 -3.043 .485 -4.5 1.5c-2 5.667 -2.167 9.833 -1.5 11.5c.667 1.333 2 3 3.5 3c.5 0 2 -2 2 -3",key:"svg-2"}],["path",{d:"M7 16.5c3.5 1 6.5 1 10 0",key:"svg-3"}]]),bs=w("brand-graphql","IconBrandGraphql",[["path",{d:"M5.308 7.265l5.385 -3.029",ke
28y:"svg-0"}],["path",{d:"M13.308 4.235l5.384 3.03",key:"svg-1"}],["path",{d:"M20 9.5v5",key:"svg-2"}],["path",{d:"M18.693 16.736l-5.385 3.029",key:"svg-3"}],["path",{d:"M10.692 19.765l-5.384 -3.03",key:"svg-4"}],["path",{d:"M4 14.5v-5",key:"svg-5"}],["path",{d:"M12.772 4.786l6.121 10.202",key:"svg-6"}],["path",{d:"M18.5 16h-13",key:"svg-7"}],["path",{d:"M5.107 14.988l6.122 -10.201",key:"svg-8"}],["path",{d:"M12 3.5m-1.5 0a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0 -3 0",key:"svg-9"}],["path",{d:"M12 20.5m-1.5 0a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0 -3 0",key:"svg-10"}],["path",{d:"M4 8m-1.5 0a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0 -3 0",key:"svg-11"}],["path",{d:"M4 16m-1.5 0a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0 -3 0",key:"svg-12"}],["path",{d:"M20 16m-1.5 0a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0 -3 0",key:"svg-13"}],["path",{d:"M20 8m-1.5 0a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0 -3 0",key:"svg-14"}]]),ws=w("brand-linkedin","IconBrandLinkedin",[["path",{d:"M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z",key:"svg-0"}],["path",{d:"M8 11l0 5",key:"svg-1"}],["path",{d:"M8 8l0 .01",key:"svg-2"}],["path",{d:"M12 16l0 -5",key:"svg-3"}],["path",{d:"M16 16v-3a2 2 0 0 0 -4 0",key:"svg-4"}]]),zt=w("brand-openai","IconBrandOpenai",[["path",{d:"M11.217 19.384a3.501 3.501 0 0 0 6.783 -1.217v-5.167l-6 -3.35",key:"svg-0"}],["path",{d:"M5.214 15.014a3.501 3.501 0 0 0 4.446 5.266l4.34 -2.534v-6.946",key:"svg-1"}],["path",{d:"M6 7.63c-1.391 -.236 -2.787 .395 -3.534 1.689a3.474 3.474 0 0 0 1.271 4.745l4.263 2.514l6 -3.348",key:"svg-2"}],["path",{d:"M12.783 4.616a3.501 3.501 0 0 0 -6.783 1.217v5.067l6 3.45",key:"svg-3"}],["path",{d:"M18.786 8.986a3.501 3.501 0 0 0 -4.446 -5.266l-4.34 2.534v6.946",key:"svg-4"}],["path",{d:"M18 16.302c1.391 .236 2.787 -.395 3.534 -1.689a3.474 3.474 0 0 0 -1.271 -4.745l-4.308 -2.514l-5.955 3.42",key:"svg-5"}]]),ks=w("brand-slack","IconBrandSlack",[["path",{d:"M12 12v-6a2 2 0 0 1 4 0v6m0 -2a2 2 0 1 1 2 2h-6",key:"svg-0"}],["path",{d:"M12 12h6a2 2 0 0 1 0 4h-6m2 0a2 2 0 1 1 -2 2v-6",key:"svg-1"}],["path",{d:"M12 12v6a2 2 0 0 1 -4 0v-6m0 2a2 2 0 1 1 -2 -2h6",key:"svg-2"}],["path",{d:"M12 12h-6a2 2 0 0 1 0 -4h6m-2 0a2 2 0 1 1 2 -2v6",key:"svg-3"}]]),Na=w("brand-twilio","IconBrandTwilio",[["path",{d:"M21 12a9 9 0 1 1 -18 0a9 9 0 0 1 18 0z",key:"svg-0"}],["path",{d:"M9 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M15 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}],["path",{d:"M15 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-3"}],["path",{d:"M9 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-4"}]]),xs=w("brand-x","IconBrandX",[["path",{d:"M4 4l11.733 16h4.267l-11.733 -16z",key:"svg-0"}],["path",{d:"M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772",key:"svg-1"}]]),oo=w("brand-youtube","IconBrandYoutube",[["path",{d:"M2 8a4 4 0 0 1 4 -4h12a4 4 0 0 1 4 4v8a4 4 0 0 1 -4 4h-12a4 4 0 0 1 -4 -4v-8z",key:"svg-0"}],["path",{d:"M10 9l5 3l-5 3z",key:"svg-1"}]]),As=w("broadcast","IconBroadcast",[["path",{d:"M18.364 19.364a9 9 0 1 0 -12.728 0",key:"svg-0"}],["path",{d:"M15.536 16.536a5 5 0 1 0 -7.072 0",key:"svg-1"}],["path",{d:"M12 13m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}]]),Ot=w("bug","IconBug",[["path",{d:"M9 9v-1a3 3 0 0 1 6 0v1",key:"svg-0"}],["path",{d:"M8 9h8a6 6 0 0 1 1 3v3a5 5 0 0 1 -10 0v-3a6 6 0 0 1 1 -3",key:"svg-1"}],["path",{d:"M3 13l4 0",key:"svg-2"}],["path",{d:"M17 13l4 0",key:"svg-3"}],["path",{d:"M12 20l0 -6",key:"svg-4"}],["path",{d:"M4 19l3.35 -2",key:"svg-5"}],["path",{d:"M20 19l-3.35 -2",key:"svg-6"}],["path",{d:"M4 7l3.75 2.4",key:"svg-7"}],["path",{d:"M20 7l-3.75 2.4",key:"svg-8"}]]),je=w("calendar","IconCalendar",[["path",{d:"M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z",key:"svg-0"}],["path",{d:"M16 3v4",key:"svg-1"}],["path",{d:"M8 3v4",key:"svg-2"}],["path",{d:"M4 11h16",key:"svg-3"}],["path",{d:"M11 15h1",key:"svg-4"}],["path",{d:"M12 15v3",key:"svg-5"}]]),Ke=w("chart-bar","IconChartBar",[["path",{d:"M3 12m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z",key:"svg-0"}],["path",{d:"M9 8m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z",key:"svg-1"}],["path",{d:"M15 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z",key:"svg-2"}],["path",{d:"M4 20l14 0",key:"svg-3"}]]),wt=w("chart-histogram","IconChartHistogram",[["path",{d:"M3 3v18h18",key:"svg-0"}],["path",{d:"M20 18v3",key:"svg-1"}],["path",{d:"M16 16v5",key:"svg-2"}],["path",{d:"M12 13v8",key:"svg-3"}],["path",{d:"M8 16v5",key:"svg-4"}],["path",{d:"M3 11c6 0 5 -5 9 -5s3 5 9 5",key:"svg-5"}]]),Ps=w("check","IconCheck",[["path",{d:"M5 12l5 5l10 -10",key:"svg-0"}]]),ve=w("chevron-down","IconChevronDown",[["path",{d:"M6 9l6 6l6 -6",key:"svg-0"}]]),Ts=w("clock-bolt","IconClockBolt",[["path",{d:"M20.984 12.53a9 9 0 1 0 -7.552 8.355",key:"svg-0"}],["path",{d:"M12 7v5l3 3",key:"svg-1"}],["path",{d:"M19 16l-2 3h4l-2 3",key:"svg-2"}
28]]),Rt=w("cloud","IconCloud",[["path",{d:"M6.657 18c-2.572 0 -4.657 -2.007 -4.657 -4.483c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.913 0 3.464 1.56 3.464 3.486c0 1.927 -1.551 3.487 -3.465 3.487h-11.878",key:"svg-0"}]]),we=w("credit-card","IconCreditCard",[["path",{d:"M3 5m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z",key:"svg-0"}],["path",{d:"M3 10l18 0",key:"svg-1"}],["path",{d:"M7 15l.01 0",key:"svg-2"}],["path",{d:"M11 15l2 0",key:"svg-3"}]]),ee=w("database","IconDatabase",[["path",{d:"M12 6m-8 0a8 3 0 1 0 16 0a8 3 0 1 0 -16 0",key:"svg-0"}],["path",{d:"M4 6v6a8 3 0 0 0 16 0v-6",key:"svg-1"}],["path",{d:"M4 12v6a8 3 0 0 0 16 0v-6",key:"svg-2"}]]),Ba=w("download","IconDownload",[["path",{d:"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2",key:"svg-0"}],["path",{d:"M7 11l5 5l5 -5",key:"svg-1"}],["path",{d:"M12 4l0 12",key:"svg-2"}]]),Ha=w("eye","IconEye",[["path",{d:"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0",key:"svg-0"}],["path",{d:"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6",key:"svg-1"}]]),oe=w("file-code","IconFileCode",[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z",key:"svg-1"}],["path",{d:"M10 13l-1 2l1 2",key:"svg-2"}],["path",{d:"M14 13l1 2l-1 2",key:"svg-3"}]]),no=w("file-text","IconFileText",[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z",key:"svg-1"}],["path",{d:"M9 9l1 0",key:"svg-2"}],["path",{d:"M9 13l6 0",key:"svg-3"}],["path",{d:"M9 17l6 0",key:"svg-4"}]]),Ee=w("file","IconFile",[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z",key:"svg-1"}]]),Ms=w("filter","IconFilter",[["path",{d:"M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z",key:"svg-0"}]]),Ss=w("fingerprint-scan","IconFingerprintScan",[["path",{d:"M9 11a3 3 0 0 1 6 0c0 1.657 .612 3.082 1 4",key:"svg-0"}],["path",{d:"M12 11v1.75c-.001 1.11 .661 2.206 1 3.25",key:"svg-1"}],["path",{d:"M9 14.25c.068 .58 .358 1.186 .5 1.75",key:"svg-2"}],["path",{d:"M4 8v-2a2 2 0 0 1 2 -2h2",key:"svg-3"}],["path",{d:"M4 16v2a2 2 0 0 0 2 2h2",key:"svg-4"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v2",key:"svg-5"}],["path",{d:"M16 20h2a2 2 0 0 0 2 -2v-2",key:"svg-6"}]]),Qe=w("globe","IconGlobe",[["path",{d:"M7 9a4 4 0 1 0 8 0a4 4 0 0 0 -8 0",key:"svg-0"}],["path",{d:"M5.75 15a8.015 8.015 0 1 0 9.25 -13",key:"svg-1"}],["path",{d:"M11 17v4",key:"svg-2"}],["path",{d:"M7 21h8",key:"svg-3"}]]),Ye=w("key","IconKey",[["path",{d:"M16.555 3.843l3.602 3.602a2.877 2.877 0 0 1 0 4.069l-2.643 2.643a2.877 2.877 0 0 1 -4.069 0l-.301 -.301l-6.558 6.558a2 2 0 0 1 -1.239 .578l-.175 .008h-1.172a1 1 0 0 1 -.993 -.883l-.007 -.117v-1.172a2 2 0 0 1 .467 -1.284l.119 -.13l.414 -.414h2v-2h2v-2l2.144 -2.144l-.301 -.301a2.877 2.877 0 0 1 0 -4.069l2.643 -2.643a2.877 2.877 0 0 1 4.069 0z",key:"svg-0"}],["path",{d:"M15 9h.01",key:"svg-1"}]]),X=w("lock","IconLock",[["path",{d:"M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z",key:"svg-0"}],["path",{d:"M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0",key:"svg-1"}],["path",{d:"M8 11v-4a4 4 0 1 1 8 0v4",key:"svg-2"}]]),Ze=w("mail","IconMail",[["path",{d:"M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10z",key:"svg-0"}],["path",{d:"M3 7l9 6l9 -6",key:"svg-1"}]]),de=w("map-pin","IconMapPin",[["path",{d:"M9 11a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-0"}],["path",{d:"M17.657 16.657l-4.243 4.243a2 2 0 0 1 -2.827 0l-4.244 -4.243a8 8 0 1 1 11.314 0z",key:"svg-1"}]]),_s=w("message-chatbot","IconMessageChatbot",[["path",{d:"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12z",key:"svg-0"}],["path",{d:"M9.5 9h.01",key:"svg-1"}],["path",{d:"M14.5 9h.01",key:"svg-2"}],["path",{d:"M9.5 13a3.5 3.5 0 0 0 5 0",key:"svg-3"}]]),Lt=w("message","IconMessage",[["path",{d:"M8 9h8",key:"svg-0"}],["path",{d:"M8 13h6",key:"svg-1"}],["path",{d:"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12z",key:"svg-2"}]]),ze=w("microphone","IconMicrophone",[["path",{d:"M9 2m0 3a3 3 0 0 1 3 -3h0a3 3 0 0 1 3 3v5a3 3 0 0 1 -3 3h0a3 3 0 0 1 -3 -3z",key:"svg-0"}],["path",{d:"M5 10a7 7 0 0 0 14 0",key:"svg-1"}],["path",{d:"M8 21l8 0",key:"svg-2"}],["path",{d:"M12 17l0 4",key:"svg-3"}]]),be=w("network","IconNetwork",[["path",{d:"M6 9a6 6 0 1 0 12 0a6 6 0 0 0 -12 0",key:"svg-0"}],["path",{d:"M12 3c1.333 .333 2 2.333 2 6s-.667 5.667 -2 6",key:"svg-1"}],["path",{d:"M12 3c-1.333 .333 -2 2.333 -2 6s.667 5.667 2 6",key:"svg-2"}],["path",{d:"M6 9h12",key:"svg-3"}],["path",{d:"M3 20h7",key:"svg-4"}],["path",{d:"M14 20h7",key:"svg-5"}],["path",{d:"M10 20a2 2 0 1 0 4 0a2 2 0 0 0 -4 0",key:"svg-6"}],["path",{d:"M12 15v3",key:"svg-7"}]]),Cs=w("package","IconPackage",[["path",{d:"M12 3l8 4.5l0 9l-8 4.5l-8 -4.5l0 -9l8 -4.5",key:"svg-0"}],["path",{d:"M12 12l8 -4.5",key:"svg-1"}],["path",{d:"M12 12l0 9",key:"svg-2"}],["path",{d:"M12 12l-8 -4.5",key:"svg-3"}],["path",{d:"M16 5.25l-8 4.5",key:"svg-4"}]]),Dt=w("photo","IconPhoto",[["path",{d:"M15 8h.01",key:"svg-0"}],["path",{d:"M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12z",key:"svg-1"}],["path",{d:"M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5",key:"svg-2"}],["path",{d:"M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3",key:"svg-3"}]]),Fa=w("plug-connected","IconPlugConnected",[["path",{d:"M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1 -5 -5l1.5 -1.5z",key:"svg-0"}],["path",{d:"M17 12l-5 -5l1.5 -1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5z",key:"svg-1"}],["path",{d:"M3 21l2.5 -2.5",key:"svg-2"}],["path",{d:"M18.5 5.5l2.5 -2.5",key:"svg-3"}],["path",{d:"M10 11l-2 2",key:"svg-4"}],["path",{d:"M13 14l-2 2",key:"svg-5"}]]),qt=w("radar","IconRadar",[["path",{d:"M21 12h-8a1 1 0 1 0 -1 1v8a9 9 0 0 0 9 -9",key:"svg-0"}],["path",{d:"M16 9a5 5 0 1 0 -7 7",key:"svg-1"}],["path",{d:"M20.486 9a9 9 0 1 0 -11.482 11.495",key:"svg-2"}]]),Je=w("refresh","IconRefresh",[["path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",key:"svg-0"}],["path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",key:"svg-1"}]]),Pe=w("robot","IconRobot",[["path",{d:"M6 4m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z",key:"svg-0"}],["path",{d:"M12 2v2",key:"svg-1"}],["path",{d:"M9 12v9",key:"svg-2"}],["path",{d:"M15 12v9",key:"svg-3"}],["path",{d:"M5 16l4 -2",key:"svg-4"}],["path",{d:"M15 14l4 2",key:"svg-5"}],["path",{d:"M9 18h6",key:"svg-6"}],["path",{d:"M10 8v.01",key:"svg-7"}],["path",{d:"M14 8v.01",key:"svg-8"}]]),Ga=w("satellite","IconSatellite",[["path",{d:"M3.707 6.293l2.586 -2.586a1 1 0 0 1 1.414 0l5.586 5.586a1 1 0 0 1 0 1.414l-2.586 2.586a1 1 0 0 1 -1.414 0l-5.586 -5.586a1 1 0 0 1 0 -1.414z",key:"svg-0"}],["path",{d:"M6 10l-3 3l3 3l3 -3",key:"svg-1"}],["path",{d:"M10 6l3 -3l3 3l-3 3",key:"svg-2"}],["path",{d:"M12 12l1.5 1.5",key:"svg-3"}],["path",{d:"M14.5 17a2.5 2.5 0 0 0 2.5 -2.5",key:"svg-4"}],["path",{d:"M15 21a6 6 0 0 0 6 -6",key:"svg-5"}]]),Is=w("school","IconSchool",[["path",{d:"M22 9l-10 -4l-10 4l10 4l10 -4v6",key:"svg-0"}],["path",{d:"M6 10.6v5.4a6 3 0 0 0 12 0v-5.4",key:"svg-1"}]]),js=w("search","IconSearch",[["path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]]),Es=w("server-2","IconServer2",[["path",{d:"M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z",key:"svg-0"}],["path",{d:"M3 12m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z",key:"svg-1"}],["path",{d:"M7 8l0 .01",key:"svg-2"}],["path",{d:"M7 16l0 .01",key:"svg-3"}],["path",{d:"M11 8h6",key:"svg-4"}],["path",{d:"M11 16h6",key:"svg-5"}]]),zs=w("server-bolt","IconServerBolt",[["path",{d:"M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z",key:"svg-0"}],["path",{d:"M15 20h-9a3 3 0 0 1 -3 -3v-2a3 3 0 0 1 3 -3h12",key:"svg-1"}],["path",{d:"M7 8v.01",key:"svg-2"}],["path",{d:"M7 16v.01",key:"svg-3"}],["path",{d:"M20 15l-2 3h3l-2 3",key:"svg-4"}
28]]),ue=w("shield-bolt","IconShieldBolt",[["path",{d:"M13.342 20.566c-.436 .17 -.884 .315 -1.342 .434a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3a12 12 0 0 0 8.5 3a12 12 0 0 1 .117 6.34",key:"svg-0"}],["path",{d:"M19 16l-2 3h4l-2 3",key:"svg-1"}]]),Xe=w("shield-check","IconShieldCheck",[["path",{d:"M11.46 20.846a12 12 0 0 1 -7.96 -14.846a12 12 0 0 0 8.5 -3a12 12 0 0 0 8.5 3a12 12 0 0 1 -.09 7.06",key:"svg-0"}],["path",{d:"M15 19l2 2l4 -4",key:"svg-1"}]]),pa=w("shield-lock","IconShieldLock",[["path",{d:"M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3",key:"svg-0"}],["path",{d:"M12 11m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M12 12l0 2.5",key:"svg-2"}]]),Nt=w("shield-x","IconShieldX",[["path",{d:"M13.252 20.601c-.408 .155 -.826 .288 -1.252 .399a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3a12 12 0 0 0 8.5 3a12 12 0 0 1 -.19 7.357",key:"svg-0"}],["path",{d:"M22 22l-5 -5",key:"svg-1"}],["path",{d:"M17 22l5 -5",key:"svg-2"}]]),Os=w("sparkles","IconSparkles",[["path",{d:"M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2zm0 -12a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2zm-7 12a6 6 0 0 1 6 -6a6 6 0 0 1 -6 -6a6 6 0 0 1 -6 6a6 6 0 0 1 6 6z",key:"svg-0"}]]),Rs=w("test-pipe","IconTestPipe",[["path",{d:"M20 8.04l-12.122 12.124a2.857 2.857 0 1 1 -4.041 -4.04l12.122 -12.124",key:"svg-0"}],["path",{d:"M7 13h8",key:"svg-1"}],["path",{d:"M19 15l1.5 1.6a2 2 0 1 1 -3 0l1.5 -1.6z",key:"svg-2"}],["path",{d:"M15 3l6 6",key:"svg-3"}]]),so=w("timeline-event","IconTimelineEvent",[["path",{d:"M12 20m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-0"}],["path",{d:"M10 20h-6",key:"svg-1"}],["path",{d:"M14 20h6",key:"svg-2"}],["path",{d:"M12 15l-2 -2h-3a1 1 0 0 1 -1 -1v-8a1 1 0 0 1 1 -1h10a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-3l-2 2z",key:"svg-3"}]]),Oe=w("transform","IconTransform",[["path",{d:"M3 6a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-0"}],["path",{d:"M21 11v-3a2 2 0 0 0 -2 -2h-6l3 3m0 -6l-3 3",key:"svg-1"}],["path",{d:"M3 13v3a2 2 0 0 0 2 2h6l-3 -3m0 6l3 -3",key:"svg-2"}],["path",{d:"M15 18a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-3"}]]),Wa=w("upload","IconUpload",[["path",{d:"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2",key:"svg-0"}],["path",{d:"M7 9l5 -5l5 5",key:"svg-1"}],["path",{d:"M12 4l0 12",key:"svg-2"}]]),Re=w("users","IconUsers",[["path",{d:"M9 7m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0",key:"svg-0"}],["path",{d:"M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2",key:"svg-1"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"svg-2"}],["path",{d:"M21 21v-2a4 4 0 0 0 -3 -3.85",key:"svg-3"}]]),ra=w("webhook","IconWebhook",[["path",{d:"M4.876 13.61a4 4 0 1 0 6.124 3.39h6",key:"svg-0"}],["path",{d:"M15.066 20.502a4 4 0 1 0 1.934 -7.502c-.706 0 -1.424 .179 -2 .5l-3 -5.5",key:"svg-1"}],["path",{d:"M16 8a4 4 0 1 0 -8 0c0 1.506 .77 2.818 2 3.5l-3 5.5",key:"svg-2"}]]),Ls=w("world","IconWorld",[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M3.6 9h16.8",key:"svg-1"}],["path",{d:"M3.6 15h16.8",key:"svg-2"}],["path",{d:"M11.5 3a17 17 0 0 0 0 18",key:"svg-3"}],["path",{d:"M12.5 3a17 17 0 0 1 0 18",key:"svg-4"}]]);const Ds="_header_bovhb_1",qs="_headerScrolled_bovhb_18",Ns="_inner_bovhb_27",Bs="_link_bovhb_36",Hs="_subLink_bovhb_62",Fs="_dropdownFooter_bovhb_75",z={header:Ds,headerScrolled:qs,inner:Ns,link:Bs,subLink:Hs,dropdownFooter:Fs},gt="https://app.airpipe.io/register",$a="https://app.airpipe.io/login",Q={target:"_blank",rel:"noopener noreferrer"},Gs=[{icon:Os,title:"Build with AI",description:"Plain English to a live config.",to:"/features/build-with-ai"},{icon:Pe,title:"Agents",description:"A model calling your own interfaces.",to:"/features/agents"},{icon:ee,title:"Databases",description:"Postgres, MySQL, Mongo, more.",to:"/features/databases"},{icon:Ts,title:"Automation",description:"Cron, flow control, durable state.",to:"/features/automation"},{icon:As,title:"Realtime",description:"WebSockets & MQTT that run your logic.",to:"/features/realtime"},{icon:fs,title:"Transforms & flow",description:"Shape, branch, retry, loop.",to:"/features/transforms"},{icon:pa,title:"Auth & access control",description:"JWT, API keys, IP firewall.",to:"/features/auth"},{icon:so,title:"OpenTelemetry tracing",description:"End-to-end request traces.",to:"/features/observability"},{icon:wt,title:"Prometheus metrics",description:"/metrics, auto per route.",to:"/features/observability"},{icon:no,title:"OpenAPI & Swagger",description:"Generated from your config.",to:"/features/observability"},{icon:Rs,title:"API testing",description:"Postman-style client, tests saved & run.",to:"/features/api-testing"},{icon:Fa,title:"MCP server",description:"Any endpoint as MCP tools.",to:"/features/mcp"},{icon:Fa,title:"MCP clients",description:"Claude Code, Cursor, ChatGPT, more.",to:"/mcp"},{icon:Ls,title:"Integrations",description:"Every API â and why there's no catalogue.",to:"/integrations"},{icon:_s,title:"RAG chatbot",description:"On your data, embeddings stay put.",to:"/features/rag"}
28,{icon:zs,title:"Self-hosted",description:"One binary, your infrastructure.",to:"/features/self-hosted"}],Ws=[{icon:Pe,title:"AI agents & MCP",description:"RAG, LLM gateway, MCP servers.",to:"/marketplace/category/ai-and-agents"},{icon:ee,title:"Backend & APIs",description:"REST APIs, multi-tenant SaaS.",to:"/marketplace/category/backend-and-apis"},{icon:ra,title:"Engineering & DevOps",description:"Webhooks, CI, observability.",to:"/marketplace/category/engineering-and-devops"},{icon:pa,title:"Security & Compliance",description:"JWT, GDPR, firewall, audit.",to:"/marketplace/category/security-and-compliance"},{icon:wt,title:"Data & Analytics",description:"Events, digests, pipelines.",to:"/marketplace/category/data-and-analytics"},{icon:we,title:"Finance & Commerce",description:"Stripe, payments, webhooks.",to:"/marketplace/category/finance-and-commerce"}],$s=[{icon:vs,title:"Docs",description:"Guides, reference, concepts.",href:"https://docs.airpipe.io/docs/"},{icon:wt,title:"Limits",description:"Plan allowances, tier by tier.",to:"/limits"},{icon:Is,title:"Tutorials",description:"Build your first API, step by step.",href:"https://docs.airpipe.io/docs/tutorial/setup"},{icon:ao,title:"Discord",description:"Join the community.",href:"https://discord.gg/b8mFtjWXZj"},{icon:oo,title:"YouTube",description:"Demos and walkthroughs.",href:"https://youtube.com/@AirPipeIO"}];function Us(){const e=bt(),[t,{toggle:o,close:n}]=Ge(!1),[s,{toggle:r}]=Ge(!1),[i,{toggle:l}]=Ge(!1),[h,{toggle:u}]=Ge(!1),p=C1(),[m]=yo(),k=m.y>20,A=Gs.map(b=>a.jsx(ye,{className:z.subLink,onClick:()=>{n(),b.to?e(b.to):window.open(b.href,"_blank")},children:a.jsxs(D,{wrap:"nowrap",align:"center",children:[a.jsx(ke,{size:34,variant:"default",radius:"md",children:a.jsx(b.icon,{style:{width:S(22),height:S(22)},color:p.colors.blue[6]})}),a.jsxs("div",{style:{minWidth:0},children:[a.jsx(C,{size:"sm",fw:500,truncate:!0,children:b.title}),a.jsx(C,{size:"xs",c:"dimmed",truncate:!0,children:b.description})]})]})},b.title)),M=Ws.map(b=>a.jsx(ye,{className:z.subLink,onClick:()=>{n(),e(b.to)},children:a.jsxs(D,{wrap:"nowrap",align:"center",children:[a.jsx(ke,{size:34,variant:"default",radius:"md",children:a.jsx(b.icon,{style:{width:S(22),height:S(22)},color:p.colors.blue[6]})}),a.jsxs("div",{style:{minWidth:0},children:[a.jsx(C,{size:"sm",fw:500,truncate:!0,children:b.title}),a.jsx(C,{size:"xs",c:"dimmed",truncate:!0,children:b.description})]})]})},b.title)),P=$s.map(b=>a.jsx(ye,{className:z.subLink,onClick:()=>{n(),b.to?e(b.to):window.open(b.href,"_blank")},children:a.jsxs(D,{wrap:"nowrap",align:"center",children:[a.jsx(ke,{size:34,variant:"default",radius:"md",children:a.jsx(b.icon,{style:{width:S(22),height:S(22)},color:p.colors.blue[6]})}),a.jsxs("div",{style:{minWidth:0},children:[a.jsx(C,{size:"sm",fw:500,truncate:!0,children:b.title}),a.jsx(C,{size:"xs",c:"dimmed",truncate:!0,children:b.description})]})]})},b.title));return a.jsxs(le,{h:S(60),children:[a.jsx("header",{className:fo(z.header,{[z.headerScrolled]:k}),children:a.jsxs("div",{className:z.inner,children:[a.jsx(ia,{style:{cursor:"pointer",width:180,height:35,flex:"0 0 auto"},onClick:()=>e("/"),src:"/ap-horizontal-fullsize-white.png",alt:"Air Pipe",fit:"contain"}),a.jsxs(D,{h:"100%",gap:0,visibleFrom:"sm",children:[a.jsxs(J,{width:620,position:"bottom",radius:"md",shadow:"md",withinPortal:!0,openDelay:60,closeDelay:120,children:[a.jsx(J.Target,{children:a.jsx("a",{href:"#",className:z.link,style:{cursor:"pointer"},onClick:b=>b.preventDefault(),children:a.jsxs(ne,{inline:!0,children:[a.jsx(le,{component:"span",mr:5,children:"Product"}),a.jsx(ve,{style:{width:S(16),height:S(16)},color:p.colors.blue[6]})]})})}),a.jsxs(J.Dropdown,{style:{overflow:"hidden"},children:[a.jsxs(D,{justify:"space-between",px:"md",children:[a.jsx(C,{fw:500,children:"Platform capabilities"}),a.jsx(Yt,{href:"https://docs.airpipe.io/docs/",target:"_blank",fz:"xs",children:"Browse docs"})]}),a.jsx(_e,{my:"sm"}),a.jsx(pe,{cols:2,spacing:0,children:A}),a.jsx("div",{className:z.dropdownFooter,children:a.jsxs(D,{justify:"space-between",children:[a.jsxs("div",{children:[a.jsx(C,{fw:500,fz:"sm",children:"Managed or self-hosted"}),a.jsx(C,{size:"xs",c:"dimmed",children:"Your data, your infrastru
28cture."})]}),a.jsx(F,{variant:"default",onClick:()=>e("/#features"),children:"See it live"})]})})]})]}),a.jsxs(J,{width:620,position:"bottom",radius:"md",shadow:"md",withinPortal:!0,openDelay:60,closeDelay:120,children:[a.jsx(J.Target,{children:a.jsx("a",{href:"#",className:z.link,style:{cursor:"pointer"},onClick:b=>b.preventDefault(),children:a.jsxs(ne,{inline:!0,children:[a.jsx(le,{component:"span",mr:5,children:"Solutions"}),a.jsx(ve,{style:{width:S(16),height:S(16)},color:p.colors.blue[6]})]})})}),a.jsxs(J.Dropdown,{style:{overflow:"hidden"},children:[a.jsxs(D,{justify:"space-between",px:"md",children:[a.jsx(C,{fw:500,children:"Build by use case"}),a.jsx(Yt,{fz:"xs",style:{cursor:"pointer"},onClick:()=>e("/marketplace"),children:"See all"})]}),a.jsx(_e,{my:"sm"}),a.jsx(pe,{cols:2,spacing:0,children:M}),a.jsx("div",{className:z.dropdownFooter,children:a.jsxs(D,{justify:"space-between",children:[a.jsxs("div",{children:[a.jsx(C,{fw:500,fz:"sm",children:"Marketplace"}),a.jsx(C,{size:"xs",c:"dimmed",children:"Fork a ready-made pack, deploy in minutes."})]}),a.jsx(F,{variant:"default",onClick:()=>e("/marketplace"),children:"Browse templates"})]})})]})]}),a.jsx("a",{href:"#",className:z.link,onClick:()=>e("/marketplace"),children:"Marketplace"}),a.jsxs(J,{width:480,position:"bottom",radius:"md",shadow:"md",withinPortal:!0,openDelay:60,closeDelay:120,children:[a.jsx(J.Target,{children:a.jsx("a",{href:"#",className:z.link,style:{cursor:"pointer"},onClick:b=>b.preventDefault(),children:a.jsxs(ne,{inline:!0,children:[a.jsx(le,{component:"span",mr:5,children:"Resources"}),a.jsx(ve,{style:{width:S(16),height:S(16)},color:p.colors.blue[6]})]})})}),a.jsxs(J.Dropdown,{style:{overflow:"hidden"},children:[a.jsx(D,{justify:"space-between",px:"md",children:a.jsx(C,{fw:500,children:"Learn & connect"})}),a.jsx(_e,{my:"sm"}),a.jsx(pe,{cols:2,spacing:0,children:P})]})]}),a.jsx("a",{href:"#",className:z.link,onClick:()=>e("/blog"),children:"Blog"}),a.jsx("a",{href:"#",className:z.link,onClick:()=>e("/pricing"),children:"Pricing"})]}),a.jsxs(D,{visibleFrom:"sm",gap:"xs",children:[a.jsx(F,{variant:"subtle",size:"sm",component:"a",href:$a,...Q,children:"Log in"}),a.jsx(F,{variant:"gradient",gradient:{from:"blue",to:"cyan",deg:135},size:"sm",className:"btn-cta",component:"a",href:gt,...Q,children:"Sign up"})]}),a.jsx(vo,{opened:t,onClick:o,hiddenFrom:"sm"})]})}),a.jsx(bo,{opened:t,onClose:n,size:"100%",padding:"md",title:"Navigation",hiddenFrom:"sm",zIndex:1e6,children:a.jsxs(wo,{h:`calc(100vh - ${S(80)})`,mx:"-md",children:[a.jsx(_e,{my:"sm"}),a.jsx(ye,{className:z.link,onClick:r,children:a.jsxs(ne,{inline:!0,children:[a.jsx(le,{component:"span",mr:5,children:"Product"}),a.jsx(ve,{style:{width:S(16),height:S(16)},color:p.colors.blue[6]})]})}),a.jsx(Tt,{in:s,children:A}),a.jsx(ye,{className:z.link,onClick:l,children:a.jsxs(ne,{inline:!0,children:[a.jsx(le,{component:"span",mr:5,children:"Solutions"}),a.jsx(ve,{style:{width:S(16),height:S(16)},color:p.colors.blue[6]})]})}),a.jsx(Tt,{in:i,children:M}),a.jsx("a",{href:"#",className:z.link,onClick:()=>{n(),e("/marketplace")},children:"Marketplace"}),a.jsx(ye,{className:z.link,onClick:u,children:a.jsxs(ne,{inline:!0,children:[a.jsx(le,{component:"span",mr:5,children:"Resources"}),a.jsx(ve,{style:{width:S(16),height:S(16)},color:p.colors.blue[6]})]})}),a.jsx(Tt,{in:h,children:P}),a.jsx("a",{href:"#",className:z.link,onClick:()=>{n(),e("/blog")},children:"Blog"}),a.jsx("a",{href:"#",className:z.link,onClick:()=>{n(),e("/pricing")},children:"Pricing"}),a.jsx("a",{href:"#",className:z.link,onClick:()=>{n(),e("/contact")},children:"Contact Us"}),a.jsx(_e,{my:"sm"}),a.jsxs(D,{justify:"center",grow:!0,pb:"xl",px:"md",children:[a.jsx(F,{variant:"subtle",component:"a",href:$a,...Q,children:"Log in"}),a.jsx(F,{variant:"gradient",gradient:{from:"blue",to:"cyan",deg:135},className:"btn-cta",component:"a",href:gt,...Q,children:"Sign up"})]})]})})]})}function et({size:e=185,radius:t=2.5,...o}){return a.jsxs("svg",{"aria-hidden":!0,xmlns:"http://www.w3.org/2000/svg",fill:"currentColor",viewBox:"0 0 185 185",width:e,height:e,...o,children:[a.jsx("rect",{width:"5",height:"5",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"180",rx:t}),a.jsx("rect",{width:"5",height:"5",y:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"60",y:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"120",y:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"20",y:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"80",y:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"140",y:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"40",y:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"100",y:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"160",y:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"180",y:"20",rx:t}),a.jsx("rect",{width:"5",height:"5",y:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"60",y:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"120",y:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"20",y:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"80",y:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"140",y:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"40",y:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"100",y:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"160",y:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"180",y:"40",rx:t}),a.jsx("rect",{width:"5",height:"5",y:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"60",y:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"120",y:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"20",y:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"80",y:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"140",y:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"40",y:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"100",y:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"160",y:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"180",y:"60",rx:t}),a.jsx("rect",{width:"5",height:"5",y:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"60",y:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"120",y:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"20",y:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"80",y:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"140",y:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"40",y:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"100",y:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"160",y:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"180",y:"80",rx:t}),a.jsx("rect",{width:"5",height:"5",y:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"60",y:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"120",y:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"20",y:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"80",y:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"140",y:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"40",y:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"100",y:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"160",y:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"180",y:"100",rx:t}),a.jsx("rect",{width:"5",height:"5",y:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"60",y:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"120",y:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"20",y:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"80",y:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"140",y:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"40",y:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"100",y:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"160",y:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"180",y:"120",rx:t}),a.jsx("rect",{width:"5",height:"5",y:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"60",y:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"120",y:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"20",y:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"80",y:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"140",y:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"40",y:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"100",y:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"160",y:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"180",y:"140",rx:t}),a.jsx("rect",{width:"5",height:"5",y:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"60",y:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"120",y:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"20",y:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"80",y:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"140",y:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"40",y:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"100",y:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"160",y:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"180",y:"160",rx:t}),a.jsx("rect",{width:"5",height:"5",y:"180",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"60",y:"180",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"120",y:"180",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"20",y:"180",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"80",y:"180",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"140",y:"180",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"40",y:"180",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"100",y:"180",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"160",y:"180",rx:t}),a.jsx("rect",{width:"5",height:"5",x:"180",y:"180",rx:t})]})}const Vs="_wrapper_112wu_1",Ks="_inner_112wu_12",Qs="_dots_112wu_17",Ys="_dotsLeft_112wu_26",Zs="_title_112wu_35",Js="_softBreak_112wu_59",Xs="_highlight_112wu_65",er="_description_112wu_69",tr="_subproof_112wu_86",ar="_controls_112wu_93",or="_control_112wu_93",O={wrapper:Vs,inner:Ks,dots:Qs,dotsLeft:Ys,title:Zs,softBreak:Js,highlight:Xs,description:er,subproof:tr,controls:ar,control:or},nr=[{id:"build",title:"Build it in **minutes**",desc:"Describe what you want in plain English and Air Pipe writes the config. Or write the YAML yourself, or fork a pack from the marketplace. There's no project to scaffold and no boilerplate to maintain.",image:"/images/2A.svg",points:["**Build with AI** â describe it in a prompt, get a config validated against the live schema","**Readable YAML** â it's yours, and you can edit it by hand whenever you like","**Marketplace packs** â fork a working starter and deploy it"]},{id:"automate",title:"**Workflow automation**, built in",desc:"Schedules, webhooks and multi-step flows are the same config as your APIs â not a separate product with separate pricing.",image:"/images/1.svg",points:["**Run on a
28schedule** â or trigger it from a webhook","**Flow control** â conditions, transforms, asserts and state between steps","**Every run traced** â see what actually happened, not just that it failed"]},{id:"realtime",title:"Realtime that **runs your logic**",desc:"WebSockets and MQTT are first-class â pub/sub with presence, history and retained messages. The difference from a relay: the same connection runs your pipeline on every message, and your website's users connect with their own JWT â or fully open with no credential â no org key in the browser, on either transport.",image:"/images/ap-realtime.svg",points:["**WebSockets & MQTT** â pub/sub, presence, history, retained, QoS","**Logic on the message** â validate, enrich, store or call an API before it fans out","**Browser end-users** â one vendor for transport, per-user auth and compute"]},{id:"secure",title:"**Secure** by default",desc:"Authentication, access control and validation are part of the config, not something you bolt on afterwards.",image:"/images/ap-secure.svg",points:["**Auth** â JWT validation, API keys and role-based access control","**Validation** â assert on any input before it reaches your data","**Network policy** â control what each interface is allowed to reach"]},{id:"run",title:"Fast, and **yours to run**",desc:"Built in Rust and shipped as a single binary. Run it on our cloud or your own infrastructure â the same config either way.",image:"/images/ap-perf.svg",points:["**Managed or self-hosted** â VM, container, or let us host it","**Single binary** â no sidecars, no agents to babysit","**Priced per request** â not per task, per execution, or per AI credit"]}],sr="_inner_s9n30_1",rr="_contentLeft_s9n30_8",ir="_contentRight_s9n30_18",lr="_title_s9n30_34",cr="_desc_s9n30_35",hr="_control_s9n30_54",dr="_art_s9n30_29",ur="_highlight_s9n30_79",qe={inner:sr,contentLeft:rr,contentRight:ir,title:lr,desc:cr,control:hr,art:dr,highlight:ur};function pr(e){return e.split(/\*\*(.+?)\*\*/g).map((t,o)=>o%2===1?a.jsx("span",{className:qe.highlight,children:t},o):t)}function gr(e){return e.split(/\*\*(.+?)\*\*/g).map((t,o)=>o%2===1?a.jsx("b",{children:t},o):t)}function mr({feature:e,index:t}){const o=t%2===1,n=a.jsxs(Mt.Col,{span:{base:12,sm:7},order:{base:2,sm:o?2:1},children:[a.jsx(te,{order:2,className:qe.title,id:`feature-${e.id}`,children:pr(e.title)}),a.jsx(C,{c:"dimmed",mt:"md",size:"lg",className:qe.desc,children:e.desc}),a.jsx(wa,{mt:30,spacing:"sm",size:"sm",icon:a.jsx(ke,{size:20,radius:"xl",children:a.jsx(Ps,{style:{width:S(12),height:S(12)},stroke:1.5})}),children:e.points.map((r,i)=>a.jsx(wa.Item,{children:gr(r)},i))})]}),s=a.jsx(Mt.Col,{span:{base:12,sm:5},order:{base:1,sm:o?1:2},children:a.jsx(ia,{src:e.image,alt:"","aria-hidden":"true",loading:"lazy",className:qe.art})});return a.jsx(Mt,{gutter:{base:16,sm:32},align:"center",py:{base:24,sm:48},children:o?a.jsxs(a.Fragment,{children:[s,n]}):a.jsxs(a.Fragment,{children:[n,s]})})}function yr(){return a.jsx(K,{className:qe.wrapper,size:"lg",id:"features",style:{scrollMarginTop:"80px"},children:a.jsx(I1,{gap:0,children:nr.map((e,t)=>a.jsx(mr,{feature:e,index:t},e.id))})})}const kt=[{value:"ai-and-agents",label:"AI & Agents",color:"violet",hex:"#7c3aed"},{value:"sales-and-crm",label:"Sales & CRM",color:"blue",hex:"#2563eb"},{value:"marketing",label:"Marketing",color:"pink",hex:"#db2777"},{value:"customer-support",label:"Customer Support",color:"teal",hex:"#0d9488"},{value:"operations",label:"Operations",color:"orange",hex:"#d97706"},{value:"engineering-and-devops",label:"Engineering & DevOps",color:"green",hex:"#059669"},{value:"data-and-analytics",label:"Data & Analytics",color:"indigo",hex:"#4f46e5"},{value:"finance-and-commerce",label:"Finance & Commerce",color:"lime",hex:"#65a30d"},{value:"security-and-compliance",label:"Security & Compliance",color:"red",hex:"#dc2626"},{value:"backend-and-apis",label:"Backend & APIs",color:"yellow",hex:"#ca8a04"},{value:"productivity",label:"Productivity",color:"grape",hex:"#9333ea"},{value:"utilities",label:"Utilities",color:"gray",hex:"#6b7280"}],fr=kt.map(({value:e,label:t})=>({value:e,label:t}));Object.fromEntries(kt.map(({value:e,color:t})=>[e,t]));const b3=Object.fromEntries(kt.map(({label:e,hex:t})=>[e,t])),w3=["All",...kt.map(({label:e})=>e)],ga=[{slug:"build-with-ai",path:"/features/build-with-ai",tagline:"Plain English to a live, validated config.",seoTitle:"Build APIs with AI â describe it in plain English | Air Pipe",seoDescription:"Describe an API in plain English and Air Pipe writes a validated, deployable config â grounded in your database schema and real marketplace packs. Start free.",eyebrow:"Build with AI",h1:"Describe it in plain English. Ship a real API.",lead:"Tell Air Pipe what you want in plain language and it writes the config â validated against the live schema, grounded in real marketplace patterns, ready to deploy. The
28n edit it by hand or visually whenever you like.",sections:[{heading:"From a prompt to a deployable config",body:"Air Pipe's AI turns a sentence into a working configuration: interfaces, actions, database queries, auth and assertions. It retrieves over the marketplace and the config schema, so the output uses real patterns â not hallucinated fields.",points:["Schema validation with auto-repair before you ever deploy","Grounded in your database schema and published packs","Edit the result as readable YAML or in the visual editor"]},{heading:"No black boxes",body:"Unlike a chat that returns opaque automation, Air Pipe returns config you own and can read. Every generated endpoint still ships tracing, metrics and OpenAPI docs automatically â so you can see exactly what it does the moment it runs."},{heading:"Three ways to build, one runtime",body:"Prompt it, write the config by hand, or fork a marketplace pack. All three produce the same declarative config the engine runs â so you're never locked into one authoring style."}],faq:[{q:"Do I have to keep using AI to maintain the config?",a:"No. The AI writes a config, but the config is the product â readable YAML you own. Edit it by hand, in the visual editor, or ask for another pass. Nothing is locked behind the prompt."},{q:"How does Air Pipe avoid hallucinating config fields?",a:"Generation is grounded in the live config schema and published marketplace packs, and the result is validated with auto-repair before you deploy. Invalid fields are caught rather than shipped."},{q:"Can it see my database schema?",a:"Yes â generation can be grounded in your database schema, so the queries it writes reference tables and columns that actually exist."}],docsUrl:"https://docs.airpipe.io/docs/features/build-with-ai"},{slug:"observability",path:"/features/observability",tagline:"OpenTelemetry, Prometheus, OpenAPI.",seoTitle:"OpenAPI, Metrics & OpenTelemetry from Config | Air Pipe",seoDescription:"Every Air Pipe endpoint ships OpenTelemetry traces, Prometheus metrics and OpenAPI docs automatically â no annotations, no agents, no instrumentation code.",eyebrow:"Observability",h1:"Every endpoint is observable the moment it ships.",lead:"Set one env var and every request becomes an end-to-end trace. Metrics and API docs generate themselves. No annotations, no instrumentation code, no separate agents to run.",sections:[{heading:"Distributed tracing, zero code",body:"Air Pipe emits OpenTelemetry (OTLP) traces for every request, interface, action and lookup, with W3C trace-context propagation. Point it at Jaeger, Grafana Tempo, Honeycomb or Datadog and see the whole call graph.",points:["Spans for each request, action and database call","OTLP/HTTP export to any OpenTelemetry backend","Trace-context propagation across outbound calls"]},{heading:"Prometheus metrics, labelled sanely",body:"A /metrics endpoint is exposed automatically, labelled per interface and action â so you get request rates, latencies and error counts without cardinality blow-ups from IDs in paths. Emit your own business metrics from config too."},{heading:"OpenAPI & Swagger, generated from config",body:"Set docs: true and Air Pipe renders an OpenAPI 3.0 spec and Swagger UI from your assertions and metadata. Your docs can't drift from your API because they're generated from the same config."}],faq:[{q:"How do I enable OpenAPI docs?",a:"Set docs: true on the config. Air Pipe generates an OpenAPI 3.0 spec and Swagger UI from your interfaces, assertions and metadata â there are no annotations to write and the docs can't drift from the API, because both come from the same config."},{q:"Are traces automatic?",a:"Yes. Air Pipe emits OpenTelemetry traces for every request, interface, action and lookup, with W3C trace-context propagation, once you point it at an OTLP endpoint. You don't add instrumentation code."},{q:"Which observability backends work?",a:"Any OpenTelemetry-compatible backend via OTLP/HTTP â Jaeger, Grafana Tempo, Honeycomb and Datadog among them â and any Prometheus-compatible scraper for the metrics endpoint."},{q:"Do I need a separate agent or collector?",a:"No. Export is built into the runtime, so there's no sidecar or collector to deploy alongside it â though you can send to a collector if your stack already has one."}],docsUrl:"https://docs.airpipe.io/docs/otel-tracing"},{slug:"mcp",path:"/features/mcp",tagline:"Any endpoint as secure MCP tools.",seoTitle:"MCP Server for Your APIs, Data and Agents | Air Pipe",seoDescription:"Turn any Air Pipe interface into a secure Model Context Protocol tool for Claude, Cursor and other agents â reusing the same auth as a normal route. Start free.",eyebrow:"MCP server",h1:"Turn your backend into secure tools for AI agents.",lead:"Add an mcp block and any interface becomes a Model Context Protocol tool that Claude, Cursor and other agents can call â with the same authentication and validation as a normal HTTP route.",sections:[{heading:"One config, an API and an agent tool",body:"The interface you already built to serve HTTP can be exposed as an MCP tool at the same time. No second implementation, no separate tool server â the engine handles the MCP protocol for you.",points:["Works with Claude Desktop, Claude Code, Cursor and any MCP client","Reuses your per-request JWT / API-key auth","Same assertions and transforms guard agent calls"]},{heading:"Name the server, not just the tools",body:"Declare your server's title and description alongside the tools, and every client and registry reads them off the MCP handshake. Declare more than one and a single deployment publishes several endpoints, each with its own identity and its own subset of tools.",points:["Listing title and description come from the same config as the tools","One identity covers tools spread across many configs","Split customer-facing and internal tools onto separate MCP endpoints"]},{heading:"Safe by construction",body:"Agents only get what you declare. Your assertions, auth and network policy apply to MCP calls exactly as they do to HTTP â so an agent can't reach anything a normal client couldn't."}],faq:[{q:"What is MCP?",a:"The Model Context Protocol is an open standard for giving AI clients callable tools. An MCP tool is something an agent can invoke â reading a row, kicking off a job â rather than text it has to guess from."},{q:"How does auth work for MCP tools?",a:"Exactly as it does for HTTP. An MCP-exposed interface reuses the same per-request JWT or API-key checks, assertions and network policy, so an agent can't reach anything a normal client couldn't."},{q:"Which MCP clients are supported?",a:"Any MCP client â Claude Desktop, Claude Code and Cursor among them. Air Pipe implements the protocol, so the client is your choice."},{q:"Can I control how my server appears in a client or registry?",a:"Yes. Your config declares the server's title and instructions, and Air Pipe returns them on the MCP handshake â the only place registries such as mcp.so, Glama, Smithery and PulseMCP can read a remote server's listing description from. You can declare several named servers too, so one deployment publishes more than one endpoint, each with its own identity and tools."},{q:"Is this the same as managing Air Pipe from an AI client?",a:"No, and it's worth separating them. This page is about exposing your own interfaces as tools an agent can call. Air Pipe also has a management MCP for driving the platform itself from an AI client â a different thing in the other direction."}],docsUrl:"https://docs.airpipe.io/docs/configuration/mcp-tools"},{slug:"databases",path:"/features/databases",tagline:"Postgres, MySQL, SQL Server, Mongo.",seoTitle:"Instant REST API on Any Database â No ORM | Air Pipe",seoDescription:"Point Air Pipe at PostgreSQL, MySQL, SQL Server, SQLite or MongoDB and get a secured HTTP API â CRUD, queries and auth as readable config. No ORM needed.",eyebrow:"Databases",h1:"Point it at your database. Get an API.",lead:"Air Pipe speaks to relational and document databases natively. Write a query, add assertions and auth, and
28you have a production endpoint â no ORM, no Mongoose, no backend boilerplate.",sections:[{heading:"Relational and document, first-class",body:"PostgreSQL, MySQL/MariaDB, SQL Server and SQLite for relational; MongoDB for documents, including aggregation pipelines and vector search. Your data stays where it is â Air Pipe connects to it.",points:["SQL CRUD and parameterised queries as config","Mongo document operations and aggregation","pgvector and Atlas Vector Search for RAG"]},{heading:"No ORM, no glue code",body:"There's no model layer to maintain and keep in sync. The query is the source of truth; assertions validate input; transforms shape output. That's the whole backend."},{heading:"Secured and observable out of the box",body:"Every database-backed endpoint gets auth, validation, tracing, metrics and OpenAPI docs automatically â the same as any other Air Pipe interface."}],faq:[{q:"Which databases does Air Pipe support?",a:"PostgreSQL, MySQL/MariaDB, SQL Server and SQLite for relational work, and MongoDB for documents â including aggregation pipelines and vector search. They stay where they are; Air Pipe connects to them."},{q:"Do I need an ORM?",a:"No. You write the query you want in config, with parameters and assertions around it. There's no model layer to define and no migration framework to adopt."},{q:"Can Air Pipe connect to a database on my own network?",a:"Yes. Self-host the binary alongside the database and the connection never leaves your network â the config is identical to the managed one."},{q:"Is it safe against SQL injection?",a:"Queries take bound parameters rather than string-concatenated input, and you can assert on any input before it reaches the query."}],docsUrl:"https://docs.airpipe.io/docs/features/databases"},{slug:"auth",path:"/features/auth",tagline:"JWT, API keys, IP firewall.",seoTitle:"API Auth and Access Control as Config | Air Pipe · JWT",seoDescription:"Validate JWTs from Auth0, Clerk, Cognito, Firebase or Okta, add API keys, and apply per-route IP, geo and rate-limit rules â all as config. No auth service.",eyebrow:"Auth & access control",h1:"Auth and a firewall, without a separate service.",lead:"Validate JWTs against any provider, gate routes with API keys, and add a WAF-style network policy â IP rules, geo-blocking and rate limits â declaratively, on any endpoint.",sections:[{heading:"JWT verification against any provider",body:"Verify RS256/ES256/HS256 tokens against JWKS from Auth0, Clerk, AWS Cognito, Firebase or Okta â key rotation handled for you â or against static keys. One assertion, no auth microservice to build.",points:["JWKS with automatic key rotation","API-key auth for multi-tenant access","HMAC signature checks for Stripe / GitHub webhooks"]},{heading:"A network firewall on any route",body:"Declare a network policy that runs before any action: IP allow/deny (CIDR + IPv6), proxy-aware client-IP resolution, per-IP rate limiting and GeoIP/ASN blocking â in enforce or monitor mode."},{heading:"Governed, not bolted on",body:"Because access control lives in the same config as the endpoint, it's versioned, reviewable and deployed together â not scattered across a gateway, a sidecar and a separate auth service."}],faq:[{q:"Which identity providers can Air Pipe validate tokens from?",a:"Any provider that publishes JWKS â Auth0, Clerk, AWS Cognito, Firebase and Okta among them â using RS256, ES256 or HS256, with key rotation handled for you. Static keys work too."},{q:"Do I need a separate auth service or gateway?",a:"No. Token validation, API keys and network policy are assertions in the same config as the endpoint, so they're versioned and deployed with it rather than scattered across a gateway and a sidecar."},{q:"Can I rate-limit or geo-block a single route?",a:"Yes. A network policy runs before any action on that interface and can do IP allow/deny with CIDR and IPv6, per-IP rate limiting, and GeoIP or ASN blocking â in enforce or monitor mode."},{q:"Can I verify Stripe or GitHub webhook signatures?",a:"Yes â HMAC signature checks are assertions, so a webhook endpoint can reject anything that isn't genuinely from the sender."}],docsUrl:"https://docs.airpipe.io/docs/configuration/access-control"},{slug:"automation",path:"/features/automation",tagline:"Cron, flow control, durable state.",seoTitle:"Cron, Flow Control & Durable State as YAML | Air Pipe",seoDescription:"Cron schedules, branching, retries and durable state â as declarative YAML that ships OpenAPI, metrics and traces like every other endpoint. Start free.",eyebrow:"Automation",h1:"Automation you can run as a real backend.",lead:"Schedules, webhooks and multi-step flows share one declarative model with your database APIs. You're not bolting a second product onto a hand-rolled service, and you're not stuck in a canvas nobody can review in a pull request.",sections:[{heading:"Cron and HTTP, the same interface",body:"Any interface can run on a timezone-aware cron schedule instead of â or as well as â serving HTTP. Digests, polls and syncs are the same config as the endpoint next to them, with retries and backoff built in.",points:["Timezone-aware cron, with retry and exponential backoff","The same interface can serve HTTP, a webhook and a schedule","Durable API Polling and Daily Database Digest Email packs show the shape"]},{heading:"Branch, retry, delay, recover",body:"Flow control is declarative. Gate a step on whether earlier ones succeeded, failed or merely finished; branch on an assertion; pace work with a delay action; and proceed once a quorum of sources come back rather than waiting on all of them.",points:["run_when_succeeded, run_when_failed, run_when_finished","run_on_assertion for branching, at_least for quorum","Throttle and pace with the delay action; try/catch/finally recovery"]},{heading:"Cursors, dedupe and counters that survive",body:"Durable key/value state means real automation rather than
28in-memory demos. Keep a polling cursor, an idempotency key or a seen-set between runs, and read it inline in the config.",points:["get, set, advance and seen for cursors and dedupe","Read state inline as a|state::key|","Poll only what's new instead of reprocessing the batch"]},{heading:"Reach the rest of your stack",body:"Automation is only useful if it can touch things. Query your databases, call any HTTP API, run a command, send email over SMTP, and use Google and AWS cloud actions â then reshape what comes back with ordered transforms before the next step.",points:["SMTP email, HTTP, commands, databases and cloud inputs","Ordered post_transforms â extract, filter, group and more","Assert on any result before it reaches the next step"]},{heading:"Every scheduled run is traced",body:"A nightly job that fails should tell you which step failed, not just show a red badge. Scheduled runs emit the same OpenTelemetry traces and Prometheus metrics as any request, so automation is as observable as the rest of your backend."}],faq:[{q:"Can an Air Pipe interface run on a schedule?",a:"Yes. Any interface can run on a timezone-aware cron schedule, with retries and exponential backoff, using the same config that defines your HTTP endpoints. Scheduling isn't a separate product or a separate price."},{q:"How does flow control work without a canvas?",a:"It's declarative. Steps gate on whether earlier ones succeeded, failed or finished; run_on_assertion branches on a condition; a delay action paces or throttles work; and at_least lets you proceed once a quorum of sources succeed rather than blocking on all of them."},{q:"Does state survive between runs?",a:"Yes. Durable key/value state â get, set, advance and seen â persists across runs, which is what makes polling cursors, idempotency keys and dedupe sets work. You read it inline in the config as a|state::key|."},{q:"Can automations send email?",a:"Yes, over SMTP with any relay, or through an HTTP provider such as Resend. It's an action like any other, so it's traced like any other."},{q:"How is this different from a workflow canvas?",a:"The artifact. A canvas produces a diagram; Air Pipe produces a config that is also a deployable service â with auth, OpenAPI docs, metrics and traces â that you can diff and review in a pull request. The automation and the API are the same thing."}],docsUrl:"https://docs.airpipe.io/docs/configuration/scheduling"},{slug:"transforms",path:"/features/transforms",tagline:"Extract, filter, aggregate, hash â no code.",seoTitle:"Transform & Reshape API Data as Config â No Code | Air Pipe",seoDescription:"Reshape any action's data with an ordered post_transforms pipeline â extract, rename, filter, aggregate, hash, encrypt, sign JWTs â declaratively, with no mapping code.",eyebrow:"Transforms & flow",h1:"Reshape data in the pipeline â no glue code.",lead:"Every action can reshape what it returns with an ordered post_transforms pipeline â extract, rename, filter, aggregate, hash, encrypt â declaratively, before the data reaches the next step or the client. No mapping layer, no function in the middle to maintain.",sections:[{heading:"An ordered pipeline, not a mapping layer",body:"post_transforms is an ordered list of functions that run in sequence on an action's result â each step's output feeds the next. Pull a nested value out, keep only the fields you want, filter rows on a condition, group and aggregate â all as readable config you can review in a pull request.",points:["extract_value / extract_with_jq â pull out a path or reshape with jq","keep_attributes, rename_keys, remove_keys â shape the object","filter, group_by, math â select and aggregate rows"]},{heading:"Enrich and secure inline",body:"Transforms aren't only for shaping. The same pipeline can hash or encrypt a field, generate a password, or sign a JWT â so sensitive data is protected before it's ever stored or returned, without a separate service in the path.",points:["encrypt_value / decrypt_value and hashing for sensitive fields","generate_password and add_jwt for auth flows","Runs server-side, in the same config as the endpoint"]},{heading:"Composes with flow control",body:"Transforms shape the data; flow control decides what runs. Branch on an assertion, gate a step on whether earlier ones succeeded, retry with backoff, and keep durable state between runs â the automation those transforms feed into. Together they're a full pipeline in one declarative config."},{heading:"Reviewable, traced, no code",body:"Because a transform is config rather than code, it's diffable in a pull request and it ships the same OpenTelemetry traces and Prometheus metrics as everything else â so you can see exactly what each step did to the data, rather than guessing inside a black-box mapping function."}],faq:[{q:"What is a post_transforms block?",a:"An ordered list of transform functions attached to an action. Each runs in sequence on the action's result â extract, rename, filter, aggregate, hash, encrypt â so you reshape data without writing mapping code, and the output of one step feeds the next."},{q:"Can I use jq to reshape data?",a:"Yes. extract_with_jq reshapes with a jq expression, and extract_value pulls a value out by path. Alongside them are keep_attributes, rename_keys, remove_keys, filter, group_by and math for the common cases, so you rarely need jq at all."},{q:"Can transforms encrypt or hash data?",a:"Yes. encrypt_value / decrypt_value, hashing, generate_password and add_jwt run inside the same pipeline, so a sensitive field can be protected before it's stored or returned â no separate step or service in the path."},{q:"How is this different from flow control?",a:"Transforms reshape the data an action returns; flow control â branching, retries, gating and durable state â decides which steps run and when. They're separate blocks in the same config and compose together. The Automation page covers the flow-control side."}],docsUrl:"https://docs.airpipe.io/docs/features/transforms"},{slug:"realtime",path:"/features/realtime",tagline:"WebSockets & MQTT that run your logic.",seoTitle:"Realtime APIs â WebSockets & MQTT That Run Your Logic | Air Pipe",seoDescription:"Add realtime with WebSockets and MQTT â pub/sub, presence, history and retained messages â and run your own pipeline on every message. One vendor, managed or self-hosted.",eyebrow:"Realtime",h1:"Realtime that runs your logic on the message.",lead:"WebSockets and MQTT are first-class transports in Air Pipe â pub/sub with wildcards, presence, history-rewind and retained messages, on the same config that already serves your HTTP APIs. The difference from a realtime relay: the same connection can run your pipeline on every message â validate it, enrich it, write it to a database, call an API â and gate channels with your own auth.",sections:[{heading:"WebSockets and MQTT, both first-class",body:"One product speaks both. Browsers and apps connect over WebSockets; devices and IoT fleets connect over MQTT with real broker semantics â wildcards, retained messages, persistent sessions and QoS 0/1/2. Both run on one in-process broker per node, so you're not operating a separate message bus.",points:["WebSocket channel API â subscribe, publish, wildcards, retained","Full MQTT broker per node â sessions, QoS 0/1/2, retained","Global reach â nodes are geo-routed and fan out across a mesh"]},{heading:"Pub/sub with presence, history and retain",body:"The WebSocket channel API has the features you'd otherwise buy a dedicated realtime service for. Presence tracks who's on a channel with join/leave events and a cross-node member list. History lets a subscriber rewind the last N messages on connect. Retained hands every new subscriber the last value immediately. MQTT reaches the same delivery guarantees the native broker way â persistent sessions, QoS 1/2 and retained messages.",points:["Presence â enter/leave events and a live member list","History-rewind â replay the last N messages on subscribe","Retained â last value delivered on (re)subscribe, cross-node"]},{heading:"Run your logic on every message",body:"This is the part a relay can't do. A realtime service moves bytes between clients; Air Pipe can run your config on each message â assert on it, transform it, write it to Postgres or MongoDB, call an upstream API â before it fans out. Presence and history are queryable in your pipeline too, so a join or a replayed event can drive real backend logic, not just a client-side update."},{heading:"Realtime for your website's users â no org key in the browser",body:"Your app's end-users connect without your org API key. A browser opens a WebSocket with ?token=<jwt>, verified against your JWKS, a shared secret, or a token Air Pipe mints for you â then channels are gated by the user's claims with your pipeline logic as the ACL. Or make an interface public and connections need no credential at all. MQTT works the same way â anonymous/public or org-authenticated â so the open model spans both transports, and it's multi-tenant-safe: anonymous only reaches interfaces you mark public.",points:["WebSocket end-users bring their own JWT via ?token= â or a public interface needs no credential","Full auth ladder: open, Air Pipe-issued, shared-secret (HS256), or your JWKS (RS256/ES256)","MQTT too: anonymous/public interfaces, multi-tenant-safe; no org key in the browser"]},{heading:"One vendor, managed or self-hosted",body:"Transport, per-user auth, the compute that runs on each message, and billing are one product with one bill â not a relay plus your own backend plus the glue between them. Run it on our managed cloud or self-host the same single binary;
28 realtime runs on nothing-shared infrastructure either way, with no external broker or Redis to operate."}],faq:[{q:"Does Air Pipe support both WebSockets and MQTT?",a:"Yes â both are first-class transports on the same platform. Browsers and apps typically use the WebSocket channel API; devices and IoT fleets use MQTT with full broker semantics (wildcards, retained messages, persistent sessions and QoS 0/1/2). Both run on one in-process broker per node, so there's no separate message bus to operate."},{q:"How is this different from Ably or Pusher?",a:"On the realtime fundamentals â pub/sub, presence, history, retained messages, delivery and global reach â Air Pipe is at parity. The difference is what happens to a message: a relay moves it between clients, while Air Pipe can run your config on it â validate, enrich, write to a database, call an API â and use your own logic as the channel ACL. It's transport, per-user auth, compute and billing in one vendor rather than a relay you wire your own backend behind."},{q:"Can my website's users connect without an API key?",a:"Yes â on both transports. Over WebSockets, browser end-users connect with their own JWT via ?token=, which Air Pipe verifies against your JWKS, a shared secret, or a token it mints for you, then gates channels by the user's claims â no org key in the browser. Or go fully open: a public interface accepts connections with no credential at all. MQTT supports the same open/anonymous model on public interfaces (no password). Public access is multi-tenant-safe â anonymous connections reach only the interfaces you mark public, per-org limits still bound them, and a private topic is never exposed."},{q:"What does ârun your logic on the messageâ mean?",a:"The same connection that carries realtime traffic can run an Air Pipe pipeline on each message before it fans out â asserting on it, transforming it, writing it to Postgres or MongoDB, or calling an upstream API. Presence and replayed history events are available to that pipeline too, so realtime events can drive real backend logic rather than only client-side updates."},{q:"Can I self-host realtime?",a:"Yes. WebSockets and MQTT run on the same single self-hosted binary as the managed cloud, on nothing-shared infrastructure â there's no external broker or Redis to run alongside it. Self-hosted realtime connections aren't billed; managed connections draw request units for connection time and throughput."}]},{slug:"rag",path:"/features/rag",tagline:"On your database, embeddings stay put.",seoTitle:"RAG Chatbot on Postgres or MongoDB Atlas | Air Pipe",seoDescription:"Ship a retrieval-augmented chatbot on Postgres + pgvector or MongoDB Atlas Vector Search. Ingest, chat and history endpoints â managed or self-hosted.",eyebrow:"RAG",h1:"Ship a RAG chatbot on your database â embeddings stay yours.",lead:"Retrieval-augmented generation as ordinary endpoints on a database you already run. Ingest your documents, store the embeddings next to them, and answer questions from your own data â with no third-party vector store in the middle.",sections:[{heading:"RAG without a proprietary vector silo",body:"The embeddings live in your database, beside the documents they came from. There's no separate vector service to sync, secure, pay for, or explain to your compliance team â and nothing about your corpus has to leave your infrastructure.",points:["Postgres + pgvector, or MongoDB Atlas Vector Search","Documents and embeddings in one place, under your backup policy","Self-host it and the corpus never leaves your network"]},{heading:"Two paths, same shape",body:"The RAG Chatbot pack runs on Postgres with pgvector. The MongoDB Atlas Vector Search RAG pack does the same on Atlas. Fork whichever matches the database you already have â the endpoints look the same either way.",points:["RAG Chatbot â Postgres + pgvector with OpenAI embeddings","MongoDB Atlas Vector Search RAG â the Atlas path","LLM Gateway â a companion pack for completion and moderation"]},{heading:"Ingest, chat, history, delete",body:"A chatbot is a handful of endpoints, so that's what you get: seed and ingest documents, chat against them, read history, and delete. They're readable config â extend them like any other Air Pipe interface."},{heading:"Observable, like every other endpoint",body:"Retrieval is where RAG quietly goe
28s wrong. Every call ships OpenTelemetry traces and Prometheus metrics automatically, so you can see what was retrieved and how long it took â rather than guessing why an answer was poor."}],faq:[{q:"Do my embeddings leave my infrastructure?",a:"Not if you self-host. Embeddings are stored in your own database next to the source documents, so they stay wherever that database runs. Generating embeddings calls whichever model provider you configure â that call leaves your network; where the vectors live afterwards does not."},{q:"Should I use pgvector or MongoDB Atlas Vector Search?",a:"Use whichever database you already run. Both paths ship as marketplace packs with the same endpoint shape, so the decision is about your existing stack and operational comfort rather than about Air Pipe."},{q:"Can I self-host a RAG chatbot?",a:"Yes. The same config runs on the managed cloud or on the single self-hosted binary, so you can keep the documents, the embeddings and the database entirely on your own infrastructure."},{q:"Which model providers can I use?",a:"The packs use OpenAI embeddings by default. The model, the API key and the system prompt are configuration, so you can point them at another provider without changing the endpoint shape."}],docsUrl:"https://docs.airpipe.io/docs/examples/marketplace/rag-chatbot"},{slug:"self-hosted",path:"/features/self-hosted",tagline:"One binary, your infrastructure.",seoTitle:"Self-Hosted API Platform â Single Binary | Air Pipe",seoDescription:"Run Air Pipe on your own VM, host or container as a single Rust binary. Same YAML config as managed cloud. Linux, macOS, Windows. Your data stays yours.",eyebrow:"Self-hosted",h1:"Self-host Air Pipe as a single binary â or let us run it.",lead:"One compiled binary, no sidecars and no agents. Run it on your VM, your container platform or your laptop â the same config you'd deploy to our managed cloud, on infrastructure you control.",sections:[{heading:"Why self-host",body:"Because the data can't leave, or because you'd rather own the runtime. Your databases, your documents and your embeddings stay on your own network, and the config that describes them is a file in your repository.",points:["Your data and embeddings stay on your infrastructure","No sidecars, no agents, no separate collector to run","The config is reviewable in a pull request like any other code"]},{heading:"Install where you already deploy",body:"Linux, macOS, Windows or a container. Linux is the recommended production target. Binaries are published for each platform â install it, point it at a config, and it serves.",points:["Linux, macOS, Windows and container install paths","A single compiled binary â nothing else to schedule","SQLite REST API Starter is a self-hosted-only pack for local-first work"]},{heading:"Same config, either way",body:"Self-hosted and managed run the same declarative config, so moving between them is a deployment decision rather than a rewrite. Observability behaves identically: OpenAPI, Prometheus metrics and OpenTelemetry traces are generated either way."},{heading:"What self-hosting still needs",body:"Self-hosted mode is not disconnected by default: you register an account and generate an API key, and the binary uses it. Request units are metered separately from managed ones, with their own monthly free allowance. Air-gapped deployment is an Enterprise arrangement â talk to us rather than assuming it."}],faq:[{q:"Is Air Pipe really a single binary?",a:"Yes. Self-hosted Air Pipe is one compiled Rust binary with no sidecars, agents or separate collectors to run. You install it, give it a config, and it serves the interfaces that config defines."},{q:"Which platforms can I install on?",a:"Linux, macOS, Windows and containers. Linux is the recommended target for production deployments unless you have a specific reason to use another operating system."},{q:"Does self-hosting need an Air Pipe account?",a:"Yes. You register an account and generate an API key, which the self-hosted binary uses. If you need a fully air-gapped deployment, that's an Enterprise arrangement â please contact us rather than assuming it works out of the box."},{q:"Is self-hosted priced differently to managed?",a:"Self-hosted requests draw down a separate self
28-hosted unit balance, with its own monthly free allowance, and you can use managed and self-hosted at the same time. See the pricing page for the current numbers."},{q:"Do I get the same features as managed?",a:"The same config runs on both, and observability â OpenAPI, metrics and tracing â is generated the same way in each. Governance features such as SSO and audit logs are tied to your plan rather than to where the runtime happens to be."}],docsUrl:"https://docs.airpipe.io/docs/install"},{slug:"api-testing",path:"/features/api-testing",tagline:"Postman-style client, tests saved & run.",seoTitle:"API Testing & a Postman-style Client, Built In | Air Pipe",seoDescription:"Test your APIs inside Air Pipe â a Postman-style client with saved collections, variables and server-side runs, plus assertions that pass or fail on each response.",eyebrow:"API testing",h1:"Test your APIs where you build them.",lead:"Air Pipe ships a request client, so you don't reach for a separate app to hit your endpoints. Save requests into collections, fire them at your live deployment, and attach assertions that pass or fail on every run â with the requests and their tests stored in the platform, not on someone's laptop.",sections:[{heading:"A request client that already knows your API",body:"Build and save requests the way you'd expect â method, URL, headers, query params and body â organised into collections and folders. Seed a request straight from an interface in your deployed config, so you're testing the endpoint you actually shipped rather than retyping it.",points:["Collections and folders for your saved requests","One-click seed from your deployed config's interfaces","Bearer, Basic and API-key auth, with {{variable}} placeholders"]},{heading:"Assertions that pass or fail on every run",body:"Attach checks to a request and Air Pipe evaluates them each time it runs, against the response status, body fields and headers. A run comes back green or red with a count of what passed and failed â so a saved request doubles as a regression test, not just a one-off call.",points:["Assert on status, body.* and headers.*","Conditions like equals, contains, regex, is a UUID, greater / less than","Pass / fail result with passed and failed counts"]},{heading:"The same checks that guard your endpoints",body:"The assertion conditions your tests use are the same ones Air Pipe runs inside a config's assert block on live traffic. A test isn't a separate testing language to learn â it's the runtime's own validation, pointed at a saved request and recorded."},{heading:"Runs on the server, recorded every time",body:"Requests run server-side against your staging or production deployment â no browser CORS, no local proxy â and every run is kept with its status, HTTP code, latency and time. Because the collections live in your organization, your team sees the same requests and the same history.",points:["Run against staging or production deployments","Server-side execution, not from your browser","Run history per request, shared across your org"]}],faq:[{q:"Is this a replacement for Postman or Bruno?",a:"For testing your Air Pipe APIs, largely yes â you get a request client with saved collections, variables and auth without installing anything. The difference is that the requests and their assertions live in your Air Pipe organization, run server-side against your deployments, and are shared with your team."},{q:"Where are my saved requests and tests stored?",a:"In your Air Pipe organization, alongside the config they test â not in a local app or a personal cloud account. Anyone on the team with access sees the same collections and the same run history."},{q:"What can an assertion check?",a:"The response status, any field in the body, and any header â using conditions such as equals, not-equals, contains, starts/ends with, regex, is-a-UUID, is-an-array, is-null and numeric greater/less than. Each request can carry several, and they're evaluated together on every run."},{q:"Where do the tests actually run?",a:"Server-side. Air Pipe runs the request against your selected deployment and evaluates the assertions there, so there's no browser CORS to fight and no local runner to keep alive. The result and timing are recorded in the request's run history."},{q:"Can I test against staging and production?",a:"Yes. Pick the environment on the request and it runs against that deployment. Variables let you keep the same request pointed at different environments without rewriting URLs or tokens."}]},{slug:"agents",path:"/features/agents",tagline:"A model, your tools, one action.",seoTitle:"Build AI agents on a real backend â tools, schemas, traces | Air Pipe",seoDescription:"An agent is one action in an Air Pipe config: a model, a tool loop over your own interfaces, and a schema the provider enforces. Every call traced, every tool already a real API. Start free.",eyebrow:"Agents",h1:"Agents with tools that are already a real backend.",lead:"An agent is a model that calls your interfaces as tools, in a loop, until it has an answer. In Air Pipe that is one action â with memory, a bounded loop, and an answer whose shape the provider enforces. The tools it calls are the same routes your apps call, with the same auth, the same validation and the same traces.",sections:[{heading:"One action, not a framework",body:"The agent action takes a model endpoint, a list of tools and an input. `tools:` names interfaces in the same config, so there is no adapter layer, no tool registry to maintain and no separate service to deploy alongside the API. The loop runs
28inside the request that started it.",points:["`tools:` references interfaces in the same config","Tool input schemas are derived from the `assert` tests those interfaces already carry","No second copy of the schema to keep in step with the route"]},{heading:"Any provider that speaks the OpenAI shape",body:"Which is, in practice, all of them. The `url` is yours to point: OpenAI, Gemini's compatible endpoint, Anthropic, OpenRouter, Groq, DeepSeek, Mistral, Azure, or a model you host yourself with Ollama. Changing provider is changing a URL and a model name, not rewriting the agent.",points:["Swap provider without touching the tools or the flow around them","Self-hosted models work the same way â nothing has to leave your network","Keys live in managed variables or secrets, never in the config text"]},{heading:"It remembers, and it can borrow tools",body:"An agent forgets between requests unless you tell it not to. `memory:` takes a `key` that scopes the conversation â one per user, per session, per ticket â and a `window` that bounds how many turns are replayed, so a long-running thread cannot grow without limit. Separately, `mcp:` draws tools from a remote MCP server in addition to your own interfaces: they are discovered at run time, so the model is offered whatever that server publishes today rather than whatever it published when you wrote the config.",points:["`memory.key` scopes a conversation; `memory.window` bounds the replay","`mcp:` adds tools from a remote server alongside your own interfaces","A remote tool whose name collides with one of yours is refused, never silently shadowed","`max_iterations` caps the model round trips â default 4, ceiling 12, and hitting the budget is reported rather than silent"]},{heading:"A shape the model cannot break",body:'A model asked for JSON in a prompt will usually return JSON. `schema:` removes the "usually": the schema is sent to the provider, which enforces it, so `content` holds a parsed object rather than a string. There is nothing to validate afterwards and nothing to retry. If an endpoint ignores the field, the action fails and names the likely cause rather than passing prose on to whatever runs next.'},{heading:"The part most agent stacks leave to you",body:"An agent that can act needs auth in front of it, a schedule or a webhook to start it, a database behind it, a human in the loop for the risky step, and traces when it does something surprising. Those are not add-ons here â they are the same config the agent lives in, and every tool call produces an OpenTelemetry span and Prometheus metrics without instrumentation code.",points:["JWT verification and network access control guard agent-callable routes","Cron, webhooks and durable jobs start and resume the work","Human approval steps for anything you would not let a model do unattended","Traces, metrics and OpenAPI docs generated from the same config"]}],faq:[{q:"Is this an agent framework like LangGraph or CrewAI?",a:"It is a single-agent runtime rather than an orchestration framework. One agent gets a model, tools, memory, a bounded loop and an enforced output shape â which is most of what a working agent needs. What it does not do is orchestrate several agents handing work between each other. If you want that, keep your framework and give it Air Pipe tools over MCP; the difference is that here the agent, the tools it calls and the API in front of it are one deployable artifact rather than three."},{q:"How does the model know what my tools do?",a:"The tool signature is generated from the interface's own `assert` tests â the test vocabulary for types, patterns, ranges and formats maps to JSON Schema. Write clear assertions and the agent gets an accurate signature for free, one that cannot drift from what the route really validates."},{q:"Can I stop an agent from calling something destructive?",a:"Yes, in the ordinary way rather than a special one. A tool is an interface, so it carries whatever auth, access control and assertions you give it, and anything genuinely irreversible can sit behind a human approval step that the agent cannot skip."},{q:"What does a failed agent run look like afterwards?",a:"A trace, with a span for the agent action and a child span for each tool call it made, plus the run history for the deployment. You can see which tool it called, with what, and what came back â rather than
28inferring it from a transcript."}],docsUrl:"https://docs.airpipe.io/docs/features/agents"}],k3=Object.fromEntries(ga.map(e=>[e.slug,e])),He=[{slug:"workflow-automation-on-kubernetes",path:"/blog/workflow-automation-on-kubernetes",title:"Workflow automation on Kubernetes that scales",description:"Run scheduled jobs, webhooks and APIs on Kubernetes from one config. Scale with kubectl: cron coordination, health probes and pod discovery are built in.",date:"2026-08-10",updated:"2026-08-12",tags:["kubernetes","automation","scheduling","self-hosted","config"],image:"/blog-covers/workflow-automation-on-kubernetes.svg",featured:!0,pack:{slug:"kubernetes-service-discovery",path:"/marketplace/pack/kubernetes-service-discovery",name:"Kubernetes Service Discovery",description:"Discover your own Kubernetes pods and act on every one of them - list them by label with node, image and readiness, health-check each replica, and broadcast a call to the whole Deployment."},relatedPacks:[{slug:"container-service-discovery",path:"/marketplace/pack/container-service-discovery",name:"Container Service Discovery",description:"Find the containers behind a service - by DNS, by Docker or
28Compose label, or from an explicit list - then do something to every one of them. Scale a Compose service and the new container is discovered automatically."},{slug:"scheduled-cleanup",path:"/marketplace/pack/scheduled-cleanup",name:"Scheduled Cleanup",description:"Nightly job that deletes rows older than 30 days and posts a Slack summary. Demonstrates a cron schedule on an interface."},{slug:"durable-api-polling",path:"/marketplace/pack/durable-api-polling",name:"Durable API Polling",description:"Poll an API on a schedule and process only new items, retrying only the items that fail â never the whole batch and never silently dropping a failure. Durable id-based dedupe via the state feature plus lookup_partition per-item retry. Includes a self-contained demo and a production poller template."}],readingMinutes:11,sections:[{heading:"The failure you're trying to avoid",body:"Three replicas, one cron line. Each pod holds its own copy of the config, so each pod's scheduler sees that line and wants to run it. Without coordination, all three do."},{heading:"Deploy it",body:"One manifest: a namespace, a throwaway Postgres, the RBAC for pod discovery, a headless Service for the mesh, a config with two routes, and the Deployment at three replicas. Replace the API key and apply it."},{heading:"Check it works",body:"Every replica health-checks every other replica, itself included:"},{heading:"Step 1 â Say that it is a cluster",body:'One declaration on every pod, meaning "this agent is one of several serving the same configs". The nodes then race for a durable claim on (config, interface, minute) in Postgres, and exactly one wins. The other two skip the tick.'},{heading:"Step 2 â Probes that don't cost you anything",body:'/livez answers as soon as the process is up. /readyz answers once configs are loaded, and returns 503 with "starting" until then â which is what stops the Service sending traffic to a pod that has nothing to serve yet.'},{heading:"Step 3 â Configs from a ConfigMap",body:"Worth knowing what Kubernetes actually mounts here, because it bites more tools than it should: a ConfigMap volume is not a directory of files. It's a symlink farm â ..data pointing at a timestamped directory, and one symlink per key."},{heading:"Step 4 â Scale out",body:"The manifest already runs three, so go further:"},{heading:"Step 5 â Realtime across pods",body:"The one thing that genuinely needs wiring: a WebSocket publish arrives at whichever pod the load balancer picked, but its subscribers are spread across every pod."},{heading:"Step 6 â Let a workflow see the cluster",body:"This is the part with no equivalent elsewhere. A discover action returns the live members of a service as an array, and lookup: fans actions out across all of them:"},{heading:"What you get without asking",body:"From the same config, no extra deployment: an OpenAPI document generated from the assert tests, Prometheus metrics per route, and an OpenTelemetry trace per request showing each action and how long it took. When a nightly job gets slow, the trace says whether it was your database or the API you called, before you start guessing."},{heading:"The shortcut",body:"Everything in step 6 ships as one pack â Kubernetes Service Discovery â with four routes: list pods by label with node, image and readiness, find peers by DNS with no RBAC at all, health-check every replica, and broadcast one call to the whole Deployment. Install it, apply the RoleBinding above, and the routes work against your own cluster."},{heading:"Things that will bite you",body:"sessionAffinity: ClientIP will pin you to one pod. It's a reasonable-looking default that quietly turns three replicas into one â a load test looked beautifully stable until we noticed 12 of 12 requests hit the same pod. Leave it None unless you specifically need stickiness."}]},{slug:"ai-api-with-google-gemini",path:"/blog/ai-api-with-google-gemini",title:"Build an AI API with Google Gemini",description:"Wrapping Gemini in an endpoint takes ten lines. Doing it without leaving your API key open to the internet takes a few more â here are both.",date:"2026-08-01",tags:["ai","api","config","auth"],image:"/blog-covers/ai-api-with-google-gemini.svg",featured:!1,pack:{slug:"gemini-ai",path:"/marketplace/pack/gemini-ai",name:"Gemini AI",description:"Query Google's Gemini models over a simple HTTP API. Three routes: the full generateContent payload, just the answer text, or an instruction-prefixed answer. The API key and model are managed variables, so you can swap models without redeploying; the prompt is JSON-escaped before it hits the Gemini API."},relatedPacks:[{slug:"llm-gateway",path:"/marketplace/pack/llm-gateway",name:"LLM Gateway",description:"A configurable LLM completion and content-moderation endpoint. System prompt, model, and API key live in managed variables â swap providers or update prompts without touching the config or redeploying. Exposes POST /ai/complete (chat completion) and POST /ai/moderate (OpenAI moderation, free) with request validation and per-model metrics."},{slug:"rag-chatbot",path:"/marketplace/pack/rag-chatbot",name:"RAG Chatbot",description:"Retrieval-Augmented Generation chatbot backed by Postgres + pgvector. Ingest your own documents, store OpenAI embeddings alongside them, and answer questions using only your data â no third-party vector DB, no proprietary cloud, nothing leaves your infrastru
28cture. Includes seed, ingest, chat, history, and delete endpoints."},{slug:"rate-limited-api",path:"/marketplace/pack/rate-limited-api",name:"Rate Limited API",description:"A public endpoint rate-limited to 10 requests/min per IP. Demonstrates the native network rate_limit policy."}],readingMinutes:3,sections:[{heading:"Step 1 â Key and model, as variables",body:"Create a key at aistudio.google.com/app/apikey, then set two managed variables:"},{heading:"Step 2 â The endpoint",body:"->json_escape is not optional. The request body is JSON being assembled from user input, so a prompt containing a quote character produces malformed JSON and a 400 from Google â and a prompt built to close the string early could append fields to the payload you never intended to send. The escape runs before substitution, which turns that from a live problem into a non-issue. Any user text going into a JSON body needs it."},{heading:"Step 3 â Return an answer, not a payload",body:"Gemini's response is deeply nested â candidates, parts, safety ratings, token counts. Useful when you want it, noise when you don't:"},{heading:"Step 4 â Constrain the answer",body:"The cheapest way to control output is to prepend an instruction to every prompt:"},{heading:"Step 5 â Don't ship it open",body:"Here's where the tutorial version stops and the real one starts. What you have so far is a public URL that spends your money. Two things fix it."},{heading:"Step 6 â Watch what it costs you",body:`LLM endpoints fail differently to normal ones. They rarely go down; they go slow, and the slowness is the model's, not yours. Every request produces a trace showing the Gemini call as its own span, so "is it us or them" is a question you answer by looking rather than guessing. Prometheus metrics per route give you the request rate to compare against your quota before you hit it.`},{heading:"The gotcha that looks like a bug",body:"A 429 with limit: 0 in the error body is not rate limiting. It means the model you asked for isn't on your key's free tier at all â gemini-2.0-flash often isn't. Switch GEMINI_MODEL to gemini-2.5-flash or gemini-flash-latest, or enable billing. Because the model is a managed variable, that's a one-field change with no redeploy."},{heading:"The shortcut",body:"All three variants ship as one pack â full payload, text-only, and the instruction-prefixed version. Set two variables and deploy."}]},{slug:"mongodb-atlas-rest-api",path:"/blog/mongodb-atlas-rest-api",title:"A MongoDB Atlas REST API with no backend to write",description:"CRUD, bcrypt-hashed passwords and real aggregation pipelines over an Atlas cluster â from config. No ORM, no Mongoose, no server to deploy.",date:"2026-08-01",tags:["mongodb","api","config","auth"],image:"/blog-covers/mongodb-atlas-rest-api.svg",featured:!1,pack:{slug:"mongodb-atlas-backend-rest-api",path:"/marketplace/pack/mongodb-atlas-backend-rest-api",name:"MongoDB Atlas Backend / REST API",description:`A production-shaped REST API over a **MongoDB Atlas** database â CRUD for users, posts, and categories, optional JWT validation, and a set of **aggregation-pipeline analytics** endpoints. No ORM, no Mongoose, no backend boilerplate: point AirPipe at your Atlas connection string and you have an API. 29 30> Already on the Next.js + MongoDB stack? This is the missing backend. Deploy it over your existing Atlas cluster and start making requests in under 10 minutes. 31`},relatedPacks:[{slug:"mongodb-atlas-vector-search-rag",path:"/marketplace/pack/mongodb-atlas-vector-search-rag",name:"MongoDB Atlas Vector Search RAG",description:"Retrieval-Augmented Generation chatbot backed by MongoDB Atlas Vector Search. Ingest your own documents, embed them with OpenAI, and answer questions with $vectorSearch â your documents and their embeddings live in one database, no separate vector store. The Atlas-native companion to the pgvector AI RAG Chatbot."},{slug:"rest-api-starter",path:"/marketplace/pack/rest-api-starter",name:"REST API Starter",description:"A production-shaped CRUD API over Postgres with three resource types (users, posts, comments) and optional JWT validation. No external services required â just a Postgres database. Deploy and start making requests in under 10 minutes."},{slug:"jwt-verification-starter",path:"/marketplace/pack/jwt-verification-starter",name:"JWT Verification Starter",description:"Verify JWTs three ways - against a provider's JWKS (Auth0,
31Clerk, Cognito, Firebase), a static PEM public key, or an HS256 shared secret - then protect a real per-user Postgres resource scoped to the token's sub claim. Reference endpoints for every is_valid_jwt mode plus a working, owner-scoped notes API and a one-call multi:true migration."}],readingMinutes:5,sections:[{heading:"Step 1 â The Atlas cluster",body:"If you already have one, skip to step 2. Otherwise:"},{heading:"Step 2 â One managed variable",body:"| Name | Value | |---|---| | MONGODB_URI | the SRV string from step 1 |"},{heading:"Step 3 â Your first endpoint",body:"Declare the database once, then each interface is a route:"},{heading:"Step 4 â Writes, with validation that documents itself",body:"Those assert tests aren't only guards â they generate the OpenAPI request body. The description: on each becomes the field description in the published schema, so the docs stay correct because they're the same declaration that does the validating. There's no second place to update."},{heading:"Step 5 â Passwords, done properly",body:"This is where hand-rolled tutorials usually hand-wave. Hashing happens as a transform between validation and insert:"},{heading:"Step 6 â Aggregation, which is the actual reason to use Mongo",body:"Everything so far is CRUD, and CRUD looks the same on any database. This part doesn't."},{heading:"Step 7 â Locking it down",body:"Air Pipe validates JWTs; it doesn't mint them. Your app already issues tokens, so validation is the first action and everything else waits on it:"},{heading:"What comes with it",body:"From the same files, no extra work: an OpenAPI document generated from the assert tests and response_example blocks, Prometheus metrics per route, and an OpenTelemetry trace per request showing each action and how long the Mongo call took. When an aggregation gets slow, the trace tells you whether it's the pipeline or the network before you start guessing."},{heading:"The shortcut",body:"All of it ships as one pack â users, posts and categories CRUD, the four aggregation endpoints, the JWT pattern, and a seed endpoint that loads sample data so the analytics have something to chew on. Set MONGODB_URI, deploy, call /api/seed."},{heading:"Things that will bite you",body:"$set overwrites. MongoDB update semantics replace the fields you send rather than merging, so the update endpoints require the full set of fields you want changed. There's no COALESCE-style partial update. No reference integrity. A post's author and category are plain strings; Mongo won't check they point at a real user or category. That's the trade for schema flexibility, and keeping them consistent is your application's job. Human keys, not ObjectIds. Lookups use username and slug rather than _id, which keeps URLs readable and avoids ObjectId casting on every request. Both need a unique index in Atlas â add one, because nothing else will stop a duplicate."}]},{slug:"build-your-own-mcp-server",path:"/blog/build-your-own-mcp-server",title:"How to build your own MCP server",description:"A complete walkthrough â database, schema, config, token, client â that ends with Claude querying your own data. No SDK, no Node project, no server to host.",date:"2026-07-31",tags:["mcp","api","config","auth","postgres"],image:"/blog-covers/build-your-own-mcp-server.svg",featured:!1,pack:{slug:"mcp-postgres-starter",path:"/marketplace/pack/mcp-postgres-starter",name:"MCP Postgres Starter",description:"Turn your Postgres data into secure MCP tools any AI client (Claude Desktop, Claude Code, Cursor) can call. Two-tier auth: one shared token for yourself, or per-user tenant-scoped tokens for your customers - minted via an HS256 exchange or verified directly against your OIDC provider's JWKS (Auth0, Clerk, Cognito). Every tool reuses the same in-config token checks as a normal Air Pipe route. Tool discovery (tools/list) is gated behind the same per-user token via list_authorizer, so unauthenticated clients cannot enumerate your tools or their input schemas (engine >= 1.7.0)."},relatedPacks:[{slug:"mcp-quickstart",path:"/marketplace/pack/mcp-quickstart",name:"MCP Quickstart",description:"The smallest useful MCP server: two tools over one Postgres table, guarded by a single shared token, in one config file. Point Claude Desktop, Claude Code, Cursor or any MCP client at your database with no SDK, no Node project and nothing to host. An Air Pipe interface is an HTTP route; add an mcp block and the same interface is also an MCP tool, secured by the same in-config token check. Tool discovery (tools/list) is gated by that same token via list_authorizer, so an unauthenticated client cannot even enumerate your tools or their input schemas. Includes a seed endpoint that creates the table and sample data in one curl."}],readingMinutes:9,sections:[{heading:"Step 1 â Get a Postgres database",body:"If you already have one, skip ahead. If not, any of these work and all have a usable free tier:"},{heading:"Step 2 â Create the schema",body:"Three tables. Only one of them is your data:"},{heading:"Step 3 â Set two variables",body:"In the Air Pipe dashboard, under your environment's managed variables (or as ap_vars if you're self-hosting):"},{heading:"Step 4 â Write the config",body:"Here's the whole thing. One file, two tools."},{heading:"Step 5 â Deploy",body:`On managed Air Pipe, paste the file into the dashboard editor and hit deploy â that validates it on the way in. If you're using the Air Pipe MCP tools from your own AI client, "validate and deploy this config" does the same from the chat, and installing the pack (below) does it without either.`},{heading:"Step 6 â Mint a token",body:"Once, at jwt.io: algorithm HS256, secret = your SOLO_SECRET, payload:"},{heading:"Step 7 â Verify it before you touch the client",body:`Debugging through an MCP client is miserable â a failure shows up as "the tool didn't work." Check with curl first. MCP is JSON-RPC over HTTP, so you can drive it directly:`},{heading:"Step 8 â Point Claude at it",body:'Claude Desktop keeps this at ~/Library/Application Support/Claude/claudedesktopconfig.json on macOS and %APPDATA%\\Claude\\claudedesktopconfig.json on Windows. Claude Code: claude mcp add --trans
31port http my-tasks https://your-airpipe-host/<org>/<env>/mcp --header "Authorization: Bearer <token>".'},{heading:"Give the server a name, not just tools",body:"Every client calls initialize before it lists anything, and that response is where the server says who it is. Skip it and yours introduces itself with a built-in name and no description â a listing that's a bare label above a wall of tool descriptions. That's what mcp_servers at the top of the config fixes:"},{heading:"The hole most MCP servers have",body:"Worth knowing regardless of what you build with: tools/call runs your code, tools/list doesn't."},{heading:"Now the part that matters: your customers",body:"Everything above is one token, one grant â everyone who holds it sees every row. Right for pointing an AI at your own database. Useless the moment you have users."},{heading:"The shortcut",body:"Everything on this page ships as one pack, both tiers, tested end to end â the schema, the seed endpoint, the single-token tools, the tenant-scoped tools, the discovery gate, the token lifecycle routes, and the OIDC variant. Fork it, set two variables, deploy."}]}],x3=Object.fromEntries(He.map(e=>[e.slug,e])),A3=He.find(e=>e.featured)||He[0]||null,xt=[{slug:"zapier-alternative",path:"/compare/zapier-alternative",seoTitle:"Air Pipe: a Zapier alternative for developers | Real backend",seoDescription:"A real backend on your own database â traced, documented, billed per request not per task. 3,000 requests a month free, where Zapier's free tier is 100 tasks.",eyebrow:"Air Pipe vs Zapier",h1:"A Zapier alternative whose workflows are real backends.",lead:"Air Pipe runs the work you would put in Zapier â schedules, webhooks, multi-step flows â and what you ship at the end is a real service: your own database, your own auth, an OpenAPI document and a trace for every request. Billed per request, not per task.",sections:[{heading:"Workflows that are real backends",body:"Cron schedules, webhooks and branching flows are the same declarative config as your HTTP endpoints â with your database behind them, auth in front, and durable state between runs. You get the automation and the service, not one bolted onto the other.",points:["Cron schedules, retries with backoff, branching and durable state","Your own Postgres / MySQL / Mongo, not only SaaS connectors","Config you own and can review in a pull request"]},{heading:"Observable by default",body:"Every endpoint ships OpenTelemetry traces, Prometheus metrics and OpenAPI docs automatically. You can see exactly what ran and why â instead of debugging a run history in a dashboard."},{heading:"Priced per request, not per task",body:"Zapier bills per action, so a three-step Zap costs about two tasks every run. Air Pipe charges one request unit for the whole request â a trigger plus up to 1000ms of execution â however many steps run inside.",points:["Zapier Professional: $19.99/mo billed yearly for 750 tasks â roughly 375 runs","Air Pipe Starter: $19/mo for 5,000 requests â about 13Ã the runs at the same price","Free tiers: Zapier gives 100 tasks a month and two-step Zaps only. Air Pipe gives 3,000 full requests, no step limit"]},{heading:"You don't have to write the config",body:"Describe the automation in plain English and Air Pipe generates the config, then you deploy it. The same is true of the marketplace: fork a pack, set two variables, run it. What you end up with is still a readable file you can diff and review â the difference from a canvas is that a non-engineer can produce it and an engineer can still audit it."},{heading:"Your data, your infrastructure",body:"Run on our managed cloud or self-host the single binary anywhere. Your data stays on your infrastructure â a different trust model from a fully hosted SaaS."},{heading:"Realtime your app's users connect to",body:"The same backend also serves realtime â WebSocket and MQTT pub/sub with presence, history-rewind and retained messages â that your website's users subscribe to directly. A SaaS-automation tool moves data between apps on triggers and schedules; it doesn't give your product a realtime channel layer. In Air Pipe it's the same config that serves your endpoints, and your pipeline runs on every message.",points:["WebSocket channels and a real MQTT broker in the same config","Presence, history-rewind, retained â your logic runs on each message","End-users connect with their own token, or fully open â no org key in the browser"]},{heading:"When Zapier is the better answer",body:"If your automation is mostly gluing SaaS products together â a form to a spreadsheet to a chat message â Zapier's connector library is thous
31ands deep and we don't claim parity on it. Air Pipe is the better fit when the automation has quietly become part of your product: a real endpoint, on your own database, that you can trace, review and put behind auth."}]},{slug:"n8n-alternative",path:"/compare/n8n-alternative",seoTitle:"Air Pipe: an n8n alternative | Backend as config, observable",seoDescription:"n8n gives you a node canvas you can self-host. Air Pipe gives you a real backend as config â observability built in, 3,000 requests a month free.",eyebrow:"Air Pipe vs n8n",h1:"An n8n alternative whose workflows ship as services.",lead:"Air Pipe is a backend you describe in config: the file that runs your schedules and flows also publishes a documented HTTP API, Prometheus metrics and an OpenTelemetry trace for every request. Managed or self-hosted, with 3,000 requests a month free â n8n Cloud has no free tier.",sections:[{heading:"Config, not a canvas of nodes",body:"Air Pipe endpoints are readable config â build them from a prompt, by hand, or visually, all producing the same thing the engine runs. Diff them, review them, deploy them like code.",points:["Interfaces and actions as versioned config","The same config serves HTTP and MCP tools","Auth, assertions and a network firewall inline"]},{heading:"Observability without wiring it up",body:"Traces, metrics and OpenAPI docs are generated for every endpoint automatically â no extra nodes, no separate instrumentation to maintain."},{heading:"Priced per request â and free where n8n Cloud isn't",body:"n8n Cloud has no free tier; every plan starts as a trial. Their cheapest paid plan, Starter, is â¬20 a month billed annually for 2,500 workflow executions. Air Pipe's free tier is 3,000 requests a month, every month â more monthly volume than n8n's entry paid plan, for nothing. Past that, a request unit covers a request up to a second, so a five-minute polling loop that would burn thousands of executions barely registers here. (n8n figures from their pricing page on 30 July 2026, annual-billing toggle; monthly is around 20% higher. Compared per run, on sub-second workflows.)",points:["3,000 requests a month, free and permanent â not a trial","Durable polling processes only new items, so a fast schedule costs almost nothing","Paid units roll over for 12 months instead of expiring at month end"]},{heading:"A realtime backend, not just an inbound trigger",body:"n8n can start a workflow from a webhook or an incoming MQTT message. Air Pipe goes further â it is the realtime layer your app connects to: WebSocket and MQTT pub/sub with presence, history-rewind and retained messages, served to your users from the same config, with your pipeline running on each message. Realtime out to your users, not only a trigger coming in.",points:["WebSocket channels and a full MQTT broker your users connect to","Presence, history-rewind, retained â your logic runs on each message","End-users connect with their own token, or fully open â no org key in the browser"]},{heading:"When n8n is the better answer",body:"If a visual canvas is how your team wants to build and reason about automation, that is n8n's design centre and it self-hosts properly. Air Pipe suits you when the thing you want at the end is a service: an HTTP or MCP endpoint with auth, docs and traces, that happens to run on a schedule too."},{heading:"Managed or self-hosted",body:"Run the single cross-platform binary yourself, or use the managed cloud. Either way your data stays on infrastructure you control."}]},{slug:"gumloop-alternative",path:"/compare/gumloop-alternative",seoTitle:"A Gumloop Alternative for AI on Your Own Data | Air Pipe",seoDescription:"Gumloop builds AI workflows on a no-code canvas. Air Pipe ships AI features as backend endpoints â RAG, LLM gateway and MCP on your database. Per request.",eyebrow:"Air Pipe vs Gumloop",h1:"A Gumloop alternative that ships AI as real endpoints.",lead:"Air Pipe turns AI features into endpoints your product calls â RAG, an LLM gateway and MCP tools running on your own database, authenticated and traced like any other route. The model is a config value you can swap, and you are billed per request rather than per AI credit.",sections:[{heading:"AI features as backend endpoints",body:"Stand up a RAG chatbot on Postgres + pgvector or MongoDB Atlas Vector Search, put a governed LLM gateway in front of any model, and expose the same interfaces as MCP tools â all as config, on your infrastru
31cture.",points:["RAG with your documents and embeddings kept together","One governed LLM endpoint with auth, limits and tracing","The same endpoints exposed as MCP tools for agents"]},{heading:"The model is config, not a lock-in",body:"The model, the API key and the system prompt live in configuration. Point an endpoint at a different provider without changing its shape, and keep the contract your product already calls."},{heading:"Observable by default",body:"Retrieval is where RAG quietly goes wrong. Every AI endpoint ships OpenTelemetry traces, Prometheus metrics and OpenAPI docs, so you can see which step ran and how long it took rather than inferring it from a bad answer."},{heading:"Priced per request, not per AI credit",body:"Gumloop meters credits that scale with the model tier and the nodes you run. Air Pipe meters one request unit per request â a whole request, whatever ran inside it. It's a different axis, and it's the one that stays predictable as the AI work gets heavier."},{heading:"Your data stays yours",body:"Managed or self-hosted. Self-host it and your documents, your embeddings and your database never leave your network."},{heading:"Realtime in the same backend",body:"Beyond AI endpoints, the same config serves realtime â WebSocket and MQTT pub/sub with presence, history-rewind and retained messages â that your product's users connect to directly. A no-code AI workflow builder produces triggered or batch runs, not a realtime channel layer your app subscribes to. Here it's one backend: AI endpoints, automation and realtime in the same artifact, and your pipeline runs on each message.",points:["WebSocket channels and a real MQTT broker alongside your AI endpoints","Presence, history-rewind, retained â your logic runs on each message","End-users connect with their own token, or fully open â no org key in the browser"]},{heading:"When Gumloop is the better answer",body:"If the person building the automation isn't an engineer, or you want a library of ready-made scraping and enrichment nodes on a visual canvas, Gumloop fits better â we don't have either. Air Pipe suits you when the AI feature has to be a service you own: authenticated, documented, traced, on your data."}]},{slug:"ably-alternative",path:"/compare/ably-alternative",seoTitle:"An Ably Alternative That Runs Your Logic | Air Pipe Realtime",seoDescription:"Ably is a realtime relay. Air Pipe gives you WebSockets and MQTT â pub/sub, presence, history, retained â and runs your own pipeline on every message. One vendor, self-hostable.",eyebrow:"Air Pipe vs Ably",h1:"An Ably alternative that runs your backend on the message.",lead:"Air Pipe covers the realtime fundamentals â WebSocket and MQTT pub/sub, presence, history-rewind and retained messages â and then does what a relay cannot: the same connection runs your pipeline on each message, with your own logic as the channel ACL. One vendor for the socket and the backend behind it.",sections:[{heading:"Realtime fundamentals, at parity",body:"Wildcards, presence, message history-rewind and retained values all live in the WebSocket channel API, with global reach across geo-routed nodes. MQTT reaches the same delivery guarantees the native broker way â persistent sessions, QoS 1/2 and retained. You're not trading away realtime features to get the rest.",points:["Pub/sub with wildcards, presence and history-rewind","Retained values delivered on (re)subscribe, cross-node","WebSockets for browsers, MQTT for devices â one platform"]},{heading:"Your logic runs on the message",body:"A relay moves bytes between clients and stops there. Air Pipe can run your config on each message before it fans out â assert on it, transform it, write it to Postgres or MongoDB, call an upstream API â and gate each channel with your own pipeline logic against the user's JWT claims. The realtime layer and the backend are the same thing."},{heading:"One vendor, one bill",body:"With a relay you still bring your own backend, your own auth service and the glue between them. Air Pipe is transport, per-user auth, the compute that runs on each message, and billing in one product â metered in the same request units as everything else you run, which roll over for 12 months."},{heading:"Managed or self-hosted",body:"Run realtime on our managed cloud, or self-host the same single binary on your own infrastru
31cture â nothing-shared either way, with no external broker or Redis to operate. Self-hosted realtime connections aren't billed."},{heading:"Scaling to very large connection counts",body:"Out of the box, Air Pipe doesn't advertise the edge footprint or published SLAs of a dedicated global realtime network. But extreme scale is a conversation, not a wall: if you need very large connection counts or dedicated capacity, we scale out or provision dedicated infrastructure for you â talk to us. For most products the better fit is realtime that's part of your backend, runs your logic on each message, and self-hosts on infrastructure you own â and that's there from day one."}]},{slug:"pusher-alternative",path:"/compare/pusher-alternative",seoTitle:"A Pusher Alternative That Runs Your Logic | Air Pipe Realtime",seoDescription:"Pusher is a hosted WebSocket relay. Air Pipe gives you WebSocket and MQTT pub/sub â presence, history, retained â and runs your own pipeline on every message. Auth and backend in one config, self-hostable.",eyebrow:"Air Pipe vs Pusher",h1:"A Pusher alternative where the channel is your backend.",lead:"Air Pipe covers the realtime fundamentals â WebSocket pub/sub, presence, history-rewind and retained messages â and then does what a relay cannot: the same connection runs your pipeline on each message, and the auth gating each channel is part of the same config instead of a separate endpoint you have to host and keep running.",sections:[{heading:"Realtime fundamentals, at parity",body:"Pub/sub with wildcard channels, presence, message history-rewind and retained values live in the WebSocket channel API â and MQTT is available from the same config for devices. You get the realtime feature set, plus a second transport a WS-only relay doesn't offer.",points:["Pub/sub with wildcards, presence and history-rewind","Retained values delivered on (re)subscribe","WebSockets for browsers and MQTT for devices â one config"]},{heading:"Your logic runs on the message",body:"A relay moves bytes between clients and stops there. Air Pipe can run your config on each message before it fans out â assert on it, transform it, write it to Postgres or MongoDB, call an upstream API â and gate each channel with your own pipeline logic against the user's JWT claims. The realtime layer and the backend are the same thing."},{heading:"Auth without a second backend",body:"With Pusher, private and presence channels are authorized by an auth endpoint you stand up and host yourself. In Air Pipe the auth, the channel and the backend are one config: your end-users connect with their own token â a shared secret, your JWKS, or an Air Pipe-issued token â or fully open, with no org key in the browser. There's no separate auth service to run and keep in sync.",points:["Per-connection auth ladder: open, token, shared secret, or your JWKS","Anonymous / public channels that are still org-attributed and bounded","No separate auth endpoint to host and secure"]},{heading:"One vendor, one bill",body:"With a relay you still bring your own backend, your own auth service and the glue between them. Air Pipe is transport, per-user auth, the compute that runs on each message, and billing in one product â metered in the same request units as everything else you run, which roll over for 12 months."},{heading:"Managed or self-hosted",body:"Run realtime on our managed cloud, or self-host the same single binary on your own infrastructure â nothing-shared either way, with no external relay or Redis to operate. Self-hosted realtime connections aren't billed."},{heading:"Scaling to very large connection counts",body:"Out of the box, Air Pipe doesn't advertise the edge footprint or published SLAs of a dedicated global realtime network. But extreme scale is a conversation, not a wall: if you need very large connection counts or dedicated capacity, we scale out or provision dedicated infrastructure for you â talk to us. For most products the better fit is realtime that's part of your backend, runs your logic on each message, and self-hosts on infrastru
31cture you own â and that's there from day one."}]},{slug:"emqx-alternative",path:"/compare/emqx-alternative",seoTitle:"An EMQX Alternative That Runs Your Backend | Air Pipe MQTT",seoDescription:"EMQX is an MQTT broker you cluster and operate. Air Pipe is an MQTT broker plus WebSocket channels where your pipeline runs on every message â auth and backend in one config, one binary, no cluster to run.",eyebrow:"Air Pipe vs EMQX",h1:"An EMQX alternative where the broker is your backend.",lead:"Air Pipe is a real MQTT broker â QoS 0/1/2, retained messages, wildcards, MQTT-over-WebSocket â that also runs your backend. The same connection executes your full pipeline on each message, with per-connection auth and multi-tenancy in the same config, from a single binary with no cluster to operate.",sections:[{heading:"MQTT fundamentals, at parity",body:"A real MQTT broker over raw TCP and MQTT-over-WebSocket: publish/subscribe with wildcard topics, QoS 0/1/2, retained messages and subscribe-time authorization. Anonymous / public connections are supported too â the way a broker with allow_anonymous is â but kept multi-tenant-safe.",points:["QoS 0/1/2, retained, wildcards, MQTT-over-WebSocket","Anonymous / public connections that stay org-attributed and bounded","WebSocket channels in the same config for browser clients"]},{heading:"The broker runs your backend",body:"A broker moves and routes messages; the logic that does something with them lives in services you build and run alongside it. In Air Pipe that logic is the same config as your APIs â assert on a message, transform it, write it to Postgres or MongoDB, call an upstream API, then fan it out. You're not wiring a rules engine to external services; the message processing is your backend."},{heading:"Devices and browsers, one platform",body:"MQTT for devices and a WebSocket channel API for browsers come from the same config, with presence, history-rewind and retained values. One platform serves your fleet and your app's front-end, instead of a broker for devices plus a separate realtime stack for the web."},{heading:"Auth and multi-tenancy built in",body:"Per-connection auth is part of the config: connections present a shared-secret token, your JWKS, or an Air Pipe-issued token â or connect fully open with no credential â and everything is scoped and bounded per org, with usage attributed per org. There's no separate auth plugin or ACL service to run.",points:["Auth ladder: open, token, shared secret, or your JWKS","Per-org isolation, limits and attributed usage","Subscribe-time authorization on topics"]},{heading:"One binary, no cluster to operate",body:"Run the single cross-platform binary yourself, or use the managed cloud â no broker cluster, no external Redis or rules database to stand up and keep healthy. Self-hosted realtime connections aren't billed."},{heading:"Priced per request, not per connection and throughput",body:"Broker platforms typically meter concurrent connections and message throughput. Air Pipe meters one request unit per request â a whole request, whatever ran inside it â and those units roll over for 12 months. Self-hosted, your sockets aren't billed at all."},{heading:"Scaling to very large device fleets",body:"EMQX is built to cluster to very large device counts, and out of the box Air Pipe doesn't advertise that kind of turnkey fleet-scale footprint or published SLAs. But it's a conversation, not a wall: if you need very large fleets or dedicated capacity, we scale out or provision dedicated infrastructure for you â talk to us. For most products the better fit is a broker that's already your backend, runs your logic on each message, and self-hosts as one binary â there from day one."}]}],P3=Object.fromEntries(xt.map(e=>[e.slug,e])),vr=[{value:"request-unit",id:"request-units",q:"What is a request unit?",a:["A request unit is any request used to trigger your config â whether that be an API, workflow, CLI etc. It includes 1000ms of execution time. Your requests can run as many actions as needed, and as long as they need, either bound by your own limits if self hosted or ours if hosted on our infrastru
31cture.","Why 1000ms? A good API response time would be beneath 300ms, and anything past ~850ms would be considered poor performing.","This allows us to cater for the most typical understanding of a ârequestâ. Usecases may differ but this allows us to simplify pricing and make usage easy to understand."]},{value:"billing",q:"Is this a monthly subscription?",a:["No. Request units are pay-as-you-go â buy what you need and draw them down as you go. Your free 3,000 managed + 1,000 self-hosted units refresh each month; anything you pay for is yours to keep.","Platform isn't a subscription or a fee either â it unlocks while your account holds at least 100,000 paid units (about $199/mo of usage). Any top-ups count toward it, the units are still yours to spend, and they roll over. You're always paying for units, never for status."]},{value:"custom-packages",q:"Need a bigger or custom package?",a:["Just ask â we'll sort it out. Custom sizes, volume rates, different managed/self-hosted splits, invoicing or bank transfer: contact us and we'll set up a package that appears directly in your account, ready to purchase.","If you're running serious volume (hundreds of thousands of units and up), that's exactly the conversation we want to have."]},{value:"rollover",q:"Do request units roll over?",a:["Yes â unused **paid** units roll over so you never lose what you've bought, for up to 12 months from purchase.","Your **free** monthly allowance refreshes at the start of each month and doesn't stack â and when a request runs, free units are always drawn down before paid ones."]},{value:"diff",q:"What is the difference between AP-Hosted & Self-Hosted request units?",a:["If you are running your config on our backend, they are deducted from your hosted/managed units balance.","If you are self hosting your configs, they are deducted from your self hosted/unmanaged units balance.","You are allowed to use both offerings / units simultaneously to suit your needs."]},{value:"config",q:"What is a config?",a:["An Air Pipe config is a simple YAML file â you can define interfaces to trigger such as HTTP routes, or have it operate as a CLI based tool etc. These interfaces can have many actions configured to fetch and process data."]},{value:"action",q:"What is an action?",a:["An action could be: fetch data from this HTTP endpoint, run this command, make this database query etc. You can use any number or any combination of them in your config."]},{value:"payment",q:"How do you process payments?",a:["We use AirWallex payment links, and for other customer cases we can accept bank transfers in particular currencies on a case by case basis.","https://www.airwallex.com/"]},{value:"scenario-1",q:"Scenario: My config or API request ran for 900ms",a:["That's one request unit. Anything up to a full second is a single unit â we bill in whole seconds and round in your favor. No fractions, no multipliers, no per-step math."]},{value:"scenario-2",q:"Scenario: My config or API request ran for 4900ms",a:["Five request units â one per second. It doesn't matter how many actions, connections, or AI calls ran inside it; you're billed by time, not complexity."]},{value:"scenario-3",q:"Scenario: My config needs to make 100 actions, and connect to many DBs and APIs",a:["We don't care how many actions or connections you make.","You're billed by request units: under a second is one unit, five seconds is five. 100 actions across ten databases in 800ms? One unit."]},{value:"overage",q:"What happens if I run out of units?",a:["Your workflows don't halt without warning. We alert you as you approach your balance, and you can top up or roll into usage â no silent shut-offs, no lost runs, no surprise overages."]}],br={database:"Native database driver",google:"Google service account",aws:"AWS signed request",email:"Native email action",mqtt:"Native MQTT",http:"One http: action"},At=[{slug:"postgres",name:"PostgreSQL",iconKey:"postgres",group:"Databases",via:"database",auth:"Connection string",blurb:"Query Postgres directly from a config â parameterised, pooled, and traced per statement.",snippet:`- name: ListOrders 32 database: main 33 query: SELECT * FROM orders WHERE status = $1 34 params: [a|query::status|]`,packTags:["postgres","postgresql"],note:"Postgres-compatible engines work on the same driver â CockroachDB, YugabyteDB and Timescale included."},{slug:"mysql",name:"MySQL",iconKey:"mysql",group:"Databases",via:"database",auth:"Connection string",blurb:"MySQL and MariaDB on the native driver, with the same parameterised query action as every other database.",snippet:`- name: GetUser 35 database: main
36 query: SELECT id, email FROM users WHERE id = ? 37 params: [a|body::id|]`,packTags:["mysql","mariadb"],note:"MySQL-compatible engines â TiDB and PlanetScale â use the same driver."},{slug:"mongodb",name:"MongoDB",iconKey:"mongodb",group:"Databases",via:"database",auth:"Connection string",blurb:"Document operations against MongoDB, Atlas, Azure Cosmos DB or Amazon DocumentDB.",snippet:`- name: FindActive 38 database: main 39 document_operation: 40 collection: users 41 find: { "active": true }`,packTags:["mongodb","mongo","atlas"]},{slug:"sqlite",name:"SQLite",iconKey:"sqlite",group:"Databases",via:"database",auth:"File path",blurb:"An embedded database in the same single binary â the fastest way to get a real API with real storage running.",snippet:`- name: Recent 42 database: main 43 query: SELECT * FROM events ORDER BY id DESC LIMIT 20`,packTags:["sqlite"]},{slug:"sql-server",name:"SQL Server",iconKey:"database",group:"Databases",via:"database",auth:"Connection string",blurb:"Microsoft SQL Server on the native driver â the same query action, against the database your enterprise already runs.",snippet:`- name: Lookup 44 database: main 45 query: SELECT TOP 20 * FROM dbo.Orders WHERE CustomerId = @P1 46 params: [a|query::customer|]`,packTags:["mssql","sqlserver"]},{slug:"pgvector",name:"pgvector",iconKey:"postgres",group:"Databases",via:"database",auth:"Connection string",blurb:"Vector search on the Postgres you already run â embeddings in, nearest neighbours out, no separate vector database to operate.",snippet:`- name: Search 47 database: main 48 query: SELECT id, body FROM docs ORDER BY embedding <-> $1 LIMIT 5 49 params: [a|Embed::content|]`,packTags:["pgvector","vector-search","rag","embeddings"]},{slug:"openai",name:"OpenAI",iconKey:"openai",group:"AI & agents",via:"http",auth:"Bearer token",blurb:"Chat completions, embeddings and tool-calling agents. The agent action speaks the OpenAI shape, so this is one line of config.",snippet:`- name: Ask 50 agent: 51 url: https://api.openai.com/v1/chat/completions 52 model: gpt-4o-mini 53 headers: 54 Authorization: "Bearer a|ap_var::OPENAI_KEY|" 55 tools: [inventory/lookup, orders/create] 56 input: a|body::question|`,packTags:["openai","llm","gpt"]},{slug:"anthropic",name:"Anthropic",iconKey:"anthropic",group:"AI & agents",via:"http",auth:"API key header",blurb:"Claude as the model behind an agent action, or as a plain completion call in the middle of a workflow.",snippet:`- name: Ask 57 agent: 58 url: https://api.anthropic.com/v1/chat/completions 59 model: claude-sonnet-4-5 60 headers: 61 Authorization: "Bearer a|ap_var::ANTHROPIC_KEY|" 62 input: a|body::question|`,packTags:["claude","anthropic"],note:"Identity-linked keys need an anthropic-workspace-id header, which goes in headers: like any other."},{slug:"gemini",name:"Google Gemini",iconKey:"gemini",group:"AI & agents",via:"http",auth:"Bearer token",blurb:"Gemini through its OpenAI-compatible endpoint â same agent action, different URL.",snippet:`- name: Ask 63 agent: 64 url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions 65 model: gemini-2.0-flash 66 headers: 67 Authorization: "Bearer a|ap_var::GEMINI_KEY|" 68 input: a|body::question|`,packTags:["gemini","google"]},{slug:"ollama",name:"Ollama",iconKey:"ollama",group:"AI & agents",via:"http",auth:"None (local)",blurb:"A model you host yourself, called from a config you host yourself. Nothing about the request leaves your network.",snippet:`- name: Ask 69 agent: 70 url: http://localhost:11434/v1/chat/completions 71 model: llama3.1 72 input: a|body::question|`,packTags:["ollama","self-hosted","llm"]},{slug:"slack",name:"Slack",iconKey:"slack",group:"Messaging",via:"http",auth:"Bearer token",blurb:"Post messages, handle slash commands and respond to interactive components â all as ordinary HTTP in and HTTP out.",snippet:`- name: Notify 73 http: 74 method: POST 75 url: https://slack.com/api/chat.postMessage 76 bearer_auth: a|ap_var::SLACK_BOT_TOKEN| 77 body: | 78 { "channel": "#alerts", "text": a|Check::summary| }`,packTags:["slack"]}
78,{slug:"discord",name:"Discord",iconKey:"discord",group:"Messaging",via:"http",auth:"Bot token · Ed25519 verify",blurb:"Webhooks in, bot messages out, and signature verification on interactions without a library to keep current.",snippet:`- name: Post 79 http: 80 method: POST 81 url: "https://discord.com/api/webhooks/a|ap_var::DISCORD_ID|/a|ap_var::DISCORD_TOKEN|" 82 body: | 83 { "content": a|Build::message| }`,packTags:["discord"]},{slug:"telegram",name:"Telegram",iconKey:"telegram",group:"Messaging",via:"http",auth:"Token in path",blurb:"A bot endpoint is a webhook interface and one http action â including AI bots that answer with a model in between.",snippet:`- name: Reply 84 http: 85 method: POST 86 url: "https://api.telegram.org/bota|ap_var::TELEGRAM_BOT_TOKEN|/sendMessage" 87 body: | 88 { "chat_id": a|body::message.chat.id|, "text": a|Ask::content| }`,packTags:["telegram"]},{slug:"twilio",name:"Twilio",iconKey:"twilio",group:"Messaging",via:"http",auth:"Basic auth",blurb:"Send SMS, receive SMS as a webhook, and put a model between the two if you want the bot to answer.",snippet:`- name: SendSms 89 http: 90 method: POST 91 url: "https://api.twilio.com/2010-04-01/Accounts/a|ap_var::TWILIO_SID|/Messages.json" 92 basic_auth: 93 username: a|ap_var::TWILIO_SID| 94 password: a|ap_var::TWILIO_TOKEN|`,packTags:["twilio","sms"]},{slug:"resend",name:"Resend",iconKey:"resend",group:"Messaging",via:"email",auth:"API key",blurb:"Transactional email as a first-class action â no SMTP server to babysit and no template engine to install.",snippet:`- name: SendDigest 95 email: 96 provider: resend 97 to: a|Row::email| 98 subject: "Your daily digest" 99 body: a|Render::html|`,packTags:["resend","email","smtp"]},{slug:"smtp",name:"SMTP",iconKey:"email",group:"Messaging",via:"email",auth:"Username + password",blurb:"Any SMTP server, including the one inside your own network, as a native action rather than a shelled-out script.",snippet:`- name: Send 100 email: 101 provider: smtp 102 to: a|body::email| 103 subject: "Welcome" 104 body: a|Render::html|`,packTags:["smtp","email"]},{slug:"stripe",name:"Stripe",iconKey:"stripe",group:"Commerce",via:"http",auth:"Bearer token · HMAC webhooks",blurb:"Receive webhooks with signature verification, write them to your database idempotently, and call the API back â in one config.",snippet:`- name: VerifyAndStore 105 database: main 106 query: | 107 INSERT INTO stripe_events (id, type, payload) VALUES ($1, $2, $3) 108 ON CONFLICT (id) DO NOTHING 109 params: [a|body::id|, a|body::type|, a|body|]`,packTags:["stripe","payments","mrr","subscriptions"]},{slug:"shopify",name:"Shopify",iconKey:"shopify",group:"Commerce",via:"http",auth:"Access token · HMAC webhooks",blurb:"Order and product webhooks verified, stored and fanned out to whatever else needs to know.",snippet:`- name: StoreOrder 110 database: main 111 query: INSERT INTO orders (shop_id, total) VALUES ($1, $2) 112 params: [a|body::id|, a|body::total_price|]`,packTags:["shopify","ecommerce"]},{slug:"github",name:"GitHub",iconKey:"github",group:"Developer tools",via:"http",auth:"Token · HMAC webhooks",blurb:"Repository webhooks in, the REST API out â and a schedule in the same config for the things nobody wants to poll by hand.",snippet:`- name: Comment 113 http: 114 method: POST 115 url: "https://api.github.com/repos/a|ap_var::REPO|/issues/a|body::number|/comments" 116 bearer_auth: a|ap_var::GITHUB_TOKEN| 117 body: | 118 { "body": a|Summarise::content| }`,packTags:["github"]},{slug:"airtable",name:"Airtable",iconKey:"airtable",group:"Developer tools",via:"http",auth:"Bearer token",blurb:"Sync records both ways on a schedule, with pagination handled as a loop in the config rather than a cursor you maintain.",snippet:`- name: Fetch 119 http: 120 url: "https://api.airtable.com/v0/a|ap_var::BASE_ID|/Contacts" 121 bearer_auth: a|ap_var::AIRTABLE_KEY|`,packTags:["airtable"]},{slug:"graphql",name:"GraphQL",iconKey:"graphql",group:"Developer tools",via:"http",auth:"Whatever the endpoint uses",blurb:"A GraphQL call is a POST with a query string. No client library, no codegen step, no schema to vendor.",snippet:`- name: Query 122 http: 123 method: POST 124 url: a|ap_var::GRAPHQL_URL| 125 bearer_auth: a|ap_var::GRAPHQL_TOKEN| 126 body: | 127 { "query": "{ viewer { login } }" }`,packTags:["graphql"]},{slug:"kubernetes",name:"Kubernetes",iconKey:"kubernetes",group:"Developer tools",via:"http",auth:"Service account token",blurb
127:"Service discovery against the Kubernetes API, so a config can route to pods that did not exist when it was written.",snippet:`- name: Pods 128 http: 129 url: "https://kubernetes.default.svc/api/v1/namespaces/default/pods" 130 bearer_auth: a|ap_var::K8S_TOKEN|`,packTags:["kubernetes","k8s","service-discovery"]},{slug:"docker",name:"Docker",iconKey:"docker",group:"Developer tools",via:"http",auth:"Socket or TCP",blurb:"Container discovery and health from the Docker API â and the engine itself ships as a container when you want it to.",snippet:`- name: Containers 131 http: 132 url: "http://localhost:2375/containers/json"`,packTags:["docker","container-discovery"]},{slug:"auth0",name:"Auth0",iconKey:"auth0",group:"Auth & identity",via:"http",auth:"OIDC · JWKS",blurb:"Verify Auth0 tokens against JWKS in front of every route, with the claims available to the actions behind it.",snippet:`auth: 133 jwt: 134 jwks_url: "https://a|ap_var::AUTH0_DOMAIN|/.well-known/jwks.json" 135 audience: a|ap_var::AUTH0_AUDIENCE|`,packTags:["auth0","oidc","jwks","jwt"]},{slug:"supabase",name:"Supabase",iconKey:"supabase",group:"Auth & identity",via:"database",auth:"Connection string · JWT",blurb:"Supabase is Postgres, so the native driver talks to it directly â and its JWTs verify in front of the route.",snippet:`- name: ListRows 136 database: main 137 query: SELECT * FROM public.profiles WHERE id = $1 138 params: [a|jwt::sub|]`,packTags:["supabase"]},{slug:"firebase",name:"Firebase",iconKey:"firebase",group:"Auth & identity",via:"google",auth:"Service account",blurb:"Push notifications through FCM, using the same signed-JWT exchange as every other Google service.",snippet:`- name: Token 139 google: 140 credential: main 141 create_token: 142 scopes: ["https://www.googleapis.com/auth/firebase.messaging"]`,packTags:["fcm","firebase","push"]},{slug:"google-sheets",name:"Google Sheets",iconKey:"googlesheets",group:"Google",via:"google",auth:"Service account",blurb:"One action mints the token, the next is plain REST. The hard part of Google â the signed JWT exchange â is the part you do not write.",snippet:`- name: GetToken 143 hide_data_on_success: true 144 google: 145 credential: main 146 create_token: 147 scopes: ["https://www.googleapis.com/auth/spreadsheets"] 148 149- name: Read 150 run_when_succeeded: [GetToken] 151 http: 152 url: "https://sheets.googleapis.com/v4/spreadsheets/a|ap_var::SHEET_ID|/values/Sites!A2:B" 153 headers: 154 Authorization: a|GetToken|`,packTags:["google-sheets","sheets","google"],note:"The same two actions reach Drive, Gmail, Docs, Calendar, BigQuery and Cloud Storage â change the scope and the URL."},{slug:"bigquery",name:"BigQuery",iconKey:"bigquery",group:"Google",via:"google",auth:"Service account",blurb:"Run a query on a schedule and email, post or store the result â the token exchange is one action.",snippet:`- name: GetToken 155 hide_data_on_success: true 156 google: 157 credential: main 158 create_token: 159 scopes: ["https://www.googleapis.com/auth/bigquery"]`,packTags:["bigquery","google","analytics"]},{slug:"s3",name:"Amazon S3",iconKey:"s3",group:"Storage",via:"aws",auth:"SigV4",blurb:"Presigned uploads and downloads, and objects read straight into a workflow â signing handled for you.",snippet:`- name: Presign 160 aws: 161 s3: 162 bucket: a|ap_var::BUCKET| 163 key: a|body::filename| 164 presign: put 165 expires_in: 900`,packTags:["s3","storage","presigned","upload"]},{slug:"cloudflare",name:"Cloudflare",iconKey:"cloudflare",group:"Storage",via:"http",auth:"Bearer token",blurb:"R2 speaks the S3 API, and the rest of Cloudflare's control plane is ordinary REST.",snippet:`- name: PurgeCache 166 http: 167 method: POST 168 url: "https://api.cloudflare.com/client/v4/zones/a|ap_var::ZONE|/purge_cache" 169 bearer_auth: a|ap_var::CF_TOKEN| 170 body: '{ "purge_everything": true }'`,packTags:["cloudflare"]},{slug:"mqtt",name:"MQTT",iconKey:"mqtt",group:"Realtime",via:"mqtt",auth:"Username + password · TLS",blurb:"Publish and subscribe natively â and run the broker itself from the same binary if you would rather not operate one.",snippet:`- name: Publish 171 mqtt: 172 topic: "devices/a|body::device_id|/commands" 173 payload: a|body::command|`,packTags:["mqtt","iot","broker"]}
173,{slug:"prometheus",name:"Prometheus",iconKey:"prometheus",group:"Observability",via:"http",auth:"None (scrape)",blurb:"Every deployment exposes /metrics, labelled by interface rather than by URL â so IDs in paths never blow up cardinality.",snippet:`# Nothing to configure. Point a scrape job at: 174# https://your-deployment/metrics`,packTags:["prometheus","monitoring","observability"],note:"The self-hosted binary exposes /metrics directly; on managed cloud, metrics are surfaced through the platform rather than scraped from the instance."},{slug:"grafana",name:"Grafana",iconKey:"grafana",group:"Observability",via:"http",auth:"None (scrape)",blurb:"The metrics are plain Prometheus and the traces are plain OTLP, so a Grafana stack needs no adapter to read them.",snippet:`# Prometheus datasource â your /metrics endpoint 175# Tempo datasource â your OTLP collector`,packTags:["grafana","monitoring","observability"]},{slug:"opentelemetry",name:"OpenTelemetry",iconKey:"opentelemetry",group:"Observability",via:"http",auth:"Collector endpoint",blurb:"Set one environment variable and every request becomes an end-to-end trace â request, action, database call and lookup.",snippet:`# One environment variable: 176# OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317`,packTags:["opentelemetry","otel","tracing","observability"]},{slug:"datadog",name:"Datadog",iconKey:"datadog",group:"Observability",via:"http",auth:"Collector endpoint",blurb:"Datadog's OTLP intake takes the traces as they are. No agent to install beside the binary, no instrumentation to write.",snippet:`# Point OTEL_EXPORTER_OTLP_ENDPOINT at the 177# Datadog Agent's OTLP receiver.`,packTags:["datadog","observability"]}];Object.fromEntries(At.map(e=>[e.slug,e]));const T3=[...new Set(At.map(e=>e.group))],wr={database:e=>`Build a ${e} API from one config.`,google:e=>`${e}, without writing the OAuth dance.`,aws:e=>`${e} in your workflow, signed for you.`,email:()=>"Send email from a config, not a side service.",mqtt:e=>`${e} publish, subscribe and broker from one config.`,http:e=>`${e} in a config. No connector required.`},kr={database:e=>`${e} REST API, workflows and MCP tools from one config | Air Pipe`,google:e=>`${e} API from one config â service account handled | Air Pipe`,aws:e=>`${e} from one config â presigned and signed for you | Air Pipe`,email:e=>`Send email with ${e} from one config | Air Pipe`,mqtt:e=>`${e} publish, subscribe and broker from one config | Air Pipe`,http:e=>`${e} API, webhooks and agent tools from one config | Air Pipe`},xr={database:e=>`${e} has a native driver in the engine. A query action takes the statement and its parameters separately â so the values are bound, never interpolated into SQL â and the connection is pooled for you. Every statement becomes a span in the request's trace, with its timing attached.`,google:e=>`Google is the one auth scheme that genuinely warrants help, because it needs a signed JWT exchanged for a short-lived token. The \`google:\` action does that in one step and you choose the scopes. After that, ${e} is ordinary REST â an \`http:\` action with the token in a header.`,aws:e=>`${e} needs SigV4 request signing, which is the part nobody wants to hand-roll. The AWS action set handles the signature, so what you write is the operation and its parameters.`,email:()=>"Email is a native action rather than an HTTP call you assemble, because the useful part â attachments, HTML bodies, provider differences â is exactly what you would otherwise reimplement. Switching provider is a one-line change.",mqtt:e=>`${e} is native: publish and subscribe are actions, and a subscription can trigger a flow the same way an HTTP request or a cron schedule does. The engine can also run the broker itself, so there is no separate service to operate.`,http:e=>`There is no ${e} connector, because there does not need to be one. ${e}'s API is HTTP, so it is one \`http:\` action â the method, the URL, the auth helper for its scheme, and the body. The same action reaches every other API you use, including the ones that do not exist yet.`},tt={connector:(e,t)=>
177({q:`Is there a ${e} connector I have to install?`,a:t==="http"?`No â and there is no queue to join waiting for one. Air Pipe has no connector catalogue by design. ${e} is reached with the same \`http:\` action as every other API, which is why a service released this morning works as well as one released a decade ago.`:`No. ${e} is reached through a native action that ships with the engine â nothing to install, enable or version separately.`}),creds:{q:"Where do the credentials live?",a:"In managed variables or secrets, referenced from the config by name â never in the config text. Any action that mints a token should also carry `hide_data_on_success: true`, or the token comes back in the response body."},agent:()=>({q:"Can an agent call this?",a:"Yes, and you do not build anything extra for it. Mark the interface `mcp: true` and the same route becomes an MCP tool, with its input schema derived from the assertions the route already carries. An agent calling it gets the same auth, the same validation and the same traces as an HTTP client."}),observe:{q:"What do I get to see when it fails?",a:"An end-to-end OpenTelemetry trace covering the request, each action and each database call, Prometheus counters and durations on /metrics, and the run history for the deployment. None of it is written by you and none of it is a separate product."}};function Ar(e){const{name:t,slug:o,via:n,auth:s,blurb:r,snippet:i,note:l,group:h}=e,u=[{heading:`How Air Pipe reaches ${t}`,body:xr[n](t),code:i,points:[`Route: ${br[n]}`,`Auth: ${s}`,...l?[l]:[]]},{heading:"The same config is four things at once",body:`Whatever you build against ${t} is not locked to one surface. The same config can expose HTTP routes, run on a cron schedule, receive webhooks, and be called by an agent as an MCP tool â with one auth model and one deploy. You do not rebuild the workflow to make it callable, and you do not bolt an MCP node onto the end of a canvas.`,points:["HTTP routes with OpenAPI docs generated from the config","Cron schedules and webhooks in the same file as the API","MCP tools with input schemas derived from the route's own assertions","OpenTelemetry traces and Prometheus metrics on all of it"]},{heading:"Readable config you own, managed or self-hosted",body:`The artifact is a config you can read, diff and review in a pull request â not a canvas stored in a vendor's database. Run it on Air Pipe's managed cloud or self-host the single binary, with the same config either way, and
177your ${h==="Databases"?"data":"credentials and data"} staying on your infrastructure when you choose to self-host.`}];return{slug:o,path:`/integrations/${o}`,kind:"integration",iconKey:e.iconKey,packTags:e.packTags,seoTitle:kr[n](t),seoDescription:`${r} Readable config, OpenAPI, Prometheus metrics and OpenTelemetry tracing built in. Managed cloud or self-hosted. Start free.`,eyebrow:h,h1:wr[n](t),lead:r,sections:u,faq:[tt.connector(t,n),tt.creds,tt.agent(),tt.observe],docsUrl:n==="database"?"https://docs.airpipe.io/docs/features/databases":"https://docs.airpipe.io/docs/features/connectors"}}const ma=At.map(Ar),M3=Object.fromEntries(ma.map(e=>[e.slug,e])),ct={path:"/integrations",seoTitle:"Integrations â databases, AI, messaging and every other API | Air Pipe",seoDescription:"Air Pipe has no connector catalogue, and that is deliberate. Native drivers for databases, Google and MQTT; one http: action for every other API â including the one released this morning. See the config for each.",eyebrow:"Integrations",h1:"Every API, including the one released this morning.",lead:"Air Pipe ships no connector catalogue. Databases, Google services, AWS, email and MQTT have native actions; everything else is a single http: action. The practical effect is that the service you need is already supported â there is no node to install and no roadmap to wait for."},mt="https://api.airpipe.io/<org>/<env>/mcp",Pr="https://your-deployment/mcp",Le=(e="mcpServers")=>`{ 178 "${e}": { 179 "airpipe": { 180 "url": "${mt}", 181 "headers": { "Authorization": "Bearer <your-token>" } 182 } 183 } 184}`,ro=[{slug:"claude-code",name:"Claude Code",iconKey:"claude",kindLabel:"CLI",setup:"command",configFile:null,snippet:`claude mcp add --transport http airpipe \\ 185 ${mt} \\ 186 --header "Authorization: Bearer <your-token>"`,blurb:"Add the deployment as a Streamable HTTP server and Claude Code can call your interfaces as tools while it works in your repo.",docsUrl:"https://docs.anthropic.com/en/docs/claude-code/mcp",connectLabel:"claude mcp add airpipe",connectResult:"connected · 4 tools"},{slug:"claude-desktop",name:"Claude Desktop",iconKey:"claude",kindLabel:"Desktop app",setup:"ui",configFile:"Settings â Connectors â Add custom connector",snippet:null,blurb:"Add the deployment's MCP URL as a custom connector. Claude can then read and act through your interfaces in ordinary conversation.",docsUrl:"https://modelcontextprotocol.io/docs/develop/connect-local-servers",connectLabel:"airpipe connector authorised",connectResult:"4 tools available"},{slug:"chatgpt",name:"ChatGPT",iconKey:"openai",kindLabel:"Connector",setup:"ui",configFile:"Settings â Connectors â Add custom connector",snippet:null,blurb:"Point ChatGPT's custom connector at the deployment's MCP endpoint and your interfaces become tools it can call.",docsUrl:"https://platform.openai.com/docs/mcp",connectLabel:"airpipe connector authorised",connectResult:"4 tools available"},{slug:"cursor",name:"Cursor",iconKey:"cursor",kindLabel:"Editor",setup:"file",configFile:"~/.cursor/mcp.json (or .cursor/mcp.json in the project)",snippet:Le(),blurb:"Cursor's agent reads the same tools your HTTP clients call, so it can query and change real data while you build.",docsUrl:"https://docs.cursor.com/context/model-context-protocol",connectLabel:"cursor - mcp.json loaded",connectResult:"airpipe · 4 tools"},{slug:"windsurf",name:"Windsurf",iconKey:"code",kindLabel:"Editor",setup:"file",configFile:"~/.codeium/windsurf/mcp_config.json",snippet:Le(),blurb:"Cascade picks up the deployment's tools and can call them mid-task, with the same auth an HTTP client would need.",docsUrl:"https://docs.windsurf.com/windsurf/cascade/mcp",connectLabel:"windsurf - mcp_config.json loaded",connectResult:"airpipe · 4 tools"},{slug:"vscode-copilot",name:"VS Code Copilot",iconKey:"code",kindLabel:"Editor",setup:"file",configFile:".vscode/mcp.json",snippet:`{ 187 "servers": { 188 "airpipe": { 189 "type": "http", 190 "url": "${mt}", 191 "headers": { "Authorization": "Bearer <your-token>" } 192 } 193 } 194}`,blurb:"In agent mode, Copilot can call your deployed interfaces as tools without leaving the editor.",docsUrl:"https://code.visualstudio.com/docs/copilot/chat/mcp-servers",connectLabel:"vscode - mcp.json loaded",connectResult:"airpipe · 4 tools"},{slug:"gemini-cli",name:"Gemini CLI",iconKey:"gemini",kindLabel:"CLI",setup:"file",configFile:"~/.gemini/settings.json",snippet:Le(),blurb:"Gemini CLI reads MCP servers from its settings file and can then call your interfaces as tools from the terminal.",docsUrl:"https://github.com/google-gemini/gemini-cli",connectLabel:"gemini - settings.json loaded",connectResult:"airpipe · 4 tools"},{slug:"zed",name:"Zed",iconKey:"code",kindLabel:"Editor",setup:"file",configFile:"Zed settings.json â context_servers",snippet:Le("context_servers"),blurb:"Zed calls MCP servers context servers. Add the deployment there and its assistant can use your tools.",docsUrl:"https://zed.dev/docs/ai/mcp",connectLabel:"zed - context server connected",connectResult:"airpipe · 4 tools"},{slug:"cline",name:"Cline",iconKey:"code",kindLabel:"Editor extension",setup:"file",configFile:"cline_mcp_settings.json",snippet:Le(),blurb:"Cline loads remote MCP servers from its settings file, so your interfaces show up as tools in its task loop.",docsUrl:"https://docs.cline.bot/mcp/connecting-to-a-remote-server",connectLabel:"cline - mcp settings loaded",connectResult:"airpipe · 4 tools"},{slug:"n8n",name:"n8n",iconKey:"workflow",kindLabel:"Automation platform",setup:"ui",configFile:"MCP Client Tool node â HTTP Streamable",snippet:null,blurb:"n8n can consume your Air Pipe deployment as an MCP tool â which is the honest way to run both:
194n8n for the canvas, Air Pipe for the backend behind it.",docsUrl:"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolmcp/",connectLabel:"n8n - MCP Client Tool",connectResult:"airpipe · 4 tools"}];Object.fromEntries(ro.map(e=>[e.slug,e]));const Tr={command:e=>`${e.name} adds remote MCP servers from the command line. Run this once against the deployment you want it to reach â the endpoint is the one Air Pipe serves for that organisation and environment, and the token is whatever credential the interfaces behind it already require.`,file:e=>`${e.name} reads its MCP servers from \`${e.configFile}\`. Add the deployment there. The endpoint is the one Air Pipe serves for that organisation and environment; the header carries whatever credential the interfaces behind it already require.`,ui:e=>`${e.name} adds remote MCP servers through its own interface: ${e.configFile}. Give it the deployment's MCP endpoint and authorise it â there is no file to edit and no API key to paste into a config.`};function Mr(e){return{slug:e.slug,path:`/mcp/${e.slug}`,kind:"mcp-client",iconKey:e.iconKey,client:e,seoTitle:`Connect ${e.name} to your own API as MCP tools | Air Pipe`,seoDescription:`Set up ${e.name} against an Air Pipe deployment and call your own interfaces as MCP tools â same auth as the HTTP route, input schemas generated from its assertions, every call traced. Start free.`,eyebrow:`MCP · ${e.kindLabel}`,h1:`Give ${e.name} tools that are already a real backend.`,lead:`${e.blurb} The tools are your own interfaces â the same routes your apps call, with the same auth in front of them and the same traces behind them.`,sections:[{heading:`Set up ${e.name}`,body:Tr[e.setup](e),code:e.snippet,points:[`Managed endpoint: ${mt}`,`Self-hosted endpoint: ${Pr}`,"Credential is forwarded as Authorization: Bearer â the same one the HTTP route requires"]},{heading:"The tools are routes you already have",body:"An interface becomes a tool with an `mcp:` block on it â no second implementation, no separate server to run. The tool's input schema is generated from the `assert` tests the interface already carries, so the signature an agent sees cannot drift from what the route actually validates.",points:["`mcp: true` on an interface publishes it as a tool","Input schema derived from the route's own assertions","`mcp_servers` declares the server's name and instructions for the client's UI","`list_authorizer` scopes which tools a given caller can even see"]},{heading:"Same auth, same traces, no new blast radius",body:`Exposing a route to ${e.name} does not open a side door. The forwarded credential is checked by the same JWT verification and network access control that guards the HTTP route, and every tool call produces the same OpenTelemetry trace and Prometheus metrics as an ordinary request. An agent that misbehaves is visible in the tooling you already run.`}],faq:[{q:`Do I have to build a separate MCP server for ${e.name}?`,a:"No. The MCP endpoint is served by the same deployment as your HTTP routes, from the same config. Marking an interface `mcp:` publishes it; there is no second process, no second container and no second thing to keep in sync."},{q:"Can an agent see tools it is not allowed to call?",a:"By default a tool with `mcp.enabled` is publicly discoverable â anyone who can reach the endpoint sees its name, description and input schema, though calling it still requires whatever auth the interface enforces. When the catalogue itself is sensitive, `list_authorizer` names an interface that decides visibility per caller, run with the caller's forwarded credential."},{q:"Does this work self-hosted?",a:`Yes. Self-hosted deployments serve the default MCP server at /mcp and named servers at /mcp/<id>; managed deployments serve them under /<org>/<env>/. ${e.name} does not care which, and the config is identical either way.`},{q:"What happens when the API behind the tool changes?",a:"The tool signature changes with it, because the schema is generated from the route's assertions rather than hand-written alongside them. There is no second copy to forget."}],docsUrl:"https://docs.airpipe.io/docs/configuration/mcp-tools",externalDocs:{label:`${e.name} MCP docs`,href:e.docsUrl}}}const ya=ro.map(Mr),S3=Object.fromEntries(ya.map(e=>[e.slug,e])),ht={path:"/mcp",seoTitle:"Air Pipe MCP server â connect any AI client to your own API | Air Pipe",seoDescription:"Every Air Pipe deployment serves an MCP endpoint from the same config as its HTTP routes. Set up Claude Code, Claude Desktop, ChatGPT, Cursor, VS Code, Zed and more against your own interfaces. Start free.",eyebrow:"MCP",h1:"Connect any AI client to your own API.",lead:"An Air Pipe interface becomes an MCP tool with one block of config â same route, same auth, same traces, no second server. Here is the setup for every client we have written up, and the tools are yours, not ours."},U="https://airpipe.io",io="/banner1.jpg",Sr="@AirPipeIO",_r=Object.fromEntries(fr.map(({value:e,label:t})=>[e,t]));function ge(e){if(!e)return U+"/";const t=e.startsWith("/")?e:"/"+e;return t.endsWith("/")||t.slice(t.lastIndexOf("/")+1).includes(".")?U+t:U+t+"/"}function fa(e,t=155){if(!e)return"";const o=e.replace(/\s+/g," ").trim();return o.length<=t?o:o.slice(0,t-1).trimEnd()+"â¦"}function Pt(e){return String(e??"").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/\*\*(.+?)\*\*/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/\s+/g," ").trim()}const lo=[{path:"/",title:"Unified backend for APIs, workflow automation & AI agents | Air Pipe",description:"Unified backend for APIs, workflow automation and AI agents. One
194config becomes an HTTP API, a schedule and an MCP tool your agents call. OpenAPI, Prometheus and OpenTelemetry built in. Start free.",priority:1,changefreq:"weekly"},{path:"/pricing",title:"Pricing · Air Pipe",description:"Simple, usage-based pricing for Air Pipe. Start free â no card. Managed cloud or self-hosted. Governance-based tiers, request-unit metering, and enterprise options.",priority:.9,changefreq:"monthly"},{path:"/limits",title:"Limits · Air Pipe",description:"Air Pipe plan limits and allowances. Unlimited users, configs and modules on every plan â API keys, roles, connections, secrets and version history scale with your tier.",priority:.7,changefreq:"monthly"},{path:"/marketplace",title:"Marketplace · Air Pipe",description:"Fork a ready-made Air Pipe pack and deploy in minutes â REST APIs, AI agents, RAG, MCP servers, webhooks and automations, all as readable config.",priority:.9,changefreq:"daily"},{path:"/contact",title:"Contact · Air Pipe",description:"Talk to the Air Pipe team â book a demo or ask a question.",priority:.5,changefreq:"yearly"},{path:"/terms",title:"Terms of Service · Air Pipe",description:"Air Pipe Terms of Service.",priority:.2,changefreq:"yearly"},{path:"/privacy",title:"Privacy Policy · Air Pipe",description:"Air Pipe Privacy Policy.",priority:.2,changefreq:"yearly"},{path:"/blog",title:"Blog · Air Pipe",description:"Practical writing on APIs, MCP tools, auth and observability â walkthroughs you can follow end to end, with the config and packs behind them.",priority:.7,changefreq:"weekly"},{path:"/blog/archive",title:"All articles · Air Pipe blog",description:"Every Air Pipe article â walkthroughs on APIs, MCP tools, auth, databases and observability, searchable by keyword and tag.",priority:.5,changefreq:"weekly"},...He.map(e=>({path:e.path,title:`${e.title} | Air Pipe`,description:e.description,priority:.6,changefreq:"monthly",publishedTime:e.date,modifiedTime:e.updated||e.date,image:e.image?e.image.replace(/\.svg$/,".png"):void 0})),...[...ga,...xt].map(e=>({path:e.path,title:e.seoTitle,description:e.seoDescription,priority:e.path.startsWith("/compare/")?.8:.7,changefreq:"monthly"})),{path:ct.path,title:ct.seoTitle,description:ct.seoDescription,priority:.8,changefreq:"weekly"},{path:ht.path,title:ht.seoTitle,description:ht.seoDescription,priority:.8,changefreq:"weekly"},...[...ma,...ya].map(e=>({path:e.path,title:e.seoTitle,description:e.seoDescription,priority:.6,changefreq:"monthly"}))],Cr=[...ma,...ya],Ir=Object.fromEntries(Cr.map(e=>[e.path,e]));function _3(e){return lo.find(t=>t.path===e)}function C3(e,t){const o=_r[e]||e;return{path:`/marketplace/category/${e}`,title:`${o} packs · Air Pipe Marketplace`,description:fa(`Ready-made Air Pipe packs for ${o.toLowerCase()}${t?` (${t})`:""} â deploy in minutes, all as readable config with tracing, metrics and docs built in.`),priority:.7,changefreq:"weekly"}}function I3(e){return{path:`/marketplace/pack/${e.slug}`,title:`${e.name} · Air Pipe Marketplace`,description:fa(Pt(e.description)||`${e.name} â an Air Pipe pack.`),priority:.6,changefreq:"weekly"}}function jr(e){var t;return{"@context":"https://schema.org","@type":"BlogPosting",headline:e.title,description:e.description,datePublished:e.date,dateModified:e.updated||e.date,keywords:((t=e.tags)==null?void 0:t.join(", "))||void 0,mainEntityOfPage:{"@type":"WebPage","@id":ge(e.path)},url:ge(e.path),image:ge(io),author:{"@type":"Organization",name:"Air Pipe",url:U+"/"},publisher:{"@type":"Organization",name:"Air Pipe",url:U+"/",logo:{"@type":"ImageObject",url:U+"/images/ap-logo-512x512.png"}}}}function at(){return{"@context":"https://schema.org","@type":"Organization",name:"Air Pipe",url:U+"/",logo:U+"/images/ap-logo-512x512.png",sameAs:["https://www.linkedin.com/company/airpipeio","https://x.com/AirPipeIO","https://github.com/AirPipeIO","https://www.youtube.com/@AirPipeIO","https://discord.gg/b8mFtjWXZj"]}}function Er(){return{"@context":"https://schema.org","@type":"SoftwareApplication",name:"Air Pipe",url:U+"/",description:"Unified backend for APIs, workflow automation and AI agents. One
194config becomes an HTTP API, a scheduled job, a webhook, a realtime channel and an MCP tool at the same time â written by prompt, forked from a marketplace pack, or by hand. Agents run inside it and call those same interfaces as tools. OpenAPI, Prometheus metrics and OpenTelemetry built in. Managed cloud or self-hosted single binary.",applicationCategory:"DeveloperApplication",operatingSystem:"Linux, macOS, Windows, Docker",offers:{"@type":"Offer",price:"0",priceCurrency:"USD",description:"Free tier â no credit card required.",url:"https://app.airpipe.io/register"},publisher:{"@type":"Organization",name:"Air Pipe",url:U+"/"}}}function Bt(e){return{"@context":"https://schema.org","@type":"FAQPage",mainEntity:e.map(t=>({"@type":"Question",name:t.q,acceptedAnswer:{"@type":"Answer",text:(Array.isArray(t.a)?t.a:[t.a]).map(Pt).join(" ")}}))}}function Ua(e){return{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.map((t,o)=>({"@type":"ListItem",position:o+1,name:t.name,item:ge(t.path)}))}}function zr(e){var n,s;if(e==="/")return[at(),Er()];if(e==="/pricing")return[Bt(vr)];if(e.startsWith("/blog/")){const r=He.find(i=>i.path===e);if(r)return[jr(r)]}const t=Ir[e];if(t){const r=t.kind==="mcp-client";return[at(),Ua([{name:"Home",path:"/"},r?{name:"MCP",path:ht.path}:{name:"Integrations",path:ct.path},{name:t.h1,path:t.path}]),...(n=t.faq)!=null&&n.length?[Bt(t.faq)]:[]]}const o=[...ga,...xt].find(r=>r.path===e);if(o){const r=o.path.startsWith("/compare/")?[{name:"Compare",path:o.path}]:[{name:"Features",path:o.path}];return[at(),Ua([{name:"Home",path:"/"},...r]),...(s=o.faq)!=null&&s.length?[Bt(o.faq)]:[]]}return[at()]}function j3(e){return{"@context":"https://schema.org","@type":"SoftwareApplication",name:e.name,description:fa(Pt(e.description),300),applicationCategory:"DeveloperApplication",operatingSystem:"Any",url:ge(`/marketplace/pack/${e.slug}`),offers:{"@type":"Offer",price:"0",priceCurrency:"USD"},softwareVersion:e.version,author:{"@type":"Organization",name:e.author||"Air Pipe"}}}function Or({title:e,description:t,path:o="/",image:n=io,type:s="website",noindex:r=!1,jsonLd:i=zr(o)}){const l=ge(o),h=n!=null&&n.startsWith("http")?n:ge(n),u=i?Array.isArray(i)?i:[i]:[];return a.jsxs(en,{prioritizeSeoTags:!0,children:[a.jsx("title",{children:e}),t&&a.jsx("meta",{name:"description",content:t}),a.jsx("link",{rel:"canonical",href:l}),r&&a.jsx("meta",{name:"robots",content:"noindex, follow"}),a.jsx("meta",{property:"og:title",content:e}),t&&a.jsx("meta",{property:"og:description",content:t}),a.jsx("meta",{property:"og:type",content:s}),a.jsx("meta",{property:"og:url",content:l}),a.jsx("meta",{property:"og:image",content:h}),a.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),a.jsx("meta",{name:"twitter:title",content:e}),t&&a.jsx("meta",{name:"twitter:description",content:t}),a.jsx("meta",{name:"twitter:image",content:h}),a.jsx("meta",{name:"twitter:site",content:Sr}),u.map((p,m)=>a.jsx("script",{type:"application/ld+json",children:JSON.stringify(p)},m))]})}const Rr="_audience_5q5nb_9",Lr={audience:Rr},Ht={heading:"Built for the people who own the backend",audiences:[{id:"platform-teams",title:"Backend & platform engineers",desc:"Ship services without standing up another framework, ORM layer and instrumentation stack for every internal tool."},{id:"api-teams",title:"Teams shipping B2B APIs",desc:"Multi-tenant APIs with auth, plan limits and per-customer isolation â defined as config you can read in a PR."},{id:"agent-builders",title:"AI agent & MCP builders",desc:"Expose your real systems as MCP tools agents can call, and see every call an agent made in a trace."},{id:"compliance-teams",title:"Self-host & compliance teams",desc:"Run the single binary in your own environment. Your data and your embeddings stay on your infrastructure."}],disambiguation:"Air Pipe is a developer platform for APIs, workflows and AI agents. It is not air-quality monitoring, HVAC, or physical pipe infrastructure."},Dr={"platform-teams":Es,"api-teams":De,"agent-builders":Pe,"compliance-teams":X};function qr(){return a.jsxs(K,{size:"lg",py:48,children:[a.jsx(te,{ta:"center",order:2,fz:{base:28,sm:36},fw:800,children:Ht.heading}),a.jsx(pe,{cols:{base:1,sm:2,md:4}
194,spacing:"xl",mt:40,children:Ht.audiences.map(e=>{const t=Dr[e.id];return a.jsxs("div",{className:Lr.audience,children:[a.jsx(ke,{size:48,radius:"md",variant:"light",color:"blue",children:a.jsx(t,{stroke:1.5,style:{width:S(26),height:S(26)}})}),a.jsx(C,{fw:700,fz:"lg",mt:"md",children:e.title}),a.jsx(C,{c:"dimmed",size:"sm",mt:6,style:{lineHeight:1.6},children:e.desc})]},e.id)})}),a.jsx(C,{ta:"center",c:"dimmed",size:"sm",maw:680,mx:"auto",mt:40,children:Ht.disambiguation})]})}const Ft={heading:"Fork a pack. Make it yours.",lead:"Every pack is a real config you can deploy, read and edit â schedules and flows alongside APIs and agent tools. Start from one instead of a blank file.",cta:"Browse the marketplace"},Nr="916e75ba021c1dda",Br="2026-09-03T12:05:41.167Z",Hr=[{slug:"flow-control",name:"Flow Control",description:"Flow-control recipes for Air Pipe pipelines: throttle with the delay action, retry with exponential backoff, branch with run_on_assertion, try/catch/finally recovery, and at_least quorum. Every endpoint is self-contained â no external services, databases, or managed variables required.",category:"Engineering & DevOps"},{slug:"durable-api-polling",name:"Durable API Polling",description:"Poll an API on a schedule and process only new items, retrying only the items that fail â never the whole batch and never silently dropping a failure. Durable id-based dedupe via the state feature plus lookup_partition per-item retry. Includes a self-contained demo and a production poller template.",category:"Operations"},{slug:"daily-database-digest-email",name:"Daily Database Digest Email",description:"Query your database, format a summary email, and send it via [Resend](https://resend.com). Ships with a sample `app_events` table so you can try it immediately. Swap the query for any SQL that returns numbers your team cares about â signups, revenue, errors, API calls.",category:"Data & Analytics"},{slug:"stripe-webhooks-db-slack",name:"Stripe Webhooks â DB â Slack",description:"Receives Stripe webhook events, verifies the signature, stores every event in Postgres with idempotency, and posts a Slack notification. One endpoint handles all event types.",category:"Finance & Commerce"},{slug:"rest-api-starter",name:"REST API Starter",description:"A production-shaped CRUD API over Postgres with three resource types (users, posts, comments) and optional JWT validation. No external services required â just a Postgres database. Deploy and start making requests in under 10 minutes.",category:"Backend & APIs"},{slug:"multi-tenant-saas-starter",name:"Multi-Tenant SaaS Starter",description:"A production-shaped multi-tenant backend over Postgres: API-key authentication (sha256-hashed, generated server-side, revocable), strict per-tenant data isolation, plan-based limits, and usage metering. Every request resolves its API key to exactly one tenant and every query is scoped to it â cross-tenant access is structurally impossible.",category:"Backend & APIs"},{slug:"rag-chatbot",name:"RAG Chatbot",description:"Retrieval-Augmented Generation chatbot backed by Postgres + pgvector. Ingest your own documents, store OpenAI embeddings alongside them, and answer questions using only your data â no third-party vector DB, no proprietary cloud, nothing leaves your infrastructure. Includes seed, ingest, chat, history, and delete endpoints.",category:"AI & Agents"},{slug:"mcp-postgres-starter",name:"MCP Postgres Starter",description:"Turn your Postgres data into secure MCP tools any AI client (Claude Desktop, Claude Code, Cursor) can call. Two-tier auth: one shared token for yourself, or per-user tenant-scoped tokens for your customers - minted via an HS256 exchange or verified directly against your OIDC provider's JWKS (Auth0, Clerk, Cognito). Every tool reuses the same in-config token checks as a normal Air Pipe route. Tool discovery (tools/list) is gated behind the same per-user token via list_authorizer, so unauthenticated clients cannot enumerate your tools or their input schemas (engine >= 1.7.0).",category:"AI & Agents"}],Fr={signature:Nr,generatedAt:Br,packs:Hr},Gr="_card_lgh46_1",Wr={card:Gr}
194,Va=Fr.packs;function $r(e,t=105){const o=Pt(e);return o.length<=t?o:o.slice(0,t-1).trimEnd()+"â¦"}function Ur(){return Va.length?a.jsxs(K,{size:"lg",py:48,children:[a.jsx(te,{ta:"center",order:2,fz:{base:28,sm:36},fw:800,children:Ft.heading}),a.jsx(C,{ta:"center",c:"dimmed",size:"lg",maw:680,mx:"auto",mt:"sm",children:Ft.lead}),a.jsx(pe,{cols:{base:1,sm:2,lg:4},spacing:"lg",mt:40,children:Va.map(e=>a.jsxs(j1,{component:ae,to:`/marketplace/pack/${e.slug}`,withBorder:!0,radius:"md",padding:"lg",className:Wr.card,children:[a.jsx(E1,{variant:"light",color:"blue",size:"sm",radius:"sm",children:e.category}),a.jsx(C,{fw:700,fz:"md",mt:"sm",style:{lineHeight:1.3},children:e.name}),a.jsx(C,{c:"dimmed",size:"sm",mt:6,style:{lineHeight:1.6},children:$r(e.description)})]},e.slug))}),a.jsx(D,{justify:"center",mt:"xl",children:a.jsx(F,{size:"md",variant:"outline",component:ae,to:"/marketplace",children:Ft.cta})})]}):null}const Vr="_card_3ifv5_1",Kr="_cta_3ifv5_14",Ka={card:Vr,cta:Kr};function Qr(e){const t=e.replace(/-alternative$/,"");return{zapier:"Zapier",n8n:"n8n",gumloop:"Gumloop",ably:"Ably",pusher:"Pusher",emqx:"EMQX"}[t]||t}function Yr(){return a.jsxs(K,{size:"lg",py:48,children:[a.jsx(te,{ta:"center",order:2,fz:{base:28,sm:36},fw:800,children:"Already using a workflow tool?"}),a.jsx(C,{ta:"center",c:"dimmed",size:"lg",maw:680,mx:"auto",mt:"sm",children:"Air Pipe does the connecting and automating you expect â and then gives you a real backend, traces for every run, and pricing that doesn't meter each step."}),a.jsx(pe,{cols:{base:1,sm:3},spacing:"lg",mt:40,children:xt.map(e=>{var t;return a.jsxs(j1,{component:ae,to:e.path,withBorder:!0,radius:"md",padding:"lg",className:Ka.card,children:[a.jsxs(C,{fw:700,fz:"lg",children:["vs ",Qr(e.slug)]}),a.jsx(C,{c:"dimmed",size:"sm",mt:6,style:{lineHeight:1.6},children:(t=e.sections[0])==null?void 0:t.heading}),a.jsxs(D,{gap:6,mt:"md",className:Ka.cta,children:[a.jsx(C,{fw:600,size:"sm",children:"See the comparison"}),a.jsx(ys,{style:{width:S(16),height:S(16)}})]})]},e.slug)})})]})}const Zr="_wrap_1r0xc_1",Jr="_stage_1r0xc_12",Xr="_window_1r0xc_19",e0="_chromeHandle_1r0xc_32",t0="_paneChrome_1r0xc_38",a0="_windowFloat_1r0xc_48",o0="_drift_1r0xc_1",n0="_pane_1r0xc_38",s0="_paneDots_1r0xc_94",r0="_paneTitle_1r0xc_116",i0="_paneTitleLeft_1r0xc_128",l0="_paneBody_1r0xc_134",c0="_hint_1r0xc_145",h0="_compact_1r0xc_152",d0="_tabs_1r0xc_156",u0="_tab_1r0xc_156",p0="_tabActive_1r0xc_178",g0="_compactPane_1r0xc_192",q={wrap:Zr,stage:Jr,window:Xr,chromeHandle:e0,paneChrome:t0,windowFloat:a0,drift:o0,pane:n0,paneDots:s0,paneTitle:r0,paneTitleLeft:i0,paneBody:l0,hint:c0,compact:h0,tabs:d0,tab:u0,tabActive:p0,compactPane:g0};function m0(e){const[t,o]=g.useState({}),[n,s]=g.useState(e),r=g.useRef(null),i=g.useCallback(p=>{s(m=>[...m.filter(k=>k!==p),p])},[]),l=g.useCallback(p=>m=>{var A,M;if(m.target.closest("a, button, input, textarea, select"))return;if(p.ignore&&m.target.closest(p.ignore)){i(p.id);return}if(p.handle==="chrome"&&!m.target.closest("[data-drag-handle]")){i(p.id);return}i(p.id);const k=t[p.id]||{dx:0,dy:0};r.current={id:p.id,pointerId:m.pointerId,originX:m.clientX,originY:m.clientY,startDx:k.dx,startDy:k.dy},(M=(A=m.currentTarget).setPointerCapture)==null||M.call(A,m.pointerId)},[t,i]),h=g.useCallback(p=>{const m=r.current;!m||m.pointerId!==p.pointerId||o(k=>({...k,[m.id]:{dx:m.startDx+(p.clientX-m.originX),dy:m.startDy+(p.clientY-m.originY)}}))},[]),u=g.useCallback(p=>{const m=r.current;m&&m.pointerId===p.pointerId&&(r.current=null)},[]);return{offsets:t,order:n,onPointerDown:l,onPointerMove:h,endDrag:u,bringToFront:i}}function Qa({win:e}){const t=e.render;return e.bare?a.jsx(t,{}):a.jsxs("div",{className:q.pane,children:[a.jsxs("div",{className:q.paneChrome,"data-drag-handle":"true",children:[a.jsx("span",{className:q.paneDots,"aria-hidden":"true"}),a.jsx("span",{className:`${q.paneTitle} ${e.titleAlign==="left"?q.paneTitleLeft:""}`,children:e.title})]}),e.padded===!1?a.jsx(t,{}):a.jsx("div",{className:q.paneBody,children:a.jsx(t,{})})]})}function y0({windows:e,hint:t,aspect:o="16 / 9",maxWidth:n=1040,compactFillHeight:s=420,compactBreakpoint:r="(max-width: 62em)",initialTab:i}){const l=la(r),h=z1(),[u,p]=g.useState(i||e[0].id),[m]=g.useState(()=>e.map((x,T)=>({id:x.id,z:x.layout.z??T,i:T})).sort((x,T)=>x.z-T.z||x.i-T.i).map(x=>x.id)),{offsets:k,order:A,onPointerDown:M,onPointerMove:P,endDrag:b,bringToFront:j}=m0(m);if(l){const x=e.find(T=>T.id===u)||e[0];return a.jsxs("div",{className:q.compact,children:[a.jsx("div",{className:q.tabs,role:"tablist",children:e.map(T=>a.jsx("button",{type:"button",role:"tab","aria-selected":T.id===u,className:`${q.tab} ${T.id===u?q.tabActive:""}`,onClick:()=>p(T.id),children:T.tab},T.id))}),a.jsx("div",{className:q.compactPane,style:x.fill?{height:`${s}px`}:void 0,children:a.jsx(Qa,{win:x})})]})}return a.jsxs("div",{className:q.wrap,children:[a.jsx("div",{className:q.stage,style:{aspectRatio:o,maxWidth:`${n}px`},onPointerMove:P,onPointerUp:b,onPointerCancel:b,children:e.map(x=>{const T=k[x.id]||{dx:0,dy:0};return a.jsx("div",{className:`${q.window} ${h?"":q.windowFloat} ${x.handle==="chrome"?q.chromeHandle:""}`,style:{left:`${x.layout.x}%`,top:`${x.layout.y}%`,width:`${x.layout.w}%`,height:x.layout.h?`${x.layout.h}%`:void 0,zIndex:A.indexOf(x.id)+1,transform:`translate3d(${T.dx}px, ${T.dy}px, 0)`},onPointerDown:M(x),onFocus:()=>j(x.id),children:a.jsx(Qa,{win:x})},x.id)})}),t&&a.jsx(C,{className:q.hint,c:"dimmed",size:"xs",children:t})]})}const f0="_root_1d8rj_1",v0="_chrome_1d8rj_24",b0="_dot_1d8rj_34",w0="_red_1d8rj_40",k0="_amber_1d8rj_41",x0="_green_1d8rj_42",A0="_chromeTitle_1d8rj_44",P0="_body_1d8rj_59",T0="_line_1d8rj_82",M0="_enter_1d8rj_1",S0="_chevron_1d8rj_104",_0="_promptEcho_1d8rj_110",C0="_toolRow_1d8rj_116",I0="_toolDot_1d8rj_122",j0="_toolName_1d8rj_131",E0="_toolResult_1d8rj_135",z0="_elbow_1d8rj_142",O0="_sayRow_1d8rj_151",R0="_sayDot_1d8rj_157",L0="_say_1d8rj_151",D0="_note_1d8rj_170",q0="_table_1d8rj_177",N0="_tableHead_1d8rj_183",B0="_tableRow_1d8rj_184",H0="_input_1d8rj_209",F0="_typed_1d8rj_221",G0="_caret_1d8rj_225",W0="_blink_1d8rj_1",$0="_status_1d8rj_246",_={root:f0,chrome:v0,dot:b0,red:w0,amber:k0,green:x0,chromeTitle:A0,body:P0,line:T0,enter:M0,chevron:S0,promptEcho:_0,toolRow:C0,toolDot:I0,toolName:j0,toolResult:E0,elbow:z0,sayRow:O0,sayDot:R0,say:L0,note:D0,table:q0,tableHead:N0,tableRow:B0,input:H0,typed:F0,caret:G0,blink:W0,status:$0},Ya=28,co=420,U0=620,V0=900,K0=1100,Q0=480,Y0=2600;function Z0(e){switch(e.kind){case"tool":return U0;case"say":return V0;case"table":return K0;case"note":return Q0;default:return co}}function J0({step:e}){return e.kind==="prompt"?a.jsxs("div",{className:_.line,children:[a.jsx("span",{className:_.chevron,children:"âº"}),a.jsx("span",{className:_.promptEcho,children:e.text})]}):e.kind==="tool"?a.jsxs("div",{className:_.line,children:[a.jsxs("div",{className:_.toolRow,children:[a.jsx("span",{className:_.toolDot,"aria-hidden":"true"}),a.jsx("span",{className:_.toolName,children:e.name})]}),e.result&&a.jsxs("div",{className:_.toolResult,children:[a.jsx("span",{className:_.elbow,"aria-hidden":"true"}),a.jsx("span",{children:e.result})]})]}):e.kind==="table"?a.jsxs("div",{className:`${_.line} ${_.table}`,children:[a.jsx("div",{className:_.tableHead,children:e.columns.map(t=>a.jsx("span",{children:t},t))}),e.rows.map(t=>a.jsx("div",{className:_.tableRow,children:t.map((o,n)=>a.jsx("span",{children:o},`${t[0]}-${n}`))},t.join("|")))]}):e.kind==="note"?a.jsx("div",{className:`${_.line} ${_.note}`,children:e.text}):a.jsx("div",{className:_.line,children:a.jsxs("div",{className:_.sayRow,children:[a.jsx("span",{className:_.sayDot,"aria-hidden":"true"}),a.jsx("span",{className:_.say,children:e.text})]})})}function X0({script:e,title:t="Claude Code",statusLine:o,height:n=420,className:s=""}){const r=z1(),i=g.useMemo(()=>({shown:e.length,typed:null}),[e.length]),[l,h]=g.useState({shown:0,typed:null}),[u,p]=g.useState(!1),m=g.useRef(null),k=g.useRef([]),A=g.useCallback(()=>{k.current.forEach(clearTimeout),k.current=[]},[]);g.useEffect(()=>{if(r)return;const P=m.current;if(!P||typeof IntersectionObserver>"u"){p(!0);return}const b=new IntersectionObserver(([j])=>p(j.isIntersecting),{threshold:.33});return b.observe(P),()=>b.disconnect()},[r]),g.useEffect(()=>{if(r){A(),h(i);return}if(!u){A();return}let P=!1;const b=(x,T)=>{const H=setTimeout(()=>{P||x()},T);k.current.push(H)};function j(x){if(x>=e.length){b(()=>{h({shown:0,typed:null}),j(0)},Y0);return}const T=e[x];if(T.kind==="prompt"){let H=0;const Z=()=>{P||(H+=1,h({shown:x,typed:T.text.slice(0,H)}),H<T.text.length?b(Z,Ya):b(()=>{h({shown:x+1,typed:null}),j(x+1)},co))};b(Z,Ya);return}b(()=>{h({shown:x+1,typed:null}),j(x+1)},Z0(T))}return h({shown:0,typed:null}),j(0),()=>{P=!0,A()}},[e,u,r,i,A]);const M=e.slice(0,l.shown);return a.jsxs("div",{ref:m,className:`${_.root} ${s}`,style:{"--terminal-height":`${n}px`},children:[a.jsxs("div",{className:_.chrome,children:[a.jsx("span",{className:`${_.dot} ${_.red}`}),a.jsx("span",{className:`${_.dot} ${_.amber}`}),a.jsx("span",{className:`${_.dot} ${_.green}`}),a.jsx("span",{className:_.chromeTitle,children:t})]}),a.jsx("div",{className:_.body,"aria-hidden":"true",children:M.map((P,b)=>a.jsx(J0,{step:P},`${P.kind}-${b}`))}),a.jsxs("div",{className:_.input,"aria-hidden":"true",children:[a.jsx("span",{className:_.chevron,children:"âº"}),a.jsx("span",{className:_.typed,children:l.typed}),l.typed!=null&&a.jsx("span",{className:_.caret})]}),o&&a.jsx("div",{className:_.status,children:o})]})}const ei=[{kind:"prompt",text:"ship an orders API with a nightly reconcile job"},{kind:"tool",name:"airpipe - list_organizations (MCP)",result:"acme-prod · 3 configs deployed"},{kind:"tool",name:"airpipe - create_config (MCP)",result:"orders · 4 interfaces · 1 schedule"},{kind:"tool",name:"airpipe - validate_config (MCP)",result:"schema OK · 12 assertions OK"},{kind:"tool",name:"airpipe - plan_config (MCP)",result:"+4 routes +1 cron +4 MCP tools"},{kind:"tool",name:"airpipe - deploy_config_revision (MCP)",result:"revision 1 live · 820ms"},{kind:"say",text:"Live. POST /orders/create, POST /orders/get, the 02:00 reconcile job, and the same four operations as MCP tools â one config, one deploy."},{kind:"note",text:"OpenAPI at /documentation · metrics at /metrics · traces to your collector"}],ti=[{kind:"prompt",text:"which orders failed to reconcile last night?"},{kind:"tool",name:"orders - list_failed (MCP)",result:"23 orders · since 2026-09-16T02:00Z"},{kind:"tool",name:"orders - get_reconcile_run (MCP)",result:"run 8f3a1c02 · 3 retries · 1 dead-lettered"},{kind:"table",columns:["Reason","Orders","Value"],rows:[["gateway_timeout","14","4,120.00"],["amount_mismatch","6","873.40"],["missing_ref","3","211.05"]]}
194,{kind:"say",text:"23 failures, 14 of them a gateway timeout in one 40-second window. The trace for run 8f3a1c02 shows the upstream, not Air Pipe."},{kind:"prompt",text:"retry the timeouts"},{kind:"tool",name:"orders - retry_batch (MCP)",result:"14 queued · idempotency key per order"},{kind:"say",text:"All 14 re-queued. Nothing was double-charged â the route asserts the idempotency key before it writes."}];function E3({connectLabel:e,connectResult:t}){return[{kind:"tool",name:e,result:t},...ti]}const Me={config:{lines:[{text:"interfaces:",tone:"key"},{text:" - name: CreateOrder"},{text:" path: /orders/create",tone:"str"},{text:" method: POST",tone:"str"},{text:" mcp: true",tone:"hl"},{text:" actions:"},{text:" - database: main"},{text:" query: INSERT INTO orders â¦",tone:"str"},{text:""},{text:" - name: Reconcile"},{text:' schedule: "0 2 * * *"',tone:"hl"},{text:" actions:"},{text:" - http: { url: â¦/settlements }",tone:"str"}]},openapi:{routes:[{method:"POST",path:"/orders/create",summary:"create"},{method:"POST",path:"/orders/get",summary:"fetch"},{method:"GET",path:"/orders",summary:"list"},{method:"POST",path:"/orders/retry",summary:"retry"}],foot:"Generated from the config â no annotations written."},trace:{request:{method:"POST",path:"/orders/create",status:"201",meta:["142ms","run 8f3a1c02"]},root:{name:"POST /orders/create",ms:142},actions:[{name:"ValidateBody",offset:0,width:6,ms:8},{name:"HashPassword",offset:6,width:38,ms:54},{name:"CreateOrder · db.insert",offset:44,width:43,ms:61},{name:"TrackSignup · emit_metric",offset:87,width:5,ms:6}],foot:"Same spans in Grafana, Tempo or Jaeger â none of it instrumented by hand."},metrics:{series:[{label:"http_requests_total",points:[30,44,38,62,51,70,66,81,74,88],value:"1.2k/m"},{label:"request_duration_p99",points:[22,26,24,31,28,25,27,24,23,22],value:"142ms"},{label:"schedule_runs_total",points:[10,10,10,10,10,10,10,10,10,10],value:"02:00 â"}],foot:"Scrape it with Prometheus. Trace it with OpenTelemetry."}},ai="_paneFoot_xmdb7_5",oi="_config_xmdb7_15",ni="_key_xmdb7_21",si="_str_xmdb7_22",ri="_hl_xmdb7_23",ii="_route_xmdb7_31",li="_method_xmdb7_38",ci="_post_xmdb7_49",hi="_get_xmdb7_50",di="_routePath_xmdb7_52",ui="_routeNote_xmdb7_60",pi="_metricRow_xmdb7_68",gi="_metricLabel_xmdb7_75",mi="_spark_xmdb7_85",yi="_metricValue_xmdb7_101",fi="_embeddedTerminal_xmdb7_109",vi="_flowFallback_xmdb7_117",bi="_reqRow_xmdb7_125",wi="_traceMethod_xmdb7_137",ki="_tracePath_xmdb7_146",xi="_status_xmdb7_150",Ai="_reqMeta_xmdb7_158",Pi="_trace_xmdb7_137",Ti="_traceRow_xmdb7_168",Mi="_spanLabel_xmdb7_174",Si="_track_xmdb7_184",_i="_bar_xmdb7_192",Ci="_barRoot_xmdb7_205",Ii="_ms_xmdb7_213",I={paneFoot:ai,config:oi,key:ni,str:si,hl:ri,route:ii,method:li,post:ci,get:hi,routePath:di,routeNote:ui,metricRow:pi,metricLabel:gi,spark:mi,metricValue:yi,embeddedTerminal:fi,flowFallback:vi,reqRow:bi,traceMethod:wi,tracePath:ki,status:xi,reqMeta:Ai,trace:Pi,traceRow:Ti,spanLabel:Mi,track:Si,bar:_i,barRoot:Ci,ms:Ii},ji=g.lazy(()=>N(()=>import("./WorkflowFlow-6ATSYeBG.js"),__vite__mapDeps([0,1,2,3,4,5,6])));function Ei(){return a.jsxs(a.Fragment,{children:[Me.openapi.routes.map(e=>a.jsxs("div",{className:I.route,children:[a.jsx("span",{className:`${I.method} ${I[e.method.toLowerCase()]}`,children:e.method}),a.jsx("span",{className:I.routePath,children:e.path}),a.jsx("span",{className:I.routeNote,children:e.summary})]},`${e.method} ${e.path}`)),a.jsx("div",{className:I.paneFoot,children:Me.openapi.foot})]})}function zi(){return a.jsxs(a.Fragment,{children:[Me.metrics.series.map(e=>a.jsxs("div",{className:I.metricRow,children:[a.jsx("span",{className:I.metricLabel,children:e.label}),a.jsx("span",{className:I.spark,"aria-hidden":"true",children:e.points.map((t,o)=>a.jsx("i",{style:{height:`${Math.max(8,t)}%`}},`${e.label}-${o}`))}),a.jsx("span",{className:I.metricValue,children:e.value})]},e.label)),a.jsx("div",{className:I.paneFoot,children:Me.metrics.foot})]})}function Oi(){const e=Me.trace;return a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:I.reqRow,children:[a.jsx("span",{className:I.traceMethod,children:e.request.method}),a.jsx("span",{className:I.tracePath,children:e.request.path}),a.jsx("span",{className:I.status,children:e.request.status}),e.request.meta.map(t=>a.jsx("span",{className:I.reqMeta,children:t},t))]}),a.jsxs("div",{className:I.trace,children:[a.jsxs("div",{className:I.traceRow,children:[a.jsx("span",{className:I.spanLabel,children:e.root.name}),a.jsx("div",{className:I.track,children:a.jsx("div",{className:`${I.bar} ${I.barRoot}`,style:{left:"0%",width:"100%"},children:a.jsxs("span",{className:I.ms,children:[e.root.ms,"ms"]})})})]}),e.actions.map(t=>a.jsxs("div",{className:I.traceRow,children:[a.jsx("span",{className:I.spanLabel,children:t.name}),a.jsx("div",{className:I.track,children:a.jsx("div",{className:I.bar,style:{left:`${t.offset}%`,width:`${t.width}%`},children:a.jsxs("span",{className:I.ms,children:[t.ms,"ms"]})})})]},t.name))]}),a.jsx("div",{className:I.paneFoot,children:e.foot})]})}function Ri(){return a.jsx("pre",{className:I.config,children:Me.config.lines.map((e,t)=>a.jsx("div",{className:I[e.tone]||"",children:e.text||" "},`${t}-${e.text}`))})}function Li(){return a.jsx(X0,{script:ei,title:"Claude Code",height:228,className:I.embeddedTerminal})}const Di=["create","validate","reject","hash","createUser","trackSignup"];function qi(){const e=la("(max-width: 62em)",!1,{getInitialValueInEffect:!1});return a.jsx(g.Suspense,{fallback:a.jsx("div",{className:I.flowFallback}),children:a.jsx(ji,{only:e?Di:void 0},e?"compact":"full")})}const Ni=[{id:"config",title:"orders.yaml",tab:"One config",layout:{x:0,y:0,w:30,z:4},render:Ri},{id:"flow",title:"Visual editor · flow",tab:"Flow",layout:{x:20,y:11,w:60,h:70.4,z:1},render:qi,padded:!1,fill:!0,ignore:".react-flow__node"},{id:"terminal",title:"Claude Code",tab:"Agent tools",layout:{x:57,y:0,w:43,z:6},render:Li,bare:!0},{id:"openapi",title:"OpenAPI · /documentation",tab:"HTTP API",layout:{x:0,y:53.7,w:32,z:5},render:Ei},{id:"trace",title:"OpenTelemetry · trace",tab:"Trace",layout:{x:43,y:65.1,w:46,z:2},titleAlign:"left",render:Oi},{id:"metrics",title:"Prometheus · /metrics",tab:"Metrics & cron",layout:{x:66,y:53.3,w:34,z:3},render:zi}];function Bi(){return a.jsx(y0,{windows:Ni,aspect:"1160 / 700",maxWidth:1160,compactFillHeight:460,initialTab:"terminal",hint:"One config. Drag the surfaces it becomes."})}const y='<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>',f='</title><path d="',v='"/></svg>',Hi={title:"Airbyte",slug:"airbyte",get svg(){return y+"Airbyte"+f+this.path+v},path:"M8.308 2.914C10.876.027 15.128-.819 18.624.848c4.644 2.21 6.339 7.846 3.809 12.194l-5.687 9.77c-.319.547-.842.944-1.455 1.107-.613.163-1.267.079-1.818-.236l6.887-11.832c1.835-3.155.608-7.243-2.758-8.854-2.528-1.208-5.613-.604-7.482 1.473-1.031 1.139-1.608 2.613-1.628 4.145-.018 1.532.524 3.019 1.524 4.185.179.21.372.406.579.588l-4.021 6.919c-.157.273-.365.51-.617.699-.249.189-.534.329-.838.411-.303.081-.621.1-.93.061-.313-.041-.614-.143-.885-.298l4.364-7.513C7.041 12.77 6.59 11.763
1946.34 10.7l-2.675 4.612c-.317.545-.842.944-1.453 1.107-.615.164-1.269.079-1.818-.237L7.31 4.284c.29-.487.622-.948.998-1.37Zm7.983 3.784c1.666.956 2.242 3.081 1.277 4.734L10.936 22.81c-.317.547-.84.945-1.455 1.109-.612.162-1.268.079-1.816-.237l6.159-10.596c-.495-.1-.96-.308-1.365-.61-.405-.3-.743-.682-.981-1.122-.242-.441-.385-.928-.418-1.428-.033-.501.045-1.002.224-1.47.18-.468.462-.893.824-1.242.362-.35.795-.618 1.273-.784.474-.168.982-.23 1.485-.183.502.046.989.2 1.425.451Zm-2.412 2.139c-.114.087-.21.196-.282.32-.106.186-.158.398-.144.613.014.215.092.42.224.592.13.167.31.297.515.367.207.068.427.077.636.02.209-.056.396-.172.54-.334.143-.161.234-.36.263-.574.027-.213-.008-.43-.105-.622-.097-.195-.246-.354-.433-.46-.126-.072-.263-.118-.406-.136-.143-.02-.286-.01-.424.026-.14.038-.271.101-.384.188Z",source:"https://airbyte.com",hex:"615EFF"},Fi={title:"Airtable",slug:"airtable",get svg(){return y+"Airtable"+f+this.path+v},path:"M11.992 1.966c-.434 0-.87.086-1.28.257L1.779 5.917c-.503.208-.49.908.012 1.116l8.982 3.558a3.266 3.266 0 0 0 2.454 0l8.982-3.558c.503-.196.503-.908.012-1.116l-8.957-3.694a3.255 3.255 0 0 0-1.272-.257zM23.4 8.056a.589.589 0 0 0-.222.045l-10.012 3.877a.612.612 0 0 0-.38.564v8.896a.6.6 0 0 0 .821.552L23.62 18.1a.583.583 0 0 0 .38-.551V8.653a.6.6 0 0 0-.6-.596zM.676 8.095a.644.644 0 0 0-.48.19C.086 8.396 0 8.53 0 8.69v8.355c0 .442.515.737.908.54l6.27-3.006.307-.147 2.969-1.436c.466-.22.43-.908-.061-1.092L.883 8.138a.57.57 0 0 0-.207-.044z",source:"https://airtable.com/newsroom",hex:"18BFFF"},Gi={title:"Anthropic",slug:"anthropic",get svg(){return y+"Anthropic"+f+this.path+v},path:"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z",source:"https://www.anthropic.com",hex:"191919"},Wi={title:"Apache Flink",slug:"apacheflink",get svg(){return y+"Apache Flink"+f+this.path+v},path:"M3.192 13.236c.028.035.064.069.098.101l.024.022.008.004a.736.736 0 0 0 .179.065 8.117 8.117 0 0 1-.138-1.758c.027-.797.178-1.47.462-2.059a8.02 8.02 0 0 1 .315-.519s-.176 1.202-.202 1.673a7.104 7.104 0 0 0 .16 1.868l.072-.05c-.043-.389-.042-.8.004-1.22a6.987 6.987 0 0 1 .419-1.721 9.266 9.266 0 0 1 .973-1.892c-1.985.209-2.418 2.1-2.418 2.1s.017-.347.024-.434c.057-.649.123-.961.205-1.287-.13.238-.212.488-.271.688-.139.47-.216.949-.273 1.356a9.022 9.022 0 0 0-.096 1.289c.002.38.024.828.176 1.263.073.205.164.373.279.511zm1.44-.737c.179-.113.385-.2.626-.268.425-.119.889-.239 1.461-.379l.19-.046c.478-.116.974-.237 1.439-.415.283-.108.552-.25.824-.436.38-.26.721-.579 1.012-.951.154-.196.232-.349.309-.605l.114-.378s.464.519-.004 1.436c.297-.107.582-.413.798-.788.181-.315.491-1.451.491-1.451s.569.875-.105 2.011a1.59 1.59 0 0 0 .356-.227c2.507-2.49.349-3.899-.103-4.236a4.141 4.141 0 0 0-.982-.525L11 5.218c-.03-.013-.047-.033-.055-.042l-.321-.35.563.155c.079.021.154.042.228.064.614.182 1.082.4 1.472.686.445.325 2.142 1.751.348 3.837.556-.191 1.606-.772 1.962-1.272 1.713-2.405-.254-3.808-.17-3.808.019 0 .044.002.099.01a.44.44 0 0 0 .069.006c.036 0 .097-.006.109-.041.015-.042-.014-.122-.073-.168-.154-.117-.321-.202-.533-.169C12.926 4.4 12.3 3.85 12.3 3.85s2.482.129 2.562-.28a4.92 4.92 0 0 0-1.225-.912 6.697 6.697 0 0 0-2.228-.743c-1.207-.179-2.13.053-2.13.053.096-.121.574-.667 2.556-.511.802.063 1.564.316 2.27.669.182.091.29-.125.293-.223.004-.114.201.379.203.405.019-.049.096-.308.112-.308.047 0 .24.603.24.603.002-.024.257-.286.257-.286.076.343.066.514.047.562.002-.009.267-.172.267-.172s.152.638.412.891c.084.082.238.296.328.527.19-.133.421-.799.421-.799s.119.353.019.988c.007-.008.301-.219.301-.219s.042.449-.15 1.008a.572.572 0 0 0-.022.095c.162-.091.404-.388.404-.388l-.042.188c-.048.214-.137.629-.327.953a2.549 2.549 0 0 0-.29.686c.049-.045.099-.085.152-.12.1-.065.199-.117.293-.151l.232-.085c.392-.142.788-.309 1.173-.479.812-.359.631-.86.631-.86-.209.408-.966.816-.966.816s.98-.878.562-1.905c-.115.27-.224.538-.327.792-.144.353-.314.726-.59 1.055-.141.168-.286.29-.446.373a.686.686 0 0 1-.115.048l-.043.016s.172-.283.184-1.063c.004-.282.012-.571.012-.826v-.054c0-.132-.003-.263-.002-.395.005-.558.015-.982.132-1.373-.012-.022-.005-.045-.018-.068-.027-.046-.047-.099-.071-.157-.036-.089-.066-.178-.101-.275-.127-.36-.308-.538-.365-.588-.038.115-.271.591-.271.591s.001-.365-.001-.393c-.06
1947-.511-1.33-.972-1.356-.988l.067.401s-.382-.028-.545-.284c-.034-.052-.084-.09-.13-.125l.09.306.093.214s-.296-.024-.435-.269c-.033-.057-.075-.121-.112-.189a.746.746 0 0 0-.574-.396 8.393 8.393 0 0 0-.601-.062 1.301 1.301 0 0 1-.479-.11L12.573 0l.046.087c.015.029.025.058.04.095l.008.022.032.078.048.172s-.353-.014-.765-.299c-.089-.062-.201-.062-.325-.072L11.622.08a4.192 4.192 0 0 0-.332-.014 3.097 3.097 0 0 0-.974.149c.035-.002.071-.003.106-.003l.067.001c.677.012.887.413.887.413s-.606 0-.785.023c-.209.027-.42.052-.616.106a5.102 5.102 0 0 0-1.622.796c-.124.088-.253.17-.389.256-.23.147-.424.341-.576.577a.357.357 0 0 0-.034.068c-.014.036-.008.039.015.051a.78.78 0 0 0 .168.061 2.353 2.353 0 0 1 1.786 2.005l.015.123c.035.307.072.623.056.944a3.413 3.413 0 0 1-.901 2.191c-.59.646-1.323.69-1.316.685.435-.406.722-.95.876-1.66a1.395 1.395 0 0 0-.084-.828.868.868 0 0 0-.016.047c-.097.276-.22.594-.447.857-.132.15-.312.322-.521.521-.911.867-2.435 2.317-2.409 4.623 0 .135.027.3.056.427zm13.967-5.836c-.113.098-.226.196-.341.292-.205.171-.351.28-.666.394-.276.099-.488-.124-.488-.124a1.3 1.3 0 0 0 .447-.389 7.968 7.968 0 0 0-1.154.71 2.41 2.41 0 0 0-.389.353c-.124.156-.205.318-.205.484v.002c0-.003.044-.005.053-.007a6.122 6.122 0 0 0 1.226-.49 16.006 16.006 0 0 0 1.757-1.074.334.334 0 0 1 .095-.048l.371-.106-.228.314a.288.288 0 0 1-.027.034c-.745.741-1.517 1.272-2.36 1.622a4.734 4.734 0 0 1-.492.174 9.201 9.201 0 0 0 1.513-.525c.537-.244.913-.483 1.22-.772.475-.45.814-.981 1.009-1.576a.732.732 0 0 0 .024-.1l-.111.033c-.127.037-.258.074-.373.13a2.367 2.367 0 0 0-.427.286c-.158.127-.321.269-.454.383zM1.578 14.987c.128.205.268.407.403.602l.021.031c-.351-1.236.223-1.982.223-1.982l.142.391c.036.101.091.199.167.302.147-.275.326-.538.534-.784a1.438 1.438 0 0 1-.472-.415c-.2-.264-.332-.581-.415-.996a5.507 5.507 0 0 1-.069-1.562c.015-.174.036-.348.059-.525a8.377 8.377 0 0 0-1.626 2.716.046.046 0 0 0 .003.021 9.438 9.438 0 0 0 1.03 2.201zM18.221 3.353a5.045 5.045 0 0 1 .366-1.933l.018-.041a.94.94 0 0 0-.246.252c-.168.242-.291.53-.397.932-.182.687-.29 1.427-.337 2.308.192-.205.507-.657.572-1.215.011-.094.024-.199.024-.303zm3.368 19.012c-.396-.065-1.234-.36-1.468-.945-.288.707.306 1.221.75 1.451.077.04.1.05.181.082.084.037-.165.494.045.704.21.21.409.148.487.148 0 0 .361.335.567.111.053-.058.098-.262.029-.385-.086-.152-.295-.124-.315-.124-.41.005-.373-.188-.311-.27.045-.059.132-.055.205-.055.017 0 .034.001.053.004.094.011.184.016.268.016.335 0 .726-.035.985-.179.186-.104.491-.456.475-.692-.017.006-.825.319-1.951.134zm2.324-7.785c-.038-.097-.085-.196-.126-.283l-.06-.126c-.021-.047-.044-.093-.066-.139-.055-.111-.112-.226-.151-.35-.034-.106-.043-.216-.052-.32a3.312 3.312 0 0 0-1.886-2.716 1.25 1.25 0 0 1-.215.417c-.09.12-.144.138-.262.138-.157 0-.18-.18-.133-.265a1.45 1.45 0 0 0 .196-.543c.033-.377-.177-.786-.435-1.068-.239-.261-.649-.564-.979-.663-.079.307.017.812.124 1.109.132.36.544 1.069.445 1.499 0 0-.029.275-.304.448-.153.096-.215.053-.215.053.294-.627.297-.891-.028-1.485-.245-.447-.358-.899-.27-1.398.003-.02.01-.04.014-.06a2.222 2.222 0 0 1-.088.199c-.25.439-.486.667-.628 1.121-.149.508.01 1.059.325 1.598a1.237 1.237 0 0 1-.553-.804 4.323 4.323 0 0 0-1.334 1.166c-.08.104-.175.191-.259.268a4.92 4.92 0 0 1-1.978 1.099c-.493.145-1.001.267-1.502.388l-.131.031c-.683.165-1.409.351-2.097.657-.792.352-1.42.757-1.918 1.239a4.412 4.412 0 0 0-1.326 2.593c-.114.781-.055 1.595.18 2.49.008.032-1.03-.941-.494-3.741a6.322 6.322 0 0 0-.236-.007l-.067.001c-1.933.058-2.737 1.123-2.737 1.123s.126-1.182 1.987-1.579c.14-.03 1.312-.293 1.352-.306.154-.314.341-.612.557-.889l-.166.026c-.319.05-.648.1-.975.143l-.252.03c-.577.074-1.174.149-1.74.316-.594.174-1.059.426-1.422.768-.389.366-.668.839-.852 1.442l-.023.086c-.013.05-.026.101-.045.151-.02.052-.024.11.018.22.348.923.945 1.723 1.774 2.376a7.587 7.587 0 0 0 2.146 1.18c.026.009.07.024.109.064l.348.337-.544-.13c-.064-.015-.127-.029-.191-.047-1.114-.306-2.085-.821-2.885-1.532-.273-.099-1.668-.794-2.26-1.936l-.099-.19s.757.746 1.288.855a5.59 5.59 0 0 1-.564-1.22.283.283 0 0 0-.049-.087C1.273 17.196.624 16.054.196 14.834a4.708 4.708 0 0 1-.085-.262c-.043.355-.064.71-.064 1.057 0 .11.955 2.647.955 2.647s-.42-.467-.768-1.059c0 0-.061-.199-.069-.212.149.897.439 1.74.863 2.521 1.167 2.147 2.956 3.554 5.47 4.212a7.73 7.73 0 0 0 1.955.255l7.855.007c.369 0 .652-.022.915-.07l.041-.007a1.47 1.47 0 0 1 .281-.034c.106.001.219.014.345.044l.062.015c.116.026.224.052.331.052 1.32.01 1.137-.785 1.137-.785-.055-.207-.295-.351-.557-.413a1.204 1.204 0 0 0-.28-.033c-.179 0-.367.041-.559.12l-.288.123-.172.075a1.317 1.317 0 0 1-.098.038.54.54 0 0 1-.17.036c-.199 0-.208-.195-.213-.312a.46.46 0 0 1 .169-.373c.093-.079.194-.156.302-.228.195-.132.396-.268.551-.446a1.49 1.49 0 0 0 .361-.699.825.825 0 0 0-.044-.469c-.014-.035-.027-.042-.04-.046a9.037 9.037 0 0 0-.368-.112c-.488-.137-.847-.342-1.127-.643a2.803 2.803 0 0 1-.439-.671 5.783 5.783 0 0 1-.416-1.096c-.159-.601-.536-1.083-1.15-1.472a3.536 3.536 0 0 0-1.557-.524c-.137-.015-.276-.021-.423-.028-.037-.002-.122-.013-.208-.024-.077-.01-.153-.021-.188-.022l-.21-.013s.054-.076.489-.242c.082-.031.167-.039.25-.054.201-.035.4-.053.59-.053.458 0 .891.106 1.288.314.494.26.888.656 1.206 1.211.173.302.309.626.416.992.021.07.038.14.058.216.035.134.071.271.122.396.307.756.876 1.198 1.69 1.315.216.031.426.046.626.046a3.48 3.48 0 0 0 1.077-.165c.455-.149.803-.382 1.062-.712a1.42 1.42 0 0 0 .255-.494l.035-.121.203.048c.043.011.086.021.13.03a.483.483 0 0 0 .094.009c.092 0 .186-.022.288-.044l.017-.004c.076-.017.15-.02.222-.023l.061-.003c.072 0 .132.048.159.093.031.053.081.083.175.104a.367.367 0 0 0 .075.007c.229 0 .47-.21.476-.416.003-.079-.018-.127-.07-.163-.041-.028-.083-.054-.131-.084l-.228-.143.152-.116a.245.245 0 0 1 .147-.051c.045 0 .085.013.12.028 0 0-.191-1.01-1.527-.716 0 0-.217.089-.328.131l-.052.02a.27.27 0 0 1-.101.019.358.358 0 0 1-.166-.047c-.468-.235-.926-.131-1.002-.131a2.28 2.28 0 0 1-.538-.059.222.222 0 0 1-.116-.067l-.086-.097a2.634 2.634 0 0 1-1.183-.197c-.436-.186-.784-.47-.995-.903a1.487 1.487 0 0 1-.15-.685l.026.067c.084.248.208.474.374.678.306.379.701.634 1.15.813.243.097.495.165.764.21 0 0 .955.036 1.38-.317.323-.18.614-.264.917-.264h.063c1.027-.001 1.118-.498 1.118-.498s.117.076.281.051a.666.666 0 0 0 .604-.63l-.34-.306-.072-.063-.134-.106.092-.105a.274.274 0 0 1 .207-.099c.046 0 .091.012.134.035.061.034.115.077.164.117l.051.04.064.05a.559.559 0 0 0-.036-.265zm-1.267-.273c-.038.106-.088.123-.199.099a.688.688 0 0 0-.181-.014c-.111.005-.221.024-.332.026-.277.005-.543-.045-.763-.225-.312-.256-.372-.559-.177-.943l.004.037a.745.745 0 0 0 .345.611c.18.121.385.17.595.196.17.02
1941.338.05.487.142l.041.021a.043.043 0 0 1 .006-.007c-.029-.041-.039-.183-.024-.242a.565.565 0 0 0 .002-.297.622.622 0 0 1-.25.304.076.076 0 0 1-.053.02 2.53 2.53 0 0 1-.654-.233c-.186-.102-.283-.261-.234-.484a.198.198 0 0 0-.056-.189c-.023-.023-.043-.05-.067-.078.055-.051.102-.1.155-.143.05-.04.102-.078.158-.109.432-.245 1.016-.061 1.208.389.049.114.075.24.089.363.028.259-.013.511-.1.756zm-20.67 2.926c-.02-.237-.033-.474-.046-.756a.102.102 0 0 0-.021-.064c-.63-.909-1.089-1.696-1.446-2.476a7.292 7.292 0 0 1-.169-.394 7.748 7.748 0 0 0 1.682 3.694v-.004zm18.991 4.103c.176.117.395.203.732.287.34.085.653.125.966.125.185 0 .334-.019.47-.059a.81.81 0 0 0 .59-.639 6.03 6.03 0 0 0 .128-.713 1.798 1.798 0 0 0-.372-1.323c-.035.031-.07.061-.106.089a1.104 1.104 0 0 1-.198.121.658.658 0 0 1-.291.072.593.593 0 0 1-.281-.072.96.96 0 0 0-.461-.104c-.063 0-.131.005-.208.013-.027.003-.039.009-.054.04-.258.531-.683.908-1.298 1.154l-.017.007-.003.013a1.15 1.15 0 0 0-.001.454c.054.216.185.391.404.535zM14.99 9.512c-.516.525-1.141.958-1.964 1.364-.52.256-1.1.441-1.826.582-.415.081-.829.159-1.243.237l-.086.015-1.056.2c-.929.178-1.92.389-2.872.71-.691.234-1.224.481-1.677.779-.444.291-.75.591-.965.943a2.637 2.637 0 0 0-.146.291 5.696 5.696 0 0 1-.075.159.42.42 0 0 1-.076.114c-.484.473-.69 1.064-.613 1.756.046.416.176.821.395 1.236.127-.846.574-1.492 1.328-1.92.41-.233.863-.403 1.383-.517.526-.117 1.06-.214 1.561-.304l.307-.054c.516-.091 1.051-.184 1.558-.345.12-.038.238-.08.348-.121.147-.055.275-.12.391-.206.141-.105.289-.2.444-.291-.653-.015-1.76-.017-2.104-.019-.77-.004-1.3.06-1.964.312-.694.264-2.676 1.271-2.676 1.271s.985-1.054 2.837-1.844a7.858 7.858 0 0 1 2.928-.53c.275 0 .561.011.872.033.512.038 1.024.075 1.535.11l.014.001c.024 0 .05-.004.075-.011a10.63 10.63 0 0 1 1.572-.325c.175-.025.353-.061.528-.097-.034-.011-.069-.02-.103-.03a1.13 1.13 0 0 1-.118-.044l-.088-.035-.345-.233 1.296.028c.279 0 3.032-.443 4.21-3.723.078-.219.16-.437.223-.676a7.611 7.611 0 0 1-2.669 1.063 7.155 7.155 0 0 1-1.139.121zm4.784-1.871zm1.701 5.622a.27.27 0 1 0 .54 0 .27.27 0 0 0-.54 0z",source:"https://apache.org/logos",hex:"E6526F",guidelines:"https://www.apache.org/foundation/marks",license:{type:"Apache-2.0",url:"https://spdx.org/licenses/Apache-2.0"}},Za={title:"Apache Kafka",slug:"apachekafka",get svg(){return y+"Apache Kafka"+f+this.path+v},path:"M9.71 2.136a1.43 1.43 0 0 0-2.047 0h-.007a1.48 1.48 0 0 0-.421 1.042c0 .41.161.777.422 1.039l.007.007c.257.264.616.426 1.019.426.404 0 .766-.162 1.027-.426l.003-.007c.261-.262.421-.629.421-1.039 0-.408-.159-.777-.421-1.042H9.71zM8.683 22.295c.404 0 .766-.167 1.027-.429l.003-.008c.261-.261.421-.631.421-1.036 0-.41-.159-.778-.421-1.044H9.71a1.42 1.42 0 0 0-1.027-.432 1.4 1.4 0 0 0-1.02.432h-.007c-.26.266-.422.634-.422 1.044 0 .406.161.775.422 1.036l.007.008c.258.262.617.429 1.02.429zm7.89-4.462c.359-.096.683-.33.882-.684l.027-.052a1.47 1.47 0 0 0 .114-1.067 1.454 1.454 0 0 0-.675-.896l-.021-.014a1.425 1.425 0 0 0-1.078-.132c-.36.091-.684.335-.881.686-.2.349-.241.75-.146 1.119.099.363.33.691.675.896h.002c.346.203.737.239 1.101.144zm-6.405-7.342a2.083 2.083 0 0 0-1.485-.627c-.58 0-1.103.242-1.482.627-.378.385-.612.916-.612 1.507s.233 1.124.612 1.514a2.08 2.08 0 0 0 2.967 0c.379-.39.612-.923.612-1.514s-.233-1.122-.612-1.507zm-.835-2.51c.843.141 1.6.552 2.178 1.144h.004c.092.093.182.196.265.299l1.446-.851a3.176 3.176 0 0 1-.047-1.808 3.149 3.149 0 0 1 1.456-1.926l.025-.016a3.062 3.062 0 0 1 2.345-.306c.77.21 1.465.721 1.898 1.482v.002c.431.757.518 1.626.313 2.408a3.145 3.145 0 0 1-1.456 1.928l-.198.118h-.02a3.095 3.095 0 0 1-2.154.201 3.127 3.127 0 0 1-1.514-.944l-1.444.848a4.162 4.162 0 0 1 0 2.879l1.444.846c.413-.47.939-.789 1.514-.944a3.041 3.041 0 0 1 2.371.319l.048.023v.002a3.17 3.17 0 0 1 1.408 1.906 3.215 3.215 0 0 1-.313 2.405l-.026.053-.003-.005a3.147 3.147 0 0 1-1.867 1.436 3.096 3.096 0 0 1-2.371-.318v-.006a3.156 3.156 0 0 1-1.456-1.927 3.175 3.175 0 0 1 .047-1.805l-1.446-.848a3.905 3.905 0 0 1-.265.294l-.004.005a3.938 3.938 0 0 1-2.178
1941.138v1.699a3.09 3.09 0 0 1 1.56.862l.002.004c.565.572.914 1.368.914 2.243 0 .873-.35 1.664-.914 2.239l-.002.009a3.1 3.1 0 0 1-2.21.931 3.1 3.1 0 0 1-2.206-.93h-.002v-.009a3.186 3.186 0 0 1-.916-2.239c0-.875.35-1.672.916-2.243v-.004h.002a3.1 3.1 0 0 1 1.558-.862v-1.699a3.926 3.926 0 0 1-2.176-1.138l-.006-.005a4.098 4.098 0 0 1-1.173-2.874c0-1.122.452-2.136 1.173-2.872h.006a3.947 3.947 0 0 1 2.176-1.144V6.289a3.137 3.137 0 0 1-1.558-.864h-.002v-.004a3.192 3.192 0 0 1-.916-2.243c0-.871.35-1.669.916-2.243l.002-.002A3.084 3.084 0 0 1 8.683 0c.861 0 1.641.355 2.21.932v.002h.002c.565.574.914 1.372.914 2.243 0 .876-.35 1.667-.914 2.243l-.002.005a3.142 3.142 0 0 1-1.56.864v1.692zm8.121-1.129l-.012-.019a1.452 1.452 0 0 0-.87-.668 1.43 1.43 0 0 0-1.103.146h.002c-.347.2-.58.529-.677.896-.095.365-.054.768.146 1.119l.007.009c.2.347.519.579.874.673.357.103.755.059 1.098-.144l.019-.009a1.47 1.47 0 0 0 .657-.885 1.493 1.493 0 0 0-.141-1.118",source:"https://apache.org/logos",hex:"231F20",guidelines:"https://www.apache.org/foundation/marks",license:{type:"Apache-2.0",url:"https://spdx.org/licenses/Apache-2.0"}},$i={title:"Apache Pulsar",slug:"apachepulsar",get svg(){return y+"Apache Pulsar"+f+this.path+v},path:"M24 8.925h-5.866c-1.586-3.041-3.262-5.402-5.544-5.402-2.97 0-4.367 2.593-5.717 5.115l-.118.22H0v1.5h3.934c1.39 0 1.673.468 1.673.468-1.09 1.691-2.4 3.363-4.584 3.363H0v1.574h1.03c4.234 0 6.083-3.434 7.567-6.193 1.361-2.541 2.31-4.08 3.993-4.08 1.747 0 3.584 3.801 5.201 7.157.237.488.477.988.72 1.483-6.2.197-9.155 1.649-11.559 2.833-1.759.866-3.147 1.94-5.433 1.94H0v1.574h1.507c2.754 0 4.47-.85 6.295-1.751 2.53-1.243 5.398-2.652 12.157-2.652h3.907V14.5H21.66a1.18 1.18 0 01-.972-.393 70.83 70.83 0 01-1.133-2.321l-.511-1.047s.366-.393 1.38-.393H24Z",source:"https://apache.org/logos",hex:"188FFF",guidelines:"https://www.apache.org/foundation/marks",license:{type:"Apache-2.0",url:"https://spdx.org/licenses/Apache-2.0"}},Ui={title:"Apache Spark",slug:"apachespark",get svg(){return y+"Apache Spark"+f+this.path+v},path:"M10.812 0c-.425.013-.845.215-1.196.605a3.593 3.593 0 00-.493.722c-.355.667-.425 1.415-.556 2.143a551.9 551.9 0 00-.726 4.087c-.027.16-.096.227-.244.273C5.83 8.386 4.06 8.94 2.3 9.514c-.387.125-.773.289-1.114.506-1.042.665-1.196 1.753-.415 2.71.346.422.79.715 1.284.936 1.1.49 2.202.976 3.3 1.47.019.01.036.013.053.019h-.004l1.306.535c0 .023.002.045 0 .073-.2 2.03-.39 4.063-.58 6.095-.04.419-.012.831.134 1.23.317.87 1.065 1.148 1.881.701.372-.204.666-.497.937-.818 1.372-1.623 2.746-3.244 4.113-4.872.111-.133.205-.15.363-.098.349.117.697.231 1.045.347h.001c.02.012.045.02.073.03l.142.042c1.248.416 2.68.775 3.929 1.19.4.132.622.164 1.045.098.311-.048.592-.062.828-.236.602-.33.995-.957.988-1.682-.005-.427-.154-.813-.35-1.186-.82-1.556-1.637-3.113-2.461-4.666-.078-.148-.076-.243.037-.375 1.381-1.615 2.756-3.236 4.133-4.855.272-.32.513-.658.653-1.058.308-.878-.09-1.57-1-1.741a2.783 2.783 0 00-1.235.069c-1.974.521-3.947 1.041-5.918 1.57-.175.047-.26.015-.355-.144a353.08 353.08 0 00-2.421-4.018 4.61 4.61 0 00-.652-.849c-.371-.37-.802-.549-1.227-.536zm.172 3.703a.592.592 0 01.189.211c.87 1.446 1.742 2.89 2.609 4.338.07.118.135.16.277.121 1.525-.41 3.052-.813 4.579-1.217.367-.098.735-.193 1.103-.289a.399.399 0 01-.1.2c-1.259 1.48-2.516 2.962-3.779 4.438-.11.13-.12.22-.04.37.937 1.803 1.768 3.309 2.498 4.76l-3.696-1.019c-.538-.18-1.077-.358-1.615-.539-.163-.055-.25-.03-.36.1-1.248 1.488-2.504 2.97-3.759 4.454a.398.398 0 01-.18.132c.035-.378.068-.757.104-1.136.149-1.572.297-3.144.451-4.716-.03-.318.117-.405-.322-.545-1.493-.593-3.346-1.321-4.816-1.905a.595.595 0 01.24-.134c1.797-.57 3.595-1.14 5.394-1.705.127-.04.199-.092.211-.233.013-.148.05-.294.076-.441.241-1.363.483-2.726.726-4.088.068-.386.14-.771.21-1.157z",source:"https://apache.org/logos",hex:"E25A1C",guidelines:"https://www.apache.org/foundation/marks",license:{type:"Apache-2.0",url:"https://spdx.org/licenses/Apache-2.0"}},Ja={title:"Apollo GraphQL",slug:"apollographql",get svg(){return y+"Apollo GraphQL"+f+this.path+v},path:"M12,0C5.372,0 0,5.373 0,12 0,18.628 5.372,24 12,24 18.627,24 24,18.628 24,12A12.014,12.014 0 0 0 23.527,8.657 0.6,0.6 0 0 0 22.4,9.066H22.398C22.663,10.009 22.8,10.994 22.8,12A10.73,10.73 0 0 1 19.637,19.637 10.729,10.729 0 0 1 12,22.8 10.73,10.73 0 0 1 4.363,19.637 10.728,10.728 0 0 1 1.2,12 10.73,10.73 0 0 1 4.363,4.363 10.728,10.728 0 0 1 12,1.2C14.576,1.2 17.013,2.096 18.958,3.74A1.466,1.466 0 1 0 19.82,2.9 11.953,11.953 0 0 0 12,0ZM10.56,5.88 6.36,16.782H8.99L9.677,14.934H13.646L12.927,
19412.892H10.314L12.014,8.201 15.038,16.781H17.669L13.47,5.88Z",source:"https://www.apollographql.com",hex:"311C87"},Vi={title:"Asana",slug:"asana",get svg(){return y+"Asana"+f+this.path+v},path:"M18.78 12.653c-2.882 0-5.22 2.336-5.22 5.22s2.338 5.22 5.22 5.22 5.22-2.34 5.22-5.22-2.336-5.22-5.22-5.22zm-13.56 0c-2.88 0-5.22 2.337-5.22 5.22s2.338 5.22 5.22 5.22 5.22-2.338 5.22-5.22-2.336-5.22-5.22-5.22zm12-6.525c0 2.883-2.337 5.22-5.22 5.22-2.882 0-5.22-2.337-5.22-5.22 0-2.88 2.338-5.22 5.22-5.22 2.883 0 5.22 2.34 5.22 5.22z",source:"https://asana.com/brand",hex:"F06A6A",guidelines:"https://asana.com/brand"},Ki={title:"Auth0",slug:"auth0",get svg(){return y+"Auth0"+f+this.path+v},path:"M21.98 7.448L19.62 0H4.347L2.02 7.448c-1.352 4.312.03 9.206 3.815 12.015L12.007 24l6.157-4.552c3.755-2.81 5.182-7.688 3.815-12.015l-6.16 4.58 2.343 7.45-6.157-4.597-6.158 4.58 2.358-7.433-6.188-4.55 7.63-.045L12.008 0l2.356 7.404 7.615.044z",source:"https://auth0.com",hex:"EB5424"},Qi={title:"Braintree",slug:"braintree",get svg(){return y+"Braintree"+f+this.path+v},path:"M8.276 20.482h4.717c3.641 0 5.462-1.2 5.462-3.517 0-2.275-1.945-3.517-5.752-3.517H8.276Zm0-16.965v6.538h4.138c3.103 0 4.717-1.159 4.717-3.269 0-2.152-1.655-3.269-4.759-3.269zM1.696 24v-3.518H4.47V3.517H1.697V0h11.089c5.09 0 8.193 2.358 8.193 6.455 0 2.69-1.572 4.345-3.558 5.131 2.855.787 4.882 2.814 4.882 5.586 0 4.386-3.393 6.828-8.938 6.828H1.697",source:"https://www.braintreepayments.com/press",hex:"000000"},Xa={title:"Brevo",slug:"brevo",get svg(){return y+"Brevo"+f+this.path+v},path:"M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zM7.2 4.8h5.747c2.34 0 3.895 1.406 3.895 3.516 0 1.022-.348 1.862-1.09 2.588C17.189 11.812 18 13.22 18 14.785c0 2.86-2.64 5.016-6.164 5.016H7.199v-15zm2.085 1.952v5.537h.07c.233-.432.858-.796 2.249-1.226 2.039-.659 3.037-1.52 3.037-2.655 0-.998-.766-1.656-1.924-1.656H9.285zm4.87 5.266c-.766.385-1.67.748-2.76 1.11-1.229.387-2.11 1.386-2.11 2.407v2.315h2.365c2.387 0 4.149-1.34 4.149-3.155 0-1.067-.625-2.087-1.645-2.677z",source:"https://www.brevo.com",hex:"0B996E"},Yi={title:"CircleCI",slug:"circleci",get svg(){return y+"CircleCI"+f+this.path+v},path:"M8.963 12c0-1.584 1.284-2.855 2.855-2.855 1.572 0 2.856 1.284 2.856 2.855 0 1.572-1.284 2.856-2.856 2.856-1.57 0-2.855-1.284-2.855-2.856zm2.855-12C6.215 0 1.522 3.84.19 9.025c-.01.036-.01.07-.01.12 0 .313.252.576.575.576H5.59c.23 0 .433-.13.517-.333.997-2.16 3.18-3.672 5.712-3.672 3.466 0 6.286 2.82 6.286 6.287 0 3.47-2.82 6.29-6.29 6.29-2.53 0-4.714-1.5-5.71-3.673-.097-.19-.29-.336-.517-.336H.755c-.312 0-.575.253-.575.576 0 .037.014.072.014.12C1.514 20.16 6.214 24 11.818 24c6.624 0 12-5.375 12-12 0-6.623-5.376-12-12-12z",source:"https://circleci.com/press",hex:"343434"},Zi={title:"Claude",slug:"claude",get svg(){return y+"Claude"+f+this.path+v},path:"m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.
1940182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z",source:"https://claude.ai",hex:"D97757"},Ji={title:"ClickHouse",slug:"clickhouse",get svg(){return y+"ClickHouse"+f+this.path+v},path:"M21.333 10H24v4h-2.667ZM16 1.335h2.667v21.33H16Zm-5.333 0h2.666v21.33h-2.666ZM0 22.665V1.335h2.667v21.33zm5.333-21.33H8v21.33H5.333Z",source:"https://github.com/ClickHouse/ClickHouse/blob/12bd453a43819176d25ecf247033f6cb1af54beb/website/images/logo-clickhouse.svg",hex:"FFCC01"},Xi={title:"Cloudflare",slug:"cloudflare",get svg(){return y+"Cloudflare"+f+this.path+v},path:"M16.5088 16.8447c.1475-.5068.0908-.9707-.1553-1.3154-.2246-.3164-.6045-.499-1.0615-.5205l-8.6592-.1123a.1559.1559 0 0 1-.1333-.0713c-.0283-.042-.0351-.0986-.021-.1553.0278-.084.1123-.1484.2036-.1562l8.7359-.1123c1.0351-.0489 2.1601-.8868 2.5537-1.9136l.499-1.3013c.0215-.0561.0293-.1128.0147-.168-.5625-2.5463-2.835-4.4453-5.5499-4.4453-2.5039 0-4.6284 1.6177-5.3876 3.8614-.4927-.3658-1.1187-.5625-1.794-.499-1.2026.119-2.1665 1.083-2.2861 2.2856-.0283.31-.0069.6128.0635.894C1.5683 13.171 0 14.7754 0 16.752c0 .1748.0142.3515.0352.5273.0141.083.0844.1475.1689.1475h15.9814c.0909 0 .1758-.0645.2032-.1553l.12-.4268zm2.7568-5.5634c-.0771 0-.1611 0-.2383.0112-.0566 0-.1054.0415-.127.0976l-.3378 1.1744c-.1475.5068-.0918.9707.1543 1.3164.2256.3164.6055.498 1.0625.5195l1.8437.1133c.0557 0 .1055.0263.1329.0703.0283.043.0351.1074.0214.1562-.0283.084-.1132.1485-.204.1553l-1.921.1123c-1.041.0488-2.1582.8867-2.5527 1.914l-.1406.3585c-.0283.0713.0215.1416.0986.1416h6.5977c.0771 0 .1474-.0489.169-.126.1122-.4082.1757-.837.1757-1.2803 0-2.6025-2.125-4.727-4.7344-4.727",source:"https://www.cloudflare.com/logo/",hex:"F38020",guidelines:"https://www.cloudflare.com/trademark/"},e1={title:"Cockroach Labs",slug:"cockroachlabs",get svg(){return y+"Cockroach Labs"+f+this.path+v},path:"M17.645 16.155a13.013 13.013 0 0 0-4.479-13.287 11.617 11.617 0 0 1 5.815-1.546c.774 0 1.545.075 2.304.226l.32-1.282A13.092 13.092 0 0 0 18.98 0 12.93 12.93 0 0 0 12 2.03 12.933 12.933 0 0 0 5.021 0C4.139 0 3.26.089 2.396.266l.319 1.282a11.83 11.83 0 0 1 2.306-.226 11.64 11.64 0 0 1 5.817 1.544 13.01 13.01 0 0 0 .792 20.877l.375.257.373-.257c2.624-1.801 4.5-4.5 5.27-7.588zm-6.305 5.7A11.687 11.687 0 0 1 7.825 9.519a13.08 13.08 0 0 0 2.457 2.977 3.202 3.202 0 0 1 1.058 2.383zm.661-9.657a11.717 11.717 0 0 1-2.343-2.315 3.23 3.23 0 0 1 0-3.912 11.67 11.67 0 0 1 2.347-2.333c.9.671 1.697 1.468 2.37 2.366a3.197 3.197 0 0 1 0 3.832 11.816 11.816 0 0 1-2.374 2.362zm.659 9.657v-6.976a3.202 3.202 0 0 1 1.06-2.383 13.026 13.026 0 0 0 2.455-2.977 11.694 11.694 0 0 1-3.515 12.336Z",source:"https://www.cockroachlabs.com",hex:"6933FF"},e2={title:"Confluence",slug:"confluence",get svg(){return y+"Confluence"+f+this.path+v},path:"M.87 18.257c-.248.382-.53.875-.763 1.245a.764.764 0 0 0 .255 1.04l4.965 3.054a.764.764 0 0 0 1.058-.26c.199-.332.454-.763.733-1.221 1.967-3.247 3.945-2.853 7.508-1.146l4.957 2.337a.764.764 0 0 0 1.028-.382l2.364-5.346a.764.764 0 0 0-.382-1 599.851 599.851 0 0 1-4.965-2.361C10.911 10.97 5.224 11.185.87 18.257zM23.131 5.743c.249-.405.531-.875.764-1.25a.764.764 0 0 0-.256-1.034L18.675.404a.764.764 0 0 0-1.058.26c-.195.335-.451.763-.734 1.225-1.966 3.246-3.945 2.85-7.508 1.146L4.437.694a.764.764 0 0 0-1.027.382L1.046 6.422a.764.764 0 0 0 .382
1941c1.039.49 3.105 1.467 4.965 2.361 6.698 3.246 12.392 3.029 16.738-4.04z",source:"https://www.atlassian.com/company/news/press-kit",hex:"172B4D"},t2={title:"Contentful",slug:"contentful",get svg(){return y+"Contentful"+f+this.path+v},path:"M21.875 16.361c-.043-.048-1.067-1.18-2.365-1.19-.68 0-1.288.283-1.815.858-.773.842-2.35 1.85-4.25 1.921-1.598.059-3.085-.548-4.423-1.805-1.644-1.544-2.155-4.016-1.302-6.297.834-2.23 2.752-3.616 5.131-3.707l.044-.004c.024-.003 2.302-.258 4.325 1.548.17.185 1.154 1.197 2.475 1.228.823.018 1.586-.336 2.27-1.055.602-.632.87-1.342.797-2.112-.154-1.61-1.806-2.876-2.03-3.04-.212-.184-1.878-1.578-4.476-2.294-2.52-.695-6.42-.853-10.685 2.349a7.31 7.31 0 0 0-.557.49c-.28.208-.523.462-.716.753a12.469 12.469 0 0 0-3.064 8.677c.207 6.283 5.265 9.293 5.646 9.51.262.17 2.906 1.81 6.495 1.809 2.106 0 4.538-.565 7.005-2.322.248-.138 1.714-1.012 2.103-2.52.23-.894.042-1.815-.562-2.737l-.046-.06zm-16.932 1.97c0-1.09.887-1.977 1.977-1.977s1.977.886 1.977 1.977c0 1.09-.887 1.977-1.977 1.977s-1.977-.887-1.977-1.977zm.139-13.657c.236-.275.451-.498.628-.67a1.965 1.965 0 0 1 1.088-.329c1.09 0 1.977.887 1.977 1.977S7.888 7.63 6.798 7.63s-1.977-.887-1.977-1.977c0-.356.096-.69.261-.978zM13.249.999c3.954 0 6.657 2.336 6.826 2.486l.043.034c.42.3 1.532 1.301 1.63 2.324.044.469-.126.898-.52 1.313-.477.5-.983.752-1.504.738-.964-.019-1.743-.887-1.76-.905l-.042-.044c-2.292-2.063-4.83-1.855-5.13-1.822a6.82 6.82 0 0 0-3.012.818 3 3 0 0 0-2.34-3.214C9.543 1.45 11.516.999 13.248.999zM3.884 6.34a3 3 0 0 0 2.914 2.31c.122 0 .24-.01.358-.024a7.336 7.336 0 0 0-.39.866c-.75 2.003-.59 4.14.359 5.854-.068-.005-.136-.01-.205-.01a2.999 2.999 0 0 0-2.967 2.6 10.075 10.075 0 0 1-1.7-5.288 11.43 11.43 0 0 1 1.63-6.309zM21.497 18.9c-.3 1.174-1.615 1.89-1.627 1.896l-.058.036c-6.287 4.499-12.137.667-12.382.502l-.036-.022a2.848 2.848 0 0 1-.034-.02 2.998 2.998 0 0 0 2.543-3.228c1.124.64 2.336.951 3.58.906 2.214-.083 4.057-1.264 4.962-2.25.327-.356.67-.53 1.048-.53h.005c.762.004 1.46.688 1.593.826.421.658.558 1.291.406 1.884z",source:"https://press.contentful.com/media_kits",hex:"2478CC"},a2={title:"Datadog",slug:"datadog",get svg(){return y+"Datadog"+f+this.path+v},path:"M19.57 17.04l-1.997-1.316-1.665 2.782-1.937-.567-1.706 2.604.087.82 9.274-1.71-.538-5.794zm-8.649-2.498l1.488-.204c.241.108.409.15.697.223.45.117.97.23 1.741-.16.18-.088.553-.43.704-.625l6.096-1.106.622 7.527-10.444 1.882zm11.325-2.712l-.602.115L20.488 0 .789 2.285l2.427 19.693 2.306-.334c-.184-.263-.471-.581-.96-.989-.68-.564-.44-1.522-.039-2.127.53-1.022 3.26-2.322 3.106-3.956-.056-.594-.15-1.368-.702-1.898-.02.22.017.432.017.432s-.227-.289-.34-.683c-.112-.15-.2-.199-.319-.4-.085.233-.073.503-.073.503s-.186-.437-.216-.807c-.11.166-.137.48-.137.48s-.241-.69-.186-1.062c-.11-.323-.436-.965-.343-2.424.6.421 1.924.321 2.44-.439.171-.251.288-.939-.086-2.293-.24-.868-.835-2.16-1.066-2.651l-.028.02c.122.395.374 1.223.47 1.625.293 1.218.372 1.642.234 2.204-.116.488-.397.808-1.107 1.165-.71.358-1.653-.514-1.713-.562-.69-.55-1.224-1.447-1.284-1.883-.062-.477.275-.763.445-1.153-.243.07-.514.192-.514.192s.323-.334.722-.624c.165-.109.262-.178.436-.323a9.762 9.762 0 0 0-.456.003s.42-.227.855-.392c-.318-.014-.623-.003-.623-.003s.937-.419 1.678-.727c.509-.208 1.006-.147 1.286.257.367.53.752.817 1.569.996.501-.223.653-.337 1.284-.509.554-.61.99-.688.99-.688s-.216.198-.274.51c.314-.249.66-.455.66-.455s-.134.164-.259.426l.03.043c.366-.22.797-.394.797-.394s-.123.156-.268.358c.277-.002.838.012 1.056.037 1.285.028 1.552-1.374 2.045-1.55.618-.22.894-.353 1.947.68.903.888 1.609 2.477 1.259 2.833-.294.295-.874-.115-1.516-.916a3.466 3.466 0 0 1-.716-1.562 1.533 1.533 0 0 0-.497-.85s.23.51.23.96c0 .246.03 1.165.424 1.68-.039.076-.057.374-.1.43-.458-.554-1.443-.95-1.604-1.067.544.445 1.793 1.468 2.273 2.449.453.927.186 1.777.416 1.997.065.063.976 1.197 1.15 1.767.306.994.019 2.038-.381 2.685l-1.117.174c-.163-.045-.273-.068-.42-.153.08-.143.241-.5.243-.572l-.063-.111c-.348.492-.93.97-1.414 1.245-.633.359-1.363.304-1.838.156-1.348-.415-2.623-1.327-2.93-1.566 0 0-.01.191.048.234.34.383 1.119 1.077 1.872 1.56l-1.605.177.759 5.908c-.337.048-.39.071-.757.124-.325-1.147-.946-1.895-1.624-2.332-.599-.384-1.424-.47-2.214-.314l-.05.059a2.851 2.851 0 0 1 1.863.444c.654.413 1.181 1.481 1.375 2.124.248.822.42 1.7-.248 2.632-.476.662-1.864 1.028-2.986.237.3.481.705.876 1.25.95.809.11 1.577-.03 2.106-.574.452-.464.69-1.434.628-2.456l.714-.104.258 1.834 11.827-1.424zM15.05 6.848c-.034.075-.085.125-.007.37l.004.014.013.032.032.073c.14.287.295.558.552.696.067-.011.136-.019.207-.023.242-.01.395.028.492.08.009-.048.01-.119.005-.222-.018-.364.072-.982-.626-1.308-.264-.122-.634-.084-.757.068a.302.302 0 0 1 .058.013c.186.066.06.13.027.207m1.958 3.392c-.092-.05-.52-.03-.821.005-.574.068-1.193.267-1.328.372-.247.191-.135.523.047.66.511.382.96.638 1.432.575.29-.038.546-.497.728-.914.124-.288.124-.598-.058-.698m-5.077-2.942c.162-.154-.805-.355-1.556.156-.554.378-.571 1.187-.041 1.646.053.046.096.078.137.104a4.77 4.77 0 0 1 1.396-.412c.113-.125.243-.345.21-.745-.044-.542-.455-.456-.146-.749",source:"https://www.datadoghq.com/about/resources",hex:"632CA6",guidelines:"https://www.datadoghq.com/about/resources/"},o2={title:"Discord",slug:"discord",get svg(){return y+"Discord"+f+this.path+v},path:"M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363
1940 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z",source:"https://discord.com/branding",hex:"5865F2",guidelines:"https://discord.com/branding"},Gt={title:"Docker",slug:"docker",get svg(){return y+"Docker"+f+this.path+v},path:"M13.983 11.078h2.119a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.119a.185.185 0 00-.185.185v1.888c0 .102.083.185.185.185m-2.954-5.43h2.118a.186.186 0 00.186-.186V3.574a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m0 2.716h2.118a.187.187 0 00.186-.186V6.29a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.887c0 .102.082.185.185.186m-2.93 0h2.12a.186.186 0 00.184-.186V6.29a.185.185 0 00-.185-.185H8.1a.185.185 0 00-.185.185v1.887c0 .102.083.185.185.186m-2.964 0h2.119a.186.186 0 00.185-.186V6.29a.185.185 0 00-.185-.185H5.136a.186.186 0 00-.186.185v1.887c0 .102.084.185.186.186m5.893 2.715h2.118a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m-2.93 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.083.185.185.185m-2.964 0h2.119a.185.185 0 00.185-.185V9.006a.185.185 0 00-.184-.186h-2.12a.186.186 0 00-.186.186v1.887c0 .102.084.185.186.185m-2.92 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.082.185.185.185M23.763 9.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612 1.43-.23.97-.09 1.882.403 2.661-.595.332-1.55.413-1.744.42H.751a.751.751 0 00-.75.748 11.376 11.376 0 00.692 4.062c.545 1.428 1.355 2.48 2.41 3.124 1.18.723 3.1 1.137 5.275 1.137.983.003 1.963-.086 2.93-.266a12.248 12.248 0 003.823-1.389c.98-.567 1.86-1.288 2.61-2.136 1.252-1.418 1.998-2.997 2.553-4.4h.221c1.372 0 2.215-.549 2.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z",source:"https://www.docker.com/company/newsroom/media-resources",hex:"2496ED"},n2={title:"Dropbox",slug:"dropbox",get svg(){return y+"Dropbox"+f+this.path+v},path:"M6 1.807L0 5.629l6 3.822 6.001-3.822L6 1.807zM18 1.807l-6 3.822 6 3.822 6-3.822-6-3.822zM0 13.274l6 3.822 6.001-3.822L6 9.452l-6 3.822zM18 9.452l-6 3.822 6 3.822 6-3.822-6-3.822zM6 18.371l6.001 3.822 6-3.822-6-3.822L6 18.371z",source:"https://www.dropbox.com/branding",hex:"0061FF"},t1={title:"Elasticsearch",slug:"elasticsearch",get svg(){return y+"Elasticsearch"+f+this.path+v},path:"M13.394 0C8.683 0 4.609 2.716 2.644 6.667h15.641a4.77 4.77 0 0 0 3.073-1.11c.446-.375.864-.785 1.247-1.243l.001-.002A11.974 11.974 0 0 0 13.394 0zM1.804 8.889a12.009 12.009 0 0 0 0 6.222h14.7a3.111 3.111 0 1 0 0-6.222zm.84 8.444C4.61 21.283 8.684 24 13.395 24c3.701 0 7.011-1.677 9.212-4.312l-.001-.002a9.958 9.958 0 0 0-1.247-1.243 4.77 4.77 0 0 0-3.073-1.11z",source:"https://www.elastic.co/brand",hex:"005571"},s2={title:"Firebase",slug:"firebase",get svg(){return y+"Firebase"+f+this.path+v},path:"M19.455 8.369c-.538-.748-1.778-2.285-3.681-4.569-.826-.991-1.535-1.832-1.884-2.245a146 146 0 0 0-.488-.576l-.207-.245-.113-.133-.022-.032-.01-.005L12.57 0l-.609.488c-1.555 1.246-2.828 2.851-3.681 4.64-.523 1.064-.864 2.105-1.043 3.176-.047.241-.088.489-.121.738-.209-.01
1947-.421-.028-.632-.033-.018-.001-.035-.002-.059-.003a7.46 7.46 0 0 0-2.28.274l-.317.089-.163.286c-.765 1.342-1.198 2.869-1.252 4.416-.07 2.01.477 3.954 1.583 5.625 1.082 1.633 2.61 2.882 4.42 3.611l.236.095.071.025.003-.001a9.59 9.59 0 0 0 2.941.568q.171.006.342.006c1.273 0 2.513-.249 3.69-.742l.008.004.313-.145a9.63 9.63 0 0 0 3.927-3.335c1.01-1.49 1.577-3.234 1.641-5.042.075-2.161-.643-4.304-2.133-6.371m-7.083 6.695c.328 1.244.264 2.44-.191 3.558-1.135-1.12-1.967-2.352-2.475-3.665-.543-1.404-.87-2.74-.974-3.975.48.157.922.366 1.315.622 1.132.737 1.914 1.902 2.325 3.461zm.207 6.022c.482.368.99.712 1.513 1.028-.771.21-1.565.302-2.369.273a8 8 0 0 1-.373-.022c.458-.394.869-.823 1.228-1.279zm1.347-6.431c-.516-1.957-1.527-3.437-3.002-4.398-.647-.421-1.385-.741-2.194-.95.011-.134.026-.268.043-.4.014-.113.03-.216.046-.313.133-.689.332-1.37.589-2.025.099-.25.206-.499.321-.74l.004-.008c.177-.358.376-.719.61-1.105l.092-.152-.003-.001c.544-.851 1.197-1.627 1.942-2.311l.288.341c.672.796 1.304 1.548 1.878 2.237 1.291 1.549 2.966 3.583 3.612 4.48 1.277 1.771 1.893 3.579 1.83 5.375-.049 1.395-.461 2.755-1.195 3.933-.694 1.116-1.661 2.05-2.8 2.708-.636-.318-1.559-.839-2.539-1.599.79-1.575.952-3.28.479-5.072zm-2.575 5.397c-.725.939-1.587 1.55-2.09 1.856-.081-.029-.163-.06-.243-.093l-.065-.026c-1.49-.616-2.747-1.656-3.635-3.01-.907-1.384-1.356-2.993-1.298-4.653.041-1.19.338-2.327.882-3.379.316-.07.638-.114.96-.131l.084-.002c.162-.003.324-.003.478 0 .227.011.454.035.677.07.073 1.513.445 3.145 1.105 4.852.637 1.644 1.694 3.162 3.144 4.515z",source:"https://firebase.google.com/brand-guidelines",hex:"DD2C00",guidelines:"https://firebase.google.com/brand-guidelines"},r2={title:"GitHub",slug:"github",get svg(){return y+"GitHub"+f+this.path+v},path:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12",source:"https://github.com/logos",hex:"181717",guidelines:"https://github.com/logos"},a1={title:"GitHub Actions",slug:"githubactions",get svg(){return y+"GitHub Actions"+f+this.path+v},path:"M10.984 13.836a.5.5 0 0 1-.353-.146l-.745-.743a.5.5 0 1 1 .706-.708l.392.391 1.181-1.18a.5.5 0 0 1 .708.707l-1.535 1.533a.504.504 0 0 1-.354.146zm9.353-.147l1.534-1.532a.5.5 0 0 0-.707-.707l-1.181 1.18-.392-.391a.5.5 0 1 0-.706.708l.746.743a.497.497 0 0 0 .706-.001zM4.527 7.452l2.557-1.585A1 1 0 0 0 7.09 4.17L4.533 2.56A1 1 0 0 0 3 3.406v3.196a1.001 1.001 0 0 0 1.527.85zm2.03-2.436L4 6.602V3.406l2.557 1.61zM24 12.5c0 1.93-1.57 3.5-3.5 3.5a3.503 3.503 0 0 1-3.46-3h-2.08a3.503 3.503 0 0 1-3.46 3 3.502 3.502 0 0 1-3.46-3h-.558c-.972 0-1.85-.399-2.482-1.042V17c0 1.654 1.346 3 3 3h.04c.244-1.693 1.7-3 3.46-3 1.93 0 3.5 1.57 3.5 3.5S13.43 24 11.5 24a3.502 3.502 0 0 1-3.46-3H8c-2.206 0-4-1.794-4-4V9.899A5.008 5.008 0 0 1 0 5c0-2.757 2.243-5 5-5s5 2.243 5 5a5.005 5.005 0 0 1-4.952 4.998A2.482 2.482 0 0 0 7.482 12h.558c.244-1.693 1.7-3 3.46-3a3.502 3.502 0 0 1 3.46 3h2.08a3.503 3.503 0 0 1 3.46-3c1.93 0 3.5 1.57 3.5 3.5zm-15 8c0 1.378 1.122 2.5 2.5 2.5s2.5-1.122 2.5-2.5-1.122-2.5-2.5-2.5S9 19.122 9 20.5zM5 9c2.206 0 4-1.794 4-4S7.206 1 5 1 1 2.794 1 5s1.794 4 4 4zm9 3.5c0-1.378-1.122-2.5-2.5-2.5S9 11.122 9 12.5s1.122 2.5 2.5 2.5 2.5-1.122 2.5-2.5zm9 0c0-1.378-1.122-2.5-2.5-2.5S18 11.122 18 12.5s1.122 2.5 2.5 2.5 2.5-1.122 2.5-2.5zm-13 8a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm2 0a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm12 0c0 1.93-1.57 3.5-3.5 3.5a3.503 3.503 0 0 1-3.46-3.002c-.007.001-.013.005-.021.005l-.506.017h-.017a.5.5 0 0 1-.016-.999l.506-.017c.018-.002.035.006.052.007A3.503 3.503 0 0 1 20.5 17c1.93 0 3.5 1.57 3.5 3.5zm-1 0c0-1.378-1.122-2.5-2.5-2.5S18 19.122 18 20.5s1.122 2.5 2.5 2.5 2.5-1.122 2.5-2.5z",source:"https://github.com/features/actions",hex:"2088FF"},i2={title:"GitLab",slug:"gitlab",get svg(){return y+"GitLab"+f+this.path+v}
194,path:"m23.6004 9.5927-.0337-.0862L20.3.9814a.851.851 0 0 0-.3362-.405.8748.8748 0 0 0-.9997.0539.8748.8748 0 0 0-.29.4399l-2.2055 6.748H7.5375l-2.2057-6.748a.8573.8573 0 0 0-.29-.4412.8748.8748 0 0 0-.9997-.0537.8585.8585 0 0 0-.3362.4049L.4332 9.5015l-.0325.0862a6.0657 6.0657 0 0 0 2.0119 7.0105l.0113.0087.03.0213 4.976 3.7264 2.462 1.8633 1.4995 1.1321a1.0085 1.0085 0 0 0 1.2197 0l1.4995-1.1321 2.4619-1.8633 5.006-3.7489.0125-.01a6.0682 6.0682 0 0 0 2.0094-7.003z",source:"https://about.gitlab.com/press/press-kit/",hex:"FC6D26",guidelines:"https://about.gitlab.com/handbook/marketing/corporate-marketing/brand-activation/trademark-guidelines/"},l2={title:"Gmail",slug:"gmail",get svg(){return y+"Gmail"+f+this.path+v},path:"M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-2.023 2.309-3.178 3.927-1.964L5.455 4.64 12 9.548l6.545-4.91 1.528-1.145C21.69 2.28 24 3.434 24 5.457z",source:"https://fonts.gstatic.com/s/i/productlogos/gmail_2020q4/v8/192px.svg",hex:"EA4335"},Wt={title:"Google Ads",slug:"googleads",get svg(){return y+"Google Ads"+f+this.path+v},path:"M3.9998 22.9291C1.7908 22.9291 0 21.1383 0 18.9293s1.7908-3.9998 3.9998-3.9998 3.9998 1.7908 3.9998 3.9998-1.7908 3.9998-3.9998 3.9998zm19.4643-6.0004L15.4632 3.072C14.3586 1.1587 11.9121.5028 9.9988 1.6074S7.4295 5.1585 8.5341 7.0718l8.0009 13.8567c1.1046 1.9133 3.5511 2.5679 5.4644 1.4646 1.9134-1.1046 2.568-3.5511 1.4647-5.4644zM7.5137 4.8438L1.5645 15.1484A4.5 4.5 0 0 1 4 14.4297c2.5597-.0075 4.6248 2.1585 4.4941 4.7148l3.2168-5.5723-3.6094-6.25c-.4499-.7793-.6322-1.6394-.5878-2.4784z",source:"https://ads.google.com/home/",hex:"4285F4"},o1={title:"Google AdSense",slug:"googleadsense",get svg(){return y+"Google AdSense"+f+this.path+v},path:"M22.056 8.447a3.894 3.894 0 0 0-5.313 1.419l-3.889 6.72a3.874 3.874 0 0 0 1.415 5.293l.01.005a3.894 3.894 0 0 0 5.312-1.42l3.889-6.718a3.875 3.875 0 0 0-1.416-5.294l-.008-.005m-14.7 12.168c-1.08 1.888-3.514 2.583-5.384 1.493-1.87-1.09-2.533-3.455-1.453-5.343s3.494-2.586 5.365-1.496c1.87 1.09 2.554 3.457 1.474 5.344m4.131-19.228a3.935 3.935 0 0 0-3.267 2.189l-3.67 6.279a4.638 4.638 0 0 0-.227.387l-2.746 4.737c1.345-.86 3.09-.993 4.55-.143a4.456 4.456 0 0 1 2.22 4.041l2.77-4.763c.082-.124.157-.252.224-.385l3.67-6.281a3.86 3.86 0 0 0-1.283-5.55 3.958 3.958 0 0 0-2.24-.511z",source:"https://www.google.com/adsense/",hex:"4285F4"},ot={title:"Google Analytics",slug:"googleanalytics",get svg(){return y+"Google Analytics"+f+this.path+v},path:"M22.84 2.9982v17.9987c.0086 1.6473-1.3197 2.9897-2.967 2.9984a2.9808 2.9808 0 01-.3677-.0208c-1.528-.226-2.6477-1.5558-2.6105-3.1V3.1204c-.0369-1.5458 1.0856-2.8762 2.6157-3.1 1.6361-.1915 3.1178.9796 3.3093 2.6158.014.1201.0208.241.0202.3619zM4.1326 18.0548c-1.6417 0-2.9726 1.331-2.9726 2.9726C1.16 22.6691 2.4909 24 4.1326 24s2.9726-1.3309 2.9726-2.9726-1.331-2.9726-2.9726-2.9726zm7.8728-9.0098c-.0171 0-.0342 0-.0513.0003-1.6495.0904-2.9293 1.474-2.891 3.1256v7.9846c0 2.167.9535 3.4825 2.3505 3.763 1.6118.3266 3.1832-.7152 3.5098-2.327.04-.1974.06-.3983.0593-.5998v-8.9585c.003-1.6474-1.33-2.9852-2.9773-2.9882z",source:"https://marketingplatform.google.com/intl/en_uk/about/analytics/",hex:"E37400"},n1={title:"Google Apps Script",slug:"googleappsscript",get svg(){return y+"Google Apps Script"+f+this.path+v},path:"M12.363 2.54a3.136 3.136 0 0 0-.376.022 2.864 2.864 0 0 0-1.589.828c-.562.58-.82 1.115-.773 1.943-.01.264.193 1.023.272 1.274 1.115 3.546 2.09 6.75 3.26 10.279.08.246.168.486.267.72.02.047.035.046.048-.004.077-.297.174-.612.29-.945.894-2.576 1.772-5.14 2.633-7.696a.345.345 0 0 0 .004-.217 163.054 163.054 0 0 0-1.49-4.572 2.603 2.603 0 0 0-.704-.933c-.55-.46-1.166-.694-1.842-.7Zm9.078.117a2.734 2.734 0 0 0-2.878 1.828l-4.576 13.289a2.734 2.734 0 0 0 1.695 3.475l.12.04a2.734 2.734 0 0 0 3.475-1.694L23.85 6.307a2.734 2.734 0 0 0-1.695-3.476c-.233-.1-.506-.124-.716-.174ZM12.375 3.96a1.396 1.396 0 1 1 0 2.791 1.395 1.395 0 0 1 0-2.79zm8.809.07a1.402 1.402 0 1 1 0 2.803 1.402 1.402 0 0 1 0-2.803zM5.419 7.605a2.853 2.853 0 0 0-.468.052 2.683 2.683 0 0 0-1.337.627 2.62 2.62 0 0 0-.924 1.833 3.808 3.808 0 0 0 0 .648 2.52 2.52 0 0 0 .673 1.52c.221.238.465.454.732.648 3.043 2.21 6.08 4.43 9.108 6.664a.78.78 0 0 0 .158.089c.03-.043.032-.098.007-.167a17.409 17.409 0 0 0-.317-1.066 532.752 532.752 0 0 1-2.02-6.251 41.91 41.91 0 0 0-.497-1.477c-.967-.849-2.078-1.6-3.023-2.302A3.848 3.848 0 0 0 6.153 7.7a2.388 2.388 0 0 0-.734-.094Zm.02 1.424a1.398 1.398 0 1 1 0 2.796 1.398 1.398 0 0 1 0-2.796zm-2.458 6.792c-.733-.006-1.375.202-1.927.622a2.72 2.72 0 0 0-.95 1.45 2.78 2.78 0 0 0-.09 1.04 2.74 2.74 0 0 0 .695 1.583c.664.578 1.26.85 2 .945 1.42-.005 2.84-.012 4.262-.02h.418c2.277-.003 4.513-.002 6.706.003.148.005.28.003.392-.01.06-.005.091-.031.092-.077a10.656 10.656 0 0 0-.834-.653 488.746 488.746 0 0 1-6.57-4.815.236.236 0 0 0-.14-.047c-1.34-.003-2.691-.01-4.054-.02zm-.19 1.418a1.402 1.402 0 1 1 0 2.803 1.402 1.402 0 0 1 0-2.803zm13.874.002a1.4 1.4 0 1 1 0 2.8 1.4 1.4 0 0 1 0-2.8z",source:"https://github.com/simple-icons/simple-icons/issues/3556#issuecomment-800482267",hex:"4285F4"},c2={title:"Google BigQuery",slug:"googlebigquery",get svg(){return y+"Google BigQuery"+f+this.path+v}
194,path:"M5.676 10.595h2.052v5.244a5.892 5.892 0 0 1-2.052-2.088v-3.156zm18.179 10.836a.504.504 0 0 1 0 .708l-1.716 1.716a.504.504 0 0 1-.708 0l-4.248-4.248a.206.206 0 0 1-.007-.007c-.02-.02-.028-.045-.043-.066a10.736 10.736 0 0 1-6.334 2.065C4.835 21.599 0 16.764 0 10.799S4.835 0 10.8 0s10.799 4.835 10.799 10.8c0 2.369-.772 4.553-2.066 6.333.025.017.052.028.074.05l4.248 4.248zm-5.028-10.632a8.015 8.015 0 1 0-8.028 8.028h.024a8.016 8.016 0 0 0 8.004-8.028zm-4.86 4.98a6.002 6.002 0 0 0 2.04-2.184v-1.764h-2.04v3.948zm-4.5.948c.442.057.887.08 1.332.072.4.025.8.025 1.2 0V7.692H9.468v9.035z",source:"https://cloud.google.com/icons",hex:"669DF6",guidelines:"https://about.google/brand-resource-center"},h2={title:"Google Calendar",slug:"googlecalendar",get svg(){return y+"Google Calendar"+f+this.path+v},path:"M18.316 5.684H24v12.632h-5.684V5.684zM5.684 24h12.632v-5.684H5.684V24zM18.316 5.684V0H1.895A1.894 1.894 0 0 0 0 1.895v16.421h5.684V5.684h12.632zm-7.207 6.25v-.065c.272-.144.5-.349.687-.617s.279-.595.279-.982c0-.379-.099-.72-.3-1.025a2.05 2.05 0 0 0-.832-.714 2.703 2.703 0 0 0-1.197-.257c-.6 0-1.094.156-1.481.467-.386.311-.65.671-.793 1.078l1.085.452c.086-.249.224-.461.413-.633.189-.172.445-.257.767-.257.33 0 .602.088.816.264a.86.86 0 0 1 .322.703c0 .33-.12.589-.36.778-.24.19-.535.284-.886.284h-.567v1.085h.633c.407 0 .748.109 1.02.327.272.218.407.499.407.843 0 .336-.129.614-.387.832s-.565.327-.924.327c-.351 0-.651-.103-.897-.311-.248-.208-.422-.502-.521-.881l-1.096.452c.178.616.505 1.082.977 1.401.472.319.984.478 1.538.477a2.84 2.84 0 0 0 1.293-.291c.382-.193.684-.458.902-.794.218-.336.327-.72.327-1.149 0-.429-.115-.797-.344-1.105a2.067 2.067 0 0 0-.881-.689zm2.093-1.931l.602.913L15 10.045v5.744h1.187V8.446h-.827l-2.158 1.557zM22.105 0h-3.289v5.184H24V1.895A1.894 1.894 0 0 0 22.105 0zm-3.289 23.5l4.684-4.684h-4.684V23.5zM0 22.105C0 23.152.848 24 1.895 24h3.289v-5.184H0v3.289z",source:"https://fonts.gstatic.com/s/i/productlogos/calendar_2020q4/v8/192px.svg",hex:"4285F4"},d2={title:"Google Chat",slug:"googlechat",get svg(){return y+"Google Chat"+f+this.path+v},path:"M1.637 0C.733 0 0 .733 0 1.637v16.5c0 .904.733 1.636 1.637 1.636h3.955v3.323c0 .804.97 1.207 1.539.638l3.963-3.96h11.27c.903 0 1.636-.733 1.636-1.637V5.592L18.408 0Zm3.955 5.592h12.816v8.59H8.455l-2.863 2.863Z",source:"https://support.google.com/chat/answer/9455386",hex:"34A853"},s1={title:"Google Cloud",slug:"googlecloud",get svg(){return y+"Google Cloud"+f+this.path+v},path:"M12.19 2.38a9.344 9.344 0 0 0-9.234 6.893c.053-.02-.055.013 0 0-3.875 2.551-3.922 8.11-.247 10.941l.006-.007-.007.03a6.717 6.717 0 0 0 4.077 1.356h5.173l.03.03h5.192c6.687.053 9.376-8.605 3.835-12.35a9.365 9.365 0 0 0-2.821-4.552l-.043.043.006-.05A9.344 9.344 0 0 0 12.19 2.38zm-.358 4.146c1.244-.04 2.518.368 3.486 1.15a5.186 5.186 0 0 1 1.862 4.078v.518c3.53-.07 3.53 5.262 0 5.193h-5.193l-.008.009v-.04H6.785a2.59 2.59 0 0 1-1.067-.23h.001a2.597 2.597 0 1 1 3.437-3.437l3.013-3.012A6.747 6.747 0 0 0 8.11 8.24c.018-.01.04-.026.054-.023a5.186 5.186 0 0 1 3.67-1.69z",source:"https://cloud.google.com",hex:"4285F4"},r1={title:"Google Colab",slug:"googlecolab",get svg(){return y+"Google Colab"+f+this.path+v},path:"M16.9414 4.9757a7.033 7.033 0 0 0-4.9308 2.0646 7.033 7.033 0 0 0-.1232 9.8068l2.395-2.395a3.6455 3.6455 0 0 1 5.1497-5.1478l2.397-2.3989a7.033 7.033 0 0 0-4.8877-1.9297zM7.07 4.9855a7.033 7.033 0 0 0-4.8878 1.9316l2.3911 2.3911a3.6434 3.6434 0 0 1 5.0227.1271l1.7341-2.9737-.0997-.0802A7.033 7.033 0 0 0 7.07 4.9855zm15.0093 2.1721l-2.3892 2.3911a3.6455 3.6455 0 0 1-5.1497 5.1497l-2.4067 2.4068a7.0362 7.0362 0 0 0 9.9456-9.9476zM1.932 7.1674a7.033 7.033 0 0 0-.002 9.6816l2.397-2.397a3.6434 3.6434 0 0 1-.004-4.8916zm7.664 7.4235c-1.38 1.3816-3.5863 1.411-5.0168.1134l-2.397 2.395c2.4693 2.3328 6.263 2.5753 9.0072.5455l.1368-.1115z",source:"https://colab.research.google.com",hex:"F9AB00"},i1={title:"Google Docs",slug:"googledocs",get svg(){return y+"Google Docs"+f+this.path+v},path:"M14.727 6.727H14V0H4.91c-.905 0-1.637.732-1.637 1.636v20.728c0 .904.732 1.636 1.636 1.636h14.182c.904 0 1.636-.732 1.636-1.636V6.727h-6zm-.545 10.455H7.09v-1.364h
1947.09v1.364zm2.727-3.273H7.091v-1.364h9.818v1.364zm0-3.273H7.091V9.273h9.818v1.363zM14.727 6h6l-6-6v6z",source:"https://www.google.com/docs/about",hex:"4285F4"},l1={title:"Google Drive",slug:"googledrive",get svg(){return y+"Google Drive"+f+this.path+v},path:"M12.01 1.485c-2.082 0-3.754.02-3.743.047.01.02 1.708 3.001 3.774 6.62l3.76 6.574h3.76c2.081 0 3.753-.02 3.742-.047-.005-.02-1.708-3.001-3.775-6.62l-3.76-6.574zm-4.76 1.73a789.828 789.861 0 0 0-3.63 6.319L0 15.868l1.89 3.298 1.885 3.297 3.62-6.335 3.618-6.33-1.88-3.287C8.1 4.704 7.255 3.22 7.25 3.214zm2.259 12.653-.203.348c-.114.198-.96 1.672-1.88 3.287a423.93 423.948 0 0 1-1.698 2.97c-.01.026 3.24.042 7.222.042h7.244l1.796-3.157c.992-1.734 1.85-3.23 1.906-3.323l.104-.167h-7.249z",source:"https://developers.google.com/drive/web/branding",hex:"4285F4"},c1={title:"Google Forms",slug:"googleforms",get svg(){return y+"Google Forms"+f+this.path+v},path:"M14.727 6h6l-6-6v6zm0 .727H14V0H4.91c-.905 0-1.637.732-1.637 1.636v20.728c0 .904.732 1.636 1.636 1.636h14.182c.904 0 1.636-.732 1.636-1.636V6.727h-6zM7.91 17.318a.819.819 0 1 1 .001-1.638.819.819 0 0 1 0 1.638zm0-3.273a.819.819 0 1 1 .001-1.637.819.819 0 0 1 0 1.637zm0-3.272a.819.819 0 1 1 .001-1.638.819.819 0 0 1 0 1.638zm9 6.409h-6.818v-1.364h6.818v1.364zm0-3.273h-6.818v-1.364h6.818v1.364zm0-3.273h-6.818V9.273h6.818v1.363z",source:"https://about.google/products/#all-products",hex:"7248B9"},h1={title:"Google Gemini",slug:"googlegemini",get svg(){return y+"Google Gemini"+f+this.path+v},path:"M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81",source:"https://gemini.google.com",hex:"8E75B2"},d1={title:"Google Maps",slug:"googlemaps",get svg(){return y+"Google Maps"+f+this.path+v},path:"M19.527 4.799c1.212 2.608.937 5.678-.405 8.173-1.101 2.047-2.744 3.74-4.098 5.614-.619.858-1.244 1.75-1.669 2.727-.141.325-.263.658-.383.992-.121.333-.224.673-.34 1.008-.109.314-.236.684-.627.687h-.007c-.466-.001-.579-.53-.695-.887-.284-.874-.581-1.713-1.019-2.525-.51-.944-1.145-1.817-1.79-2.671L19.527 4.799zM8.545 7.705l-3.959 4.707c.724 1.54 1.821 2.863 2.871 4.18.247.31.494.622.737.936l4.984-5.925-.029.01c-1.741.601-3.691-.291-4.392-1.987a3.377 3.377 0 0 1-.209-.716c-.063-.437-.077-.761-.004-1.198l.001-.007zM5.492 3.149l-.003.004c-1.947 2.466-2.281 5.88-1.117 8.77l4.785-5.689-.058-.05-3.607-3.035zM14.661.436l-3.838 4.563a.295.295 0 0 1 .027-.01c1.6-.551 3.403.15 4.22 1.626.176.319.323.683.377 1.045.068.446.085.773.012 1.22l-.003.016 3.836-4.561A8.382 8.382 0 0 0 14.67.439l-.009-.003zM9.466 5.868L14.162.285l-.047-.012A8.31 8.31 0 0 0 11.986 0a8.439 8.439 0 0 0-6.169 2.766l-.016.018 3.665 3.084z",source:"https://commons.wikimedia.org/wiki/File:Google_Maps_icon.svg",hex:"4285F4"},u1={title:"Google Meet",slug:"googlemeet",get svg(){return y+"Google Meet"+f+this.path+v},path:"M5.53 2.13 0 7.75h5.53zm.398 0v5.62h7.608v3.65l5.47-4.45c-.014-1.22.031-2.25-.025-3.46-.148-1.09-1.287-1.47-2.236-1.36zM23.1 4.32c-.802.295-1.358.995-2.047 1.49-2.506 2.05-4.982 4.12-7.468 6.19 3.025 2.59 6.04 5.18 9.065 7.76 1.218.671 1.428-.814 1.328-1.64v-13a.828.828 0 0 0-.877-.825zM.038 8.15v7.7h5.53v-7.7zm13.577 8.1H6.008v5.62c3.864-.006 7.737.011 11.58-.009 1.02-.07 1.618-1.12 1.468-2.07v-2.51l-5.47-4.68v3.65zm-13.577 0c.02 1.44-.041 2.88.033 4.31.162.948 1.158 1.43 2.047 1.31h3.464v-5.62z",source:"https://about.google/brand-resource-center/logos-list/",hex:"00897B"},p1={title:"Google Pay",slug:"googlepay",get svg(){return y+"Google Pay"+f+this.path+v},path:"M3.963 7.235A3.963 3.963 0 00.422 9.419a3.963 3.963 0 000 3.559 3.963 3.963 0 003.541 2.184c1.07 0 1.97-.352 2.627-.957.748-.69 1.18-1.71 1.18-2.916a4.722 4.722 0 00-.07-.806H3.964v1.526h2.14a1.835 1.835 0 01-.79 1.205c-.356.241-.814.379-1.35.379-1.034 0-1.911-.697-2.225-1.636a2.375 2.375 0 010-1.517c.314-.94 1.191-1.636 2.225-1.636a2.152 2.152 0 011.52.594l1.132-1.13a3.808 3.808 0 00-2.652-1.033zm6.501.55v6.9h.886V11.89h1.465c.603 0 1.11-.196 1.522-.588a1.911 1.911 0 00.635-1.464 1.92 1.92 0 00-.635-1.456 2.125 2.125 0 00-1.522-.598zm2.427.85a1.156 1.156 0 01.823.365 1.176 1.176 0 010 1.686 1.171 1.171 0 01-.877.357H11.35V8.635h1.487a1.156 1.156 0 01.054 0zm4.124 1.175c-.842 0-1.477.308-1.907.925l.781.491c.288-.417.68-.626 1.175-.626a1.255 1.255 0 01.856.323 1.009 1.009 0 01.366.785v.202c-.34-.193-.774-.289-1.3-.289-.617 0-1.11.145-1.479.434-.37.288-.554.677-.554 1.165a1.476 1.476 0 00.525 1.156c.35.308.785.463 1.305.463.61 0 1.098-.27 1.465-.81h.038v.655h.848v-2.909c0-.61-.
19419-1.09-.568-1.44-.38-.35-.896-.525-1.551-.525zm2.263.154l1.946 4.422-1.098 2.38h.915L24 9.963h-.965l-1.368 3.391h-.02l-1.406-3.39zm-2.146 2.368c.494 0 .88.11 1.156.33 0 .372-.147.696-.44.973a1.413 1.413 0 01-.997.414 1.081 1.081 0 01-.69-.232.708.708 0 01-.293-.578c0-.257.12-.47.363-.647.24-.173.54-.26.9-.26Z",source:"https://pay.google.com/intl/en_us/about/",hex:"4285F4"},g1={title:"Google Pub/Sub",slug:"googlepubsub",get svg(){return y+"Google Pub/Sub"+f+this.path+v},path:"M18.3 7.452a2.064 2.064 0 1 1 4.128 0 2.064 2.064 0 0 1-4.128 0zM3.636 9.516a2.064 2.064 0 1 0 0-4.128 2.064 2.064 0 0 0 0 4.128zM12 19.872A2.064 2.064 0 1 0 12 24a2.064 2.064 0 0 0 0-4.128zm-5.774-3.151a2.591 2.591 0 0 0-.118-.48c0-.002 0-.004-.002-.006a2.595 2.595 0 0 0-.2-.436l-.004-.008a2.618 2.618 0 0 0-.276-.39l-.001-.001a2.622 2.622 0 0 0-.346-.336 2.603 2.603 0 0 0-1.643-.592A2.628 2.628 0 1 0 6.264 17.1c0-.13-.02-.254-.038-.38zm8.499-2.53c.033-.047.063-.097.094-.147a3.32 3.32 0 0 0 .201-.37c.026-.055.052-.108.074-.164a3.301 3.301 0 0 0 .242-1.234c0-1.51-1.01-2.772-2.388-3.183a3.277 3.277 0 0 0-.42-.1A2.882 2.882 0 0 0 12 8.94c-.183 0-.359.021-.532.054a3.272 3.272 0 0 0-.428.103 3.325 3.325 0 0 0-2.376 3.179c0 .567.155 1.093.405 1.561.028.054.055.108.086.16.062.102.13.198.201.292.039.051.08.099.12.147a3.314 3.314 0 0 0 4.885.196c.135-.135.254-.284.364-.44zm-8.987.608c.473.433.818 1.002.956 1.651l2.575-1.486a3.83 3.83 0 0 1-.946-1.657L5.738 14.8zm5.302-9.21v2.988A3.79 3.79 0 0 1 12 8.44c.329 0 .643.055.948.133v-2.98c-.3.097-.615.163-.948.163-.337 0-.656-.067-.96-.166zm7.317 9.132L15.711 13.2a3.818 3.818 0 0 1-.914 1.683l2.542 1.46a3.115 3.115 0 0 1 1.018-1.622zm2.007-.249c-.58 0-1.112.194-1.547.513a2.633 2.633 0 0 0-.662.701l-.013.024c-.082.13-.155.265-.212.409-.008.02-.012.041-.02.061a2.588 2.588 0 0 0-.124.421 2.628 2.628 0 1 0 2.578-2.129zm-8.862-9.266a2.52 2.52 0 0 0 .99 0A2.626 2.626 0 0 0 12 0a2.627 2.627 0 0 0-.498 5.206z",source:"https://cloud.google.com/icons",hex:"AECBFA",guidelines:"https://about.google/brand-resource-center"},$t={title:"Google Search Console",slug:"googlesearchconsole",get svg(){return y+"Google Search Console"+f+this.path+v},path:"M8.548 1.156L6.832 2.872v1.682h1.716zm0 3.398v.035H6.832v-.035H3.386L0 7.844v3.577h2.826V8.94c0-.525.429-.954.954-.954h16.476c.525 0 .954.43.954.954v2.48h2.754V7.844l-3.386-3.29H17.3v.035h-1.717v-.035zm7.035 0H17.3V2.872l-1.717-1.716zM8.679 1.188V2.84h6.773V1.188zm11.471 7.07a.834.834 0 00-.132.01l-.543.002c-5.216.014-10.432-.008-15.648.01-.435-.063-.794.436-.716.883v2.264h17.812c-.016-.888.045-1.782-.034-2.666-.104-.342-.427-.502-.739-.502zm-15.422.634a.689.698 0 01.689.698.689.698 0 01-.689.697.689.698 0 01-.688-.697.689.698 0 01.688-.698zm2.134 0a.689.698 0 01.689.698.689.698 0 01-.689.697.689.698 0 01-.688-.697.689.698 0 01.688-.698zM.036 11.645v9.156c0 1.05.858 1.908 1.907 1.908h.883V11.645zm21.174 0v11.064h.882c1.05 0 1.908-.858 1.908-1.908v-9.156zM4.057 13.133v6.85h6.137v-6.85zm13.243.021v3.777l-1.708.977-1.708-.977v-3.758a4.006 4.006 0 000 7.23v2.441h3.457v-2.442a4.006 4.006 0 00-.041-7.248zm-13.243 8.26v1.43h7.925v-1.43z",source:"https://search.google.com/search-console",hex:"458CF5"},m1={title:"Google Sheets",slug:"googlesheets",get svg(){return y+"Google Sheets"+f+this.path+v},path:"M11.318 12.545H7.91v-1.909h3.41v1.91zM14.728 0v6h6l-6-6zm1.363 10.636h-3.41v1.91h3.41v-1.91zm0 3.273h-3.41v1.91h3.41v-1.91zM20.727 6.5v15.864c0 .904-.732 1.636-1.636 1.636H4.909a1.636 1.636 0 0 1-1.636-1.636V1.636C3.273.732 4.005 0 4.909 0h9.318v6.5h6.5zm-3.273 2.773H6.545v7.909h10.91v-7.91zm-6.136 4.636H7.91v1.91h3.41v-1.91z",source:"https://sheets.google.com",hex:"34A853"},Ut={title:"Google Tag Manager",slug:"googletagmanager",get svg(){return y+"Google Tag Manager"+f+this.path+v},path:"M12.003 0a3 3 0 0 0-2.121 5.121l6.865 6.865-4.446 4.541 1.745 1.836a3.432 3.432 0 0 1 .7.739l.012.011-.001.002a3.432 3.432 0 0 1 .609 1.953 3.432 3.432 0 0 1-.09.78l7.75-7.647c.031-.029.067-.05.098-.08.023-.023.038-.052.06-.076a2.994 2.994 0 0 0-.06-4.166l-9-9A2.99 2.99 0 0 0 12.003 0zM8.63 2.133L.88 9.809a2.998 2.998 0 0 0 0 4.238l7.7 7.75a3.432 3.432 0 0 1-.077-.729 3.432 3.432 0 0 1 3.431-3.431 3.432 3.432 0 0 1 .826.101l-5.523-5.81 4.371-4.373-2.08-2.08c-.903-.904-1.193-2.183-.898-3.342zm3.304 16.004a2.932 2.932 0 0 0-2.931 2.931A2.932 2.932 0 0 0 11.934 24a2.932 2.932 0 0 0 2.932-2.932 2.932 2.932 0 0 0-2.932-2.931z",source:"https://tagmanager.google.com/#/home",hex:"246FDB"},y1={title:"Google Translate",slug:"googletranslate",get svg(){return y+"Google Translate"+f+this.path+v},path:"M22.401 4.818h-9.927L10.927 0H1.599C.72 0 .002.719.002 1.599v16.275c0 .878.72 1.597 1.597 1.597h10L13.072 24H22.4c.878 0 1.597-.707 1.597-1.572V6.39c0-.865-.72-1.572-1.597-1.572zm-15.66 8.68c-2.07 0-3.75-1.68-3.75-3.75 0-2.07 1.68-3.75 3.75-3.75 1.012 0 1.86.375 2.512.976l-.99.952a2.194 2.194 0 0 0-1.522-.584c-1.305 0-2.363 1.08-2.363 2.409S5.436 12.16 6.74 12.16c1.507 0 2.13-1.08 2.19-1.808l-2.188-.002V9.066h3.51c.05.23.09.457.09.764 0 2.147-1.434 3.669-3.602 3.669zm16.757 8.93c0 .59-.492 1.072-1.097 1.072h-8.875l3.649-4.03h.005l-.74-2.302.006-.005s.568-.488 1.277-1.24c.712.771 1.63 1.699 2.818 2.805l.771-.772c-1.272-1.154-2.204-2.07-2.89-2.805.919-1.087 1.852-2.455 2.049-3.707h2.034v.002h.002v-.94h-4.532v-1.52h-1.471v1.52H14.3l-1.672-5.21.006.022h9.767c.605 0 1.097.48 1.097 1.072v16.038zm-6.484-7.311c-.536.548-.943.873-.943.873l-.008.004-1.46-4.548h4.764c-.307 1.084-.988 2.108-1.651 2.904-1.176-1.392-1.18-1.844-1.18-1.844h-1.222s.05.678 1.7 2.61z",source:"https://commons.wikimedia.org/wiki/File:Google_Translate_logo.svg",hex:"4285F4"},u2={title:"Grafana",slug:"grafana",get svg(){return y+"Grafana"+f+this.path+v},path:"M23.02 10.59a8.578 8.578 0 0 0-.862-3.034 8.911 8.911 0 0 0-1.789-2.445c.337-1.342-.413-2.505-.413-2.505-1.292-.08-2.113.4-2.416.62-.052-.02-.102-.044-.154-.064-.22-.089-.446-.172-.677-.247-.231-.073-.47-.14-.711-.197a9.867 9.867 0 0 0-.875-.161C14.557.753 12.94 0 12.94 0c-1.804 1.145-2.147 2.744-2.147 2.744l-.018.093c-.098.029-.2.057-.298.088-.138.042-.275.094-.413.143-.138.055-.275.107-.41.166a8.869 8.869 0 0 0-1.557.87l-.063-.029c-2.497-.955-4.716.195-4.716.195-.203 2.658.996 4.33 1.235 4.636a11.608 11.608 0 0 0-.607 2.635C1.636 12.677.953 15.014.953 15.014c1.926 2.214 4.171 2.351 4.171 2.351.003-.002.006-.002.006-.005.285.509.615.994.986 1.446.156.19.32.371.488.548-.704 2.009.099 3.68.099 3.68 2.144.08 3.553-.937 3.849-1.173a9.784 9.784 0 0 0 3.164.501h.08l.055-.003.107-.002.103-.005.003.002c1.01 1.44 2.788 1.646 2.788 1.646 1.264-1.332 1.337-2.653 1.337-2.94v-.058c0-.02-.003-.039-.003-.06.265-.187.52-.387.758-.6a7.875 7.875 0 0 0 1.415-1.7c1.43.083 2.437-.885 2.437-.885-.236-1.49-1.085-2.216-1.264-2.354l-.018-.013-.016-.013a.217.217 0 0 1-.031-.02c.008-.092.016-.18.02-.27.011-.162.016-.323.016-.48v-.253l-.005-.098-.008-.135a1.891 1.891 0 0 0-.01-.13c-.003-.042-.008-.083-.013-.125l-.016-.124-.018-.122a6.215 6.215 0 0 0-2.032-3.73 6.015 6.015 0 0 0-3.222-1.46 6.292 6.292 0 0 0-.85-.048l-.107.002h-.063l-.044.003-.104.008a4.777 4.777 0 0 0-3.335 1.695c-.332.4-.592.84-.768 1.297a4.594 4.594 0 0 0-.312 1.817l.003.091c.005.055.007.11.013.164a3.615 3.615 0 0 0 .698 1.82 3.53 3.53 0 0 0 1.827 1.282c.33.098.66.14.971.137.039 0 .078 0 .114-.002l.063-.003c.02 0 .041-.003.062-.003.034-.002.065-.007.099-.01.
194007 0 .018-.003.028-.003l.031-.005.06-.008a1.18 1.18 0 0 0 .112-.02c.036-.008.072-.013.109-.024a2.634 2.634 0 0 0 .914-.415c.028-.02.056-.041.085-.065a.248.248 0 0 0 .039-.35.244.244 0 0 0-.309-.06l-.078.042c-.09.044-.184.083-.283.116a2.476 2.476 0 0 1-.475.096c-.028.003-.054.006-.083.006l-.083.002c-.026 0-.054 0-.08-.002l-.102-.006h-.012l-.024.006c-.016-.003-.031-.003-.044-.006-.031-.002-.06-.007-.091-.01a2.59 2.59 0 0 1-.724-.213 2.557 2.557 0 0 1-.667-.438 2.52 2.52 0 0 1-.805-1.475 2.306 2.306 0 0 1-.029-.444l.006-.122v-.023l.002-.031c.003-.021.003-.04.005-.06a3.163 3.163 0 0 1 1.352-2.29 3.12 3.12 0 0 1 .937-.43 2.946 2.946 0 0 1 .776-.101h.06l.07.002.045.003h.026l.07.005a4.041 4.041 0 0 1 1.635.49 3.94 3.94 0 0 1 1.602 1.662 3.77 3.77 0 0 1 .397 1.414l.005.076.003.075c.002.026.002.05.002.075 0 .024.003.052 0 .07v.065l-.002.073-.008.174a6.195 6.195 0 0 1-.08.639 5.1 5.1 0 0 1-.267.927 5.31 5.31 0 0 1-.624 1.13 5.052 5.052 0 0 1-3.237 2.014 4.82 4.82 0 0 1-.649.066l-.039.003h-.287a6.607 6.607 0 0 1-1.716-.265 6.776 6.776 0 0 1-3.4-2.274 6.75 6.75 0 0 1-.746-1.15 6.616 6.616 0 0 1-.714-2.596l-.005-.083-.002-.02v-.056l-.003-.073v-.096l-.003-.104v-.07l.003-.163c.008-.22.026-.45.054-.678a8.707 8.707 0 0 1 .28-1.355c.128-.444.286-.872.473-1.277a7.04 7.04 0 0 1 1.456-2.1 5.925 5.925 0 0 1 .953-.763c.169-.111.343-.213.524-.306.089-.05.182-.091.273-.135.047-.02.093-.042.138-.062a7.177 7.177 0 0 1 .714-.267l.145-.045c.049-.015.098-.026.148-.041.098-.029.197-.052.296-.076.049-.013.1-.02.15-.033l.15-.032.151-.028.076-.013.075-.01.153-.024c.057-.01.114-.013.171-.023l.169-.021c.036-.003.073-.008.106-.01l.073-.008.036-.003.042-.002c.057-.003.114-.008.171-.01l.086-.006h.023l.037-.003.145-.007a7.999 7.999 0 0 1 1.708.125 7.917 7.917 0 0 1 2.048.68 8.253 8.253 0 0 1 1.672 1.09l.09.077.089.078c.06.052.114.107.171.159.057.052.112.106.166.16.052.055.107.107.159.164a8.671 8.671 0 0 1 1.41 1.978c.012.026.028.052.04.078l.04.078.075.156c.023.051.05.1.07.153l.065.15a8.848 8.848 0 0 1 .45 1.34.19.19 0 0 0 .201.142.186.186 0 0 0 .172-.184c.01-.246.002-.532-.024-.856z",source:"https://grafana.com",hex:"F46800"},p2={title:"HubSpot",slug:"hubspot",get svg(){return y+"HubSpot"+f+this.path+v},path:"M18.164 7.93V5.084a2.198 2.198 0 001.267-1.978v-.067A2.2 2.2 0 0017.238.845h-.067a2.2 2.2 0 00-2.193 2.193v.067a2.196 2.196 0 001.252 1.973l.013.006v2.852a6.22 6.22 0 00-2.969 1.31l.012-.01-7.828-6.095A2.497 2.497 0 104.3 4.656l-.012.006 7.697 5.991a6.176 6.176 0 00-1.038 3.446c0 1.343.425 2.588 1.147 3.607l-.013-.02-2.342 2.343a1.968 1.968 0 00-.58-.095h-.002a2.033 2.033 0 102.033 2.033 1.978 1.978 0 00-.1-.595l.005.014 2.317-2.317a6.247 6.247 0 104.782-11.134l-.036-.005zm-.964 9.378a3.206 3.206 0 113.215-3.207v.002a3.206 3.206 0 01-3.207 3.207z",source:"https://www.hubspot.com/style-guide",hex:"FF7A59",guidelines:"https://www.hubspot.com/style-guide"},g2={title:"Insomnia",slug:"insomnia",get svg(){return y+"Insomnia"+f+this.path+v},path:"M12.1356 3.4577c4.7179 0 8.5424 3.8245 8.5424 8.5424 0 4.7178-3.8245 8.5423-8.5424 8.5423-4.7178 0-8.5423-3.8245-8.5423-8.5423 0-1.153.2284-2.2527.6425-3.2562.6046.8233 1.5796 1.3579 2.6795 1.3579 1.8347 0 3.322-1.4874 3.322-3.3221 0-1.0999-.5345-2.0749-1.3579-2.6795 1.0036-.414 2.1032-.6425 3.2562-.6425zM12 0C5.3726 0 0 5.3726 0 12s5.3726 12 12 12 12-5.3726 12-12S18.6274 0 12 0Zm0 1.2203c5.9534 0 10.7797 4.8263 10.7797 10.7797S17.9534 22.7797 12 22.7797 1.2203 17.9534 1.2203 12 6.0466 1.2203 12 1.2203Z",source:"https://insomnia.rest",hex:"4000BF"},m2={title:"Jenkins",slug:"jenkins",get svg(){return y+"Jenkins"+f+this.path+v},path:"M2.872 24h-.975a3.866 3.866 0 01-.07-.197c-.215-.666-.594-1.49-.692-2.154-.146-.984.78-1.039 1.374-1.465.915-.66 1.635-1.025 2.627-1.62.295-.179 1.182-.624 1.281-.829.201-.408-.345-.982-.49-1.3-.225-.507-.345-.937-.376-1.435-.824-.13-1.455-.627-1.844-1.185-.63-.925-1.066-2.635-.525-3.936.045-.103.254-.305.285-.463.06-.308-.105-.72-.12-1.048-.06-1.692.284-3.15 1.425-3.66.463-1.84 2.113-2.453 3.673-3.367.58-.342 1.224-.562 1.89-.807 2.372-.877 6.027-.712 7.994.783.836.633 2.176 1.97 2.656 2.939 1.262 2.555 1.17 6.825.287 9.934-.12.421-.29 1.032-.533 1.533-.168.35-.689 1.05-.625 1.36.064.314 1.19 1.17 1.432 1.395.434.422 1.26.975 1.324 1.5.07.557-.248 1.336-.41 1.875-.217.721-.436 1.441-.654 2.131H2.87zm11.104-3.54c-.545-.3-1.361-.622-2.065-.757-.87-.164-.78 1.188-.75 1.994.03.643.36 1.316.51 1.744.076.
194197.09.41.256.449.3.068 1.29-.326 1.575-.479.6-.328 1.064-.844 1.574-1.189.016-.17.016-.34.03-.508a2.648 2.648 0 00-1.095-.277c.314-.15.75-.15 1.035-.332l.016-.193c-.496-.03-.69-.254-1.021-.436zm7.454 2.935a17.78 17.78 0 00.465-1.752c.06-.287.215-.918.178-1.176-.059-.459-.684-.799-1.004-1.086-.584-.525-.95-.975-1.56-1.469-.249.375-.78.615-.983.914 1.447-.689 1.71 2.625 1.141 3.69.09.329.391.45.514.735l-.086.166h1.29c.013 0 .03 0 .044.014zm-6.634-.012c-.05-.074-.1-.135-.15-.209l-.301.195h.45zm2.77 0c.008-.209.018-.404.03-.598-.53.029-.825-.48-1.196-.527-.324-.045-.6.361-1.02.195-.095.105-.183.227-.284.316.154.18.295.375.424.584h.815c.014-.164.135-.285.3-.285.165 0 .284.121.284.27h.66zm2.116 0c-.314-.479-.947-.898-1.68-.555l-.03.541h1.71zm-8.51 0l-.104-.344c-.225-.72-.36-1.26-.405-1.68-.914-.436-1.875-.87-2.654-1.426-.15-.105-1.109-1.35-1.23-1.305-1.739.676-3.359 1.86-4.814 2.984.256.557.48 1.141.69 1.74h8.505zm8.265-2.113c-.029-.512-.164-1.56-.48-1.74-.66-.39-1.846.78-2.34.943.045.15.135.271.15.48.285-.074.645-.029.898.092-.299.03-.629.03-.824.164-.074.195.016.48-.029.764.69.197 1.5.303 2.385.332.164-.227.225-.645.211-1.082zm-4.08-.36c-.044.375.046.51.12.943 1.26.391 1.034-1.74-.135-.959zM8.76 19.5c-.45.457 1.27 1.082 1.814 1.115 0-.29.165-.564.135-.77-.65-.118-1.502-.042-1.945-.347zm5.565.215c0 .043-.061.03-.068.064.58.451 1.014.545 1.802.51.354-.262.67-.563 1.043-.807-.855.074-1.931.607-2.774.23zm3.42-17.726c-1.606-.906-4.35-1.591-6.076-.731-1.38.692-3.27 1.84-3.899 3.292.6 1.402-.166 2.686-.226 4.109-.018.757.36 1.42.391 2.242-.2.338-.825.38-1.26.356-.146-.729-.4-1.549-1.155-1.63-1.064-.116-1.845.764-1.89 1.683-.06 1.08.833 2.864 2.085 2.745.488-.046.608-.54 1.139-.54.285.57-.445.75-.523 1.154-.016.105.06.511.104.705.233.944.744 2.16 1.245 2.88.635.9 1.884 1.051 3.229 1.141.24-.525 1.125-.48 1.706-.346-.691-.27-1.336-.945-1.875-1.529-.615-.676-1.23-1.41-1.261-2.28 1.155 1.604 2.1 3 4.2 3.704 1.59.525 3.45-.254 4.664-1.109.51-.359.811-.93 1.17-1.439 1.35-1.936 1.98-4.71 1.846-7.394-.06-1.111-.06-2.221-.436-2.955-.389-.781-1.695-1.471-2.475-.781-.15-.764.63-1.23 1.545-.96-.66-.854-1.336-1.858-2.266-2.384zM13.58 14.896c.615 1.544 2.724 1.363 4.505 1.323-.084.194-.256.435-.465.515-.57.232-2.145.408-2.937-.012-.506-.27-.824-.873-1.102-1.227-.137-.172-.795-.608-.012-.609zm.164-.87c.893.464 2.52.517 3.731.48.066.267.066.593.068.913-1.55.08-3.386-.304-3.794-1.395h-.005zm6.675-.586c-.473.9-1.145 1.897-2.539 1.928-.023-.284-.045-.735 0-.904 1.064-.103 1.727-.646 2.543-1.017zm-.649-.667c-1.02.66-2.154 1.375-3.824 1.21-.351-.31-.485-1-.14-1.458.181.313.06.885.57.97.944.165 2.038-.579 2.73-.84.42-.713-.046-.976-.42-1.433-.782-.93-1.83-2.1-1.802-3.51.314-.224.346.346.391.45.404.96 1.424 2.175 2.174 3 .18.21.48.39.51.524.092.39-.254.854-.209 1.11zm-13.439-.675c-.314-.184-.393-.99-.768-1.01-.535-.03-.438 1.05-.436 1.68-.37-.33-.435-1.365-.164-1.89-.308-.15-.445.164-.618.284.22-1.59 2.34-.734 1.99.96zM4.713 5.995c-.685.756-.54 2.174-.459 3.188 1.244-.785 2.898.06 2.883 1.394.595-.016.223-.744.115-1.215-.353-1.528.592-3.187.041-4.59-1.064.084-1.939.52-2.578 1.215zm9.12 1.113c.307.562.404 1.148.84 1.57.195.19.574.424.387.95-.045.121-.365.391-.551.45-.674.195-2.254.03-1.721-.81.563.015 1.314.36 1.732-.045-.314-.524-.885-1.53-.674-2.13zm6.198-.013h.068c.33.668.6 1.375 1.004 1.965-.27.628-2.053 1.19-2.023.057.39-.17 1.05-.035 1.395-.25-.193-.556-.48-1.006-.434-1.771zm-6.927-1.617c-1.422-.33-2.131.592-2.56 1.553-.384-.094-.231-.615-.135-.883.255-.701 1.28-1.633 2.119-1.506.359.057.848.386.576.834zM9.642 1.593c-1.56.44-3.56 1.574-4.2 2.974.495-.07.84-.321 1.33-.351.186-.016.428.074.641.015.424-.104.78-1.065 1.102-1.41.31-.345.685-.496.94-.81.167-.09.409-.074.42-.33-.073-.075-.15-.135-.232-.105v.017z",source:"https://get.jenkins.io/art/",hex:"D24939",guidelines:"https://www.jenkins.io/press/",license:{type:"CC-BY-SA-3.0",url:"https://spdx.org/licenses/CC-BY-SA-3.0"}},y2={title:"Jira",slug:"jira",get svg(){return y+"Jira"+f+this.path+v},path:"M11.571 11.513H0a5.218 5.218 0 0 0 5.232 5.215h2.13v2.057A5.215 5.215 0 0 0 12.575 24V12.518a1.005 1.005 0 0 0-1.005-1.005zm5.723-5.756H5.736a5.215 5.215 0 0 0 5.215 5.214h2.129v2.058a5.218 5.218 0 0 0 5.215 5.214V6.758a1.001 1.001 0 0 0-1.001-1.001zM23.013 0H11.455a5.215 5.215 0 0 0 5.215 5.215h2.129v2.057A5.215 5.215 0 0 0 24 12.483V1.005A1.001 1.001 0 0 0 23.013 0Z",source:"https://atlassian.design/resources/logo-library",hex:"0052CC",guidelines:"https://atlassian.design/foundations/logos/"},f2={title:"Keycloak",slug:"keycloak",get svg(){return y+"Keycloak"+f+this.path+v},path:"m18.742 1.182-12.493.002C4.155 4.784 2.079 8.393 0 12.002c2.071 3.612 4.162 7.214 6.252 10.816l12.49-.004 3.089-5.404h2.158v-.002H24L23.996 6.59h-2.168zM8.327 4.792h2.081l1.04 1.8-3.12 5.413 3.117 5.403-1.035 1.81H8.327a2047.566 2047.566 0 0 0-4.168-7.204C5.547 9.606 6.937 7.2 8.327 4.792Zm6.241 0 2.086.003c1.393 2.405 2.78 4.813 4.166 7.222l-4.167 7.2h-2.08c-.382-.562-1.038-1.808-1.038-1.808l3.123-5.405-3.124-5.413z",source:"https://github.com/keycloak/keycloak-misc/blob/dee
194033f2d6d6b5c3a6ce8eb84e285f7e5626dbf6/logo/icon-black.svg",hex:"4D4D4D",license:{type:"custom",url:"https://www.linuxfoundation.org/legal/trademark-usage"}},f1={title:"Kubernetes",slug:"kubernetes",get svg(){return y+"Kubernetes"+f+this.path+v},path:"M10.204 14.35l.007.01-.999 2.413a5.171 5.171 0 0 1-2.075-2.597l2.578-.437.004.005a.44.44 0 0 1 .484.606zm-.833-2.129a.44.44 0 0 0 .173-.756l.002-.011L7.585 9.7a5.143 5.143 0 0 0-.73 3.255l2.514-.725.002-.009zm1.145-1.98a.44.44 0 0 0 .699-.337l.01-.005.15-2.62a5.144 5.144 0 0 0-3.01 1.442l2.147 1.523.004-.002zm.76 2.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44 0 0 0 .7.336l.008.003 2.134-1.513a5.188 5.188 0 0 0-2.992-1.442l.148 2.615.002.001zm10.876 5.97l-5.773 7.181a1.6 1.6 0 0 1-1.248.594l-9.261.003a1.6 1.6 0 0 1-1.247-.596l-5.776-7.18a1.583 1.583 0 0 1-.307-1.34L2.1 5.573c.108-.47.425-.864.863-1.073L11.305.513a1.606 1.606 0 0 1 1.385 0l8.345 3.985c.438.209.755.604.863 1.073l2.062 8.955c.108.47-.005.963-.308 1.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45 6.45 0 0 0-.105-2.332 6.465 6.465 0 0 0-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545 6.545 0 0 0-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142 0-.306-.224-.555-.5-.555-.275 0-.499.249-.499.555l.001.014c0 .041-.002.092 0 .128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545 0 0 1-.162.258l-.012.211a6.424 6.424 0 0 0-4.166 2.003 8.373 8.373 0 0 1-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594 0 0 0-.348-.132.481.481 0 0 0-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462 6.462 0 0 0-1.02 4.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5 6.5 0 0 0 2.88 3.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453 6.453 0 0 0 4.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499 6.499 0 0 0 2.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4 9.701l-1.95 1.746v.005a.44.44 0 0 0 .173.757l.003.01 2.526.728a5.199 5.199 0 0 0-.108-1.674A5.208 5.208 0 0 0 16.4 9.7zm-4.013 5.325a.437.437 0 0 0-.404-.232.44.44 0 0 0-.372.233h-.002l-1.268 2.292a5.164 5.164 0 0 0 3.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44 0 0 0-.27.036.44.44 0 0 0-.214.572l-.003.004 1.01 2.438a5.15 5.15 0 0 0 2.081-2.615l-2.6-.44-.004.005z",source:"https://github.com/kubernetes/kubernetes/tree/cac53883f4714452f3084a22e4be20d042a9df33/logo",hex:"326CE5"},v2={title:"LangChain",slug:"langchain",get svg(){return y+"LangChain"+f+this.path+v},path:"M13.796 0a6.93 6.93 0 0 0-4.91 2.019L5.451 5.455l3.273 3.27 3.432-3.432a2.284 2.284 0 0 1 3.277 0 2.28 2.28 0 0 1 0 3.275L12 12.001l3.273 3.273 3.433-3.435c2.692-2.692 2.692-7.127 0-9.82A6.92 6.92 0 0 0 13.796 0m-5.07 8.728-3.433 3.434c-2.692 2.693-2.692 7.126 0 9.819A6.92 6.92 0 0 0 10.203 24a6.93 6.93 0 0 0 4.911-2.02l3.432-3.432-3.271-3.272-3.433 3.433a2.284 2.284 0 0 1-3.277 0 2.28 2.28 0 0 1 0-3.276L12 12z",source:"https://www.langchain.com/langchain",hex:"7FC8FF"},b2={title:"Linear",slug:"linear",get svg(){return y+"Linear"+f+this.path+v},path:"M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z",source:"https://linear.app",hex:"5E6AD2"},w2={title:"MailChimp",slug:"mailchimp",get svg(){return y+"MailChimp"+f+this.path+v},path:"M11.267 0C6.791-.015-1.82 10.246 1.397 12.964l.79.669a3.88 3.88 0 0 0-.22 1.792c.084.84.518 1.644 1.22 2.266.666.59 1.542.964 2.392.964 1.406 3.24 4.62 5.228 8.386 5.34 4.04.12 7.433-1.776 8.854-5.182.093-.24.488-1.316.488-2.267 0-.956-.54-1.352-.885-1.352-.01-.037-.078-.286-.172-.586-.093-.3-.19-.51-.19-.51.375-.563.382-1.065.332-1.35-.053-.353-.2-.653-.496-.964-.296-.311-.9
19402-.63-1.753-.868l-.446-.124c-.002-.019-.024-1.053-.043-1.497-.014-.32-.042-.822-.197-1.315-.186-.668-.508-1.253-.911-1.627 1.112-1.152 1.806-2.422 1.804-3.511-.003-2.095-2.576-2.729-5.746-1.416l-.672.285A678.22 678.22 0 0 0 12.7.504C12.304.159 11.817.002 11.267 0zm.073.873c.166 0 .322.019.465.058.297.084 1.28 1.224 1.28 1.224s-1.826 1.013-3.52 2.426c-2.28 1.757-4.005 4.311-5.037 7.082-.811.158-1.526.618-1.963 1.253-.261-.218-.748-.64-.834-.804-.698-1.326.761-3.902 1.781-5.357C5.834 3.44 9.37.867 11.34.873zm3.286 3.273c.04-.002.06.05.028.074-.143.11-.299.26-.413.414a.04.04 0 0 0 .031.064c.659.004 1.587.235 2.192.574.041.023.012.103-.034.092-.915-.21-2.414-.369-3.97.01-1.39.34-2.45.863-3.224 1.426-.04.028-.086-.023-.055-.06.896-1.035 1.999-1.935 2.987-2.44.034-.018.07.019.052.052-.079.143-.23.447-.278.678-.007.035.032.063.062.042.615-.42 1.684-.868 2.622-.926zm3.023 3.205l.056.001a.896.896 0 0 1 .456.146c.534.355.61 1.216.638 1.845.015.36.059 1.229.074 1.478.034.571.184.651.487.751.17.057.33.098.563.164.706.198 1.125.4 1.39.658.157.162.23.333.253.497.083.608-.472 1.36-1.942 2.041-1.607.746-3.557.935-4.904.785l-.471-.053c-1.078-.145-1.693 1.247-1.046 2.201.417.615 1.552 1.015 2.688 1.015 2.604 0 4.605-1.111 5.35-2.072a.987.987 0 0 0 .06-.085c.036-.055.006-.085-.04-.054-.608.416-3.31 2.069-6.2 1.571 0 0-.351-.057-.672-.182-.255-.1-.788-.344-.853-.891 2.333.72 3.801.039 3.801.039a.072.072 0 0 0 .042-.072.067.067 0 0 0-.074-.06s-1.911.283-3.718-.378c.197-.64.72-.408 1.51-.345a11.045 11.045 0 0 0 3.647-.394c.818-.234 1.892-.697 2.727-1.356.281.618.38 1.299.38 1.299s.219-.04.4.073c.173.106.299.326.213.895-.176 1.063-.628 1.926-1.387 2.72a5.714 5.714 0 0 1-1.666 1.244c-.34.18-.704.334-1.087.46-2.863.935-5.794-.093-6.739-2.3a3.545 3.545 0 0 1-.189-.522c-.403-1.455-.06-3.2 1.008-4.299.065-.07.132-.153.132-.256 0-.087-.055-.179-.102-.243-.374-.543-1.669-1.466-1.409-3.254.187-1.284 1.31-2.189 2.357-2.135.089.004.177.01.266.015.453.027.85.085 1.223.1.625.028 1.187-.063 1.853-.618.225-.187.405-.35.71-.401.028-.005.092-.028.215-.028zm.022 2.18a.42.42 0 0 0-.06.005c-.335.054-.347.468-.228 1.04.068.32.187.595.32.765.175-.02.343-.022.498 0 .089-.205.104-.557.024-.942-.112-.535-.261-.872-.554-.868zm-3.66 1.546a1.724 1.724 0 0 0-1.016.326c-.16.117-.311.28-.29.378.008.032.031.056.088.063.131.015.592-.217 1.122-.25.374-.023.684.094.923.2.239.104.386.173.443.113.037-.038.026-.11-.031-.204-.118-.192-.36-.387-.618-.497a1.601 1.601 0 0 0-.621-.129zm4.082.81c-.
194171-.003-.313.186-.317.42-.004.236.131.43.303.432.172.003.314-.185.318-.42.004-.236-.132-.429-.304-.432zm-3.58.172c-.05 0-.102.002-.155.008-.311.05-.483.152-.593.247-.094.082-.152.173-.152.237a.075.075 0 0 0 .075.076c.07 0 .228-.063.228-.063a1.98 1.98 0 0 1 1.001-.104c.157.018.23.027.265-.026.01-.016.022-.049-.01-.1-.063-.103-.311-.269-.66-.275zm2.26.4c-.127 0-.235.051-.283.148-.075.154.035.363.246.466.21.104.443.063.52-.09.075-.155-.035-.364-.246-.467a.542.542 0 0 0-.237-.058zm-11.635.024c.048 0 .098 0 .149.003.73.04 1.806.6 2.052 2.19.217 1.41-.128 2.843-1.449 3.069-.123.02-.248.029-.374.026-1.22-.033-2.539-1.132-2.67-2.435-.145-1.44.591-2.548 1.894-2.811.117-.024.252-.04.398-.042zm-.07.927a1.144 1.144 0 0 0-.847.364c-.38.418-.439.988-.366 1.19.027.073.07.094.1.098.064.008.16-.039.22-.2a1.2 1.2 0 0 0 .017-.052 1.58 1.58 0 0 1 .157-.37.689.689 0 0 1 .955-.199c.266.174.369.5.255.81-.058.161-.154.469-.133.721.043.511.357.717.64.738.274.01.466-.143.515-.256.029-.067.005-.107-.011-.125-.043-.053-.113-.037-.18-.021a.638.638 0 0 1-.16.022.347.347 0 0 1-.294-.148c-.078-.12-.073-.3.013-.504.011-.028.025-.058.04-.092.138-.308.368-.825.11-1.317-.195-.37-.513-.602-.894-.65a1.135 1.135 0 0 0-.138-.01z",source:"https://mailchimp.com/about/brand-assets",hex:"FFE01B",guidelines:"https://mailchimp.com/about/brand-assets"},k2={title:"Mailgun",slug:"mailgun",get svg(){return y+"Mailgun"+f+this.path+v},path:"M11.837 0c6.602 0 11.984 5.381 11.984 11.994-.017 2.99-3.264 4.84-5.844 3.331a3.805 3.805 0 0 1-.06-.035l-.055-.033-.022.055c-2.554 4.63-9.162 4.758-11.894.232-2.732-4.527.46-10.313 5.746-10.416a6.868 6.868 0 0 1 7.002 6.866 1.265 1.265 0 0 0 2.52 0c0-5.18-4.197-9.38-9.377-9.387C4.611 2.594.081 10.41 3.683 16.673c3.238 5.632 11.08 6.351 15.289 1.402l1.997 1.686A11.95 11.95 0 0 1 11.837 24C2.6 23.72-2.87 13.543 1.992 5.684A12.006 12.006 0 0 1 11.837 0Zm0 7.745c-3.276-.163-5.5 3.281-4.003 6.2a4.26 4.26 0 0 0 4.014 2.31c3.276-.171 5.137-3.824 3.35-6.575a4.26 4.26 0 0 0-3.36-1.935Zm0 2.53c1.324 0 2.152 1.433 1.49 2.58a1.72 1.72 0 0 1-1.49.86 1.72 1.72 0 1 1 0-3.44Z",source:"https://mailgun.com",hex:"F06B66"},x2={title:"MariaDB",slug:"mariadb",get svg(){return y+"MariaDB"+f+this.path+v},path:"M23.157 4.412c-.676.284-.79.31-1.673.372-.65.045-.757.057-1.212.209-.75.246-1.395.75-2.02 1.59-.296.398-1.249 1.913-1.249 1.988 0 .057-.65.998-.915 1.32-.574.713-1.08 1.079-2.14 1.59-.77.36-1.224.524-4.102 1.477-1.073.353-2.133.738-2.367.864-.852.449-1.515 1.036-2.203 1.938-1.003 1.32-.972 1.313-3.042.947a12.264 12.264 0 00-.675-.063c-.644-.05-1.023.044-1.332.334L0 17.193l.177.088c.094.05.353.234.561.398.215.17.461.347.55.391.088.044.17.088.183.101.012.013-.089.17-.228.353-.435.581-.593.871-.574 1.048.019.164.032.17.43.17.517-.006.826-.056 1.261-.208.65-.233 2.058-.94 2.784-1.4.776-.5 1.717-.998 1.956-1.042.082-.02.354-.07.594-.114.58-.107 1.464-.095 2.587.05.108.013.373.045.6.064.227.025.43.057.454.076.026.012.474.037.998.056.934.026 1.104.007 1.3-.189.126-.133.385-.631.498-.985.209-.643.417-.921.366-.492-.113.966-.322 1.692-.713 2.411-.259.499-.663 1.092-.934 1.395-.322.347-.315.36.088.315.619-.063 1.471-.397 2.096-.82.827-.562 1.647-1.691 2.19-3.03.107-.27.22-.22.183.083-.013.094-.038.315-.057.498l-.031.328.353-.202c.833-.48 1.414-1.262 2.127-2.884.227-.518.877-2.922 1.073-3.976a9.64 9.64 0 01.271-1.042c.127-.429.196-.555.48-.858.183-.19.625-.555.978-.808.72-.505.953-.75 1.187-1.205.208-.417.284-1.13.132-1.357-.132-.202-.284-.196-.763.006Z",source:"https://mariadb.com/about-us/logos/",hex:"003545",guidelines:"https://mariadb.com/about-us/logos/"},A2={title:"MinIO",slug:"minio",get svg(){return y+"MinIO"+f+this.path+v},path:"M13.2072.006c-.6216-.0478-1.2.1943-1.6211.582a2.15 2.15 0 0 0-.0938 3.0352l3.4082 3.5507a3.042 3.042 0 0 1-.664 4.6875l-.463.2383V7.2853a15.4198 15.4198 0 0 0-8.0174 10.4862v.0176l6.5487-3.3281v7.621L13.7794 24V13.6817l.8965-.4629a4.4432 4.4432 0 0 0 1.2207-7.0292l-3.371-3.5254a.7489.7489 0 0 1 .037-1.0547.7522.7522 0 0 1 1.0567.0371l.4668.4863-.006.0059 4.0704 4.2441a.0566.0566 0 0 0 .082 0 .06.06 0 0 0 0-.0703l-3.1406-5.1425-.1484.1425.1484-.1445C14.4945.3926 13.8287.0538 13.2072.006Zm-.9024 9.8652v2.9941l-4.1523 2.1484a13.9787 13.9787 0 0 1 2.7676-3.9277 14.1784 14.1784 0 0 1 1.3847-1.2148z",source:"https://min.io",hex:"C72E49",guidelines:"https://min.io/logo"},P2={title:"Mixpanel",slug:"mixpanel",get svg(){return y+"Mixpanel"+f+this.path+v},path:"M6.967 9.996h3.053c-.763-.477-1.048-1.145-1.431-2.384L7.443 3.366C6.919 1.458 6.49.551 4.39.551H.004v1.145h.621c1.286 0 1.431.477 1.814 1.908L3.44 7.326c.524 1.814 1.337 2.67 3.53 2.67h-.003Zm7.06 0h3.053c2.194 0 2.956-.86 3.484-2.67l1.001-3.722c.382-1.431.57-1.908 1.814-1.9
19408H24V.551h-4.34c-2.146 0-2.576.86-3.053 2.815l-1.145 4.246c-.384 1.286-.673 1.907-1.435 2.384Zm-4.007 4.008h4.007V9.996H10.02v4.008ZM0 23.449h4.39c2.1 0 2.529-.907 3.053-2.815l1.146-4.246c.383-1.239.668-1.907 1.431-2.384H6.967c-2.194 0-3.007.86-3.531 2.67l-1.001 3.722c-.383 1.431-.524 1.907-1.814 1.907H0v1.146Zm19.65 0h4.343v-1.146h-.622c-1.239 0-1.431-.476-1.814-1.907l-1.001-3.722c-.524-1.814-1.286-2.67-3.483-2.67h-3.046c.762.477 1.041 1.098 1.424 2.384l1.145 4.246c.477 1.955.907 2.815 3.054 2.815Z",source:"https://mixpanel.com",hex:"7856FF",guidelines:"https://brand.mixpanel.com"},v1={title:"MongoDB",slug:"mongodb",get svg(){return y+"MongoDB"+f+this.path+v},path:"M17.193 9.555c-1.264-5.58-4.252-7.414-4.573-8.115-.28-.394-.53-.954-.735-1.44-.036.495-.055.685-.523 1.184-.723.566-4.438 3.682-4.74 10.02-.282 5.912 4.27 9.435 4.888 9.884l.07.05A73.49 73.49 0 0111.91 24h.481c.114-1.032.284-2.056.51-3.07.417-.296.604-.463.85-.693a11.342 11.342 0 003.639-8.464c.01-.814-.103-1.662-.197-2.218zm-5.336 8.195s0-8.291.275-8.29c.213 0 .49 10.695.49 10.695-.381-.045-.765-1.76-.765-2.405z",source:"https://www.mongodb.com/pressroom",hex:"47A248"},T2={title:"MySQL",slug:"mysql",get svg(){return y+"MySQL"+f+this.path+v},path:"M16.405 5.501c-.115 0-.193.014-.274.033v.013h.014c.054.104.146.18.214.273.054.107.1.214.154.32l.014-.015c.094-.066.14-.172.14-.333-.04-.047-.046-.094-.08-.14-.04-.067-.126-.1-.18-.153zM5.77 18.695h-.927a50.854 50.854 0 00-.27-4.41h-.008l-1.41 4.41H2.45l-1.4-4.41h-.01a72.892 72.892 0 00-.195 4.41H0c.055-1.966.192-3.81.41-5.53h1.15l1.335 4.064h.008l1.347-4.064h1.095c.242 2.015.384 3.86.428 5.53zm4.017-4.08c-.378 2.045-.876 3.533-1.492 4.46-.482.716-1.01 1.073-1.583 1.073-.153 0-.34-.046-.566-.138v-.494c.11.017.24.026.386.026.268 0 .483-.075.647-.222.197-.18.295-.382.295-.605 0-.155-.077-.47-.23-.944L6.23 14.615h.91l.727 2.36c.164.536.233.91.205 1.123.4-1.064.678-2.227.835-3.483zm12.325 4.08h-2.63v-5.53h.885v4.85h1.745zm-3.32.135l-1.016-.5c.09-.076.177-.158.255-.25.433-.506.648-1.258.648-2.253 0-1.83-.718-2.746-2.155-2.746-.704 0-1.254.232-1.65.697-.43.508-.646 1.256-.646 2.245 0 .972.19 1.686.574 2.14.35.41.877.615 1.583.615.264 0 .506-.033.725-.098l1.325.772.36-.622zM15.5 17.588c-.225-.36-.337-.94-.337-1.736 0-1.393.424-2.09 1.27-2.09.443 0 .77.167.977.5.224.362.336.936.336 1.723 0 1.404-.424 2.108-1.27 2.108-.445 0-.77-.167-.978-.5zm-1.658-.425c0 .47-.172.856-.516 1.156-.344.3-.803.45-1.384.45-.543 0-1.064-.172-1.573-.515l.237-.476c.438.22.833.328 1.19.328.332 0 .593-.073.783-.22a.754.754 0 00.3-.615c0-.33-.23-.61-.648-.845-.388-.213-1.163-.657-1.163-.657-.422-.307-.632-.636-.632-1.177 0-.45.157-.81.47-1.085.315-.278.72-.415 1.22-.415.512 0 .98.136 1.4.41l-.213.476a2.726 2.726 0 00-1.064-.23c-.283 0-.502.068-.654.206a.685.685 0 00-.248.524c0 .328.234.61.666.85.393.215 1.187.67 1.187.67.433.305.648.63.648 1.168zm9.382-5.852c-.535-.014-.95.04-1.297.188-.1.04-.26.04-.274.167.055.053.063.14.11.214.08.134.218.313.346.407.14.11.28.216.427.31.26.16.555.255.81.416.145.094.293.213.44.313.073.05.12.14.214.172v-.02c-.046-.06-.06-.147-.105-.214-.067-.067-.134-.127-.2-.193a3.223 3.223 0 00-.695-.675c-.214-.146-.682-.35-.77-.595l-.013-.014c.146-.013.32-.066.46-.106.227-.06.435-.047.67-.106.106-.027.213-.06.32-.094v-.06c-.12-.12-.21-.283-.334-.395a8.867 8.867 0 00-1.104-.823c-.21-.134-.476-.22-.697-.334-.08-.04-.214-.06-.26-.127-.12-.146-.19-.34-.275-.514a17.69 17.69 0 01-.547-1.163c-.12-.262-.193-.523-.34-.763-.69-1.137-1.437-1.826-2.586-2.5-.247-.14-.543-.2-.856-.274-.167-.008-.334-.02-.5-.027-.11-.047-.216-.174-.31-.235-.38-.24-1.364-.76-1.644-.072-.18.434.267.862.422 1.082.115.153.26.328.34.5.047.116.06.235.107.356.106.294.207.622.347.897.073.14.153.287.247.413.054.073.146.107.167.227-.094.136-.1.334-.154.5-.24.757-.146 1.693.194 2.25.107.166.362.534.703.393.3-.12.234-.5.32-.835.02-.08.007-.133.048-.187v.015c.094.188.188.367.274.555.206.328.566.668.867.895.16.12.287.328.487.402v-.02h-.015c-.043-.058-.1-.086-.154-.133a3.445 3.445 0 01-.35-.4 8.76 8.76 0 01-.747-1.218c-.11-.21-.202-.436-.29-.643-.04-.08-.04-.2-.107-.24-.1.146-.247.273-.32.453-.127.288-.14.642-.188 1.01-.027.007-.014 0-.027.014-.214-.052-.287-.274-.367-.46-.2-.475-.233-1.238-.06-1.785.047-.14.247-.582.167-.716-.042-.127-.174-.2-.247-.303a2.478 2.478 0 01-.24-.427c-.16-.374-.24-.788-.414-1.162-.08-.173-.22-.354-.334-.513-.127-.18-.267-.307-.368-.52-.033-.073-.08-.194-.027-.274.014-.054.042-.075.094-.09.088-.072.335.022.422.062.247.1.455.194.662.334.094.066.195.193.315.226h.14c.214.047.455.014.655.073.355.114.675.28.962.46a5.953 5.953 0 012.085 2.286c.08.154.115.295.188.455.14.33.313.663.455.982.14.315.275.636.476.897.1.14.502.213.682.286.133.06.34.115.46.188.23.14.454.3.67.454.11.076.443.243.463.378z",source:"https://www.mysql.com/about/legal/logos.html",hex:"4479A1",guidelines:"https://www.mysql.com/about/legal/logos.html"},M2={title:"Neo4j",slug:"neo4j",get svg(){return y+"Neo4j"+f+this.path+v},path:"M9.629 13.227c-.593 0-1.139.2-1.58.533l-2.892-1.976a2.61 2.61 0 0 0 .101-.711 2.633 2.633 0 0 0-2.629-2.629A2.632 2.632 0 0 0 0 11.073a2.632 2.632 0 0 0 2.629 2.629c.593 0 1.139-.2 1.579-.533L7.1 15.145c-.063.226-.1.465-.1.711 0 .247.037.484.1.711l-2.892 1.976a2.608 2.608 0 0 0-1.579-.533A2.632 2.632 0 0 0 0 20.639a2.632 2.632 0 0 0 2.629 2.629 2.632 2.632 0 0 0 2.629-2.629c0-.247-.037-.485-.101-.711l2.892-1.976c.441.333.987.533 1.58.533a2.633 2.633 0 0 0 2.629-2.629c0-1.45-1.18-2.629-2.629-2.629ZM16.112.732c-4.72 0-7.888 2.748-7.888 8.082v3.802a3.525 3.525 0 0 1 3.071.008v-3.81c0-3.459 1.907-5.237 4.817-5.237s4.817 1.778 4.817 5.237v8.309H24V8.814C24 3.448 20.832.732 16.112.732Z",source:"https://neo4j.com/brand/#logo",hex:"4581C3",guidelines:"https://neo4j.com/brand/#logo"},S2={title:"NGINX",slug:"nginx",get svg(){return y+"NGINX"+f+this.path+v},path:"M12 0L1.605 6v12L12 24l10.395-6V6L12 0zm6 16.59c0 .705-.646 1.29-1.529 1.29-.631 0-1.351-.255-1.801-.81l-6-7.141v6.66c0 .721-.57 1.29-1.274 1.29H7.32c-.721 0-1.29-.6-1.29-1.29V7.41c0-.705.63-1.29 1.5-1.29.646 0 1.38.255 1.83.81l5.97 7.141V7.41c0-.721.6-1.29 1.29-1.29h.075c.72 0 1.29.6 1.29 1.29v9.18H18z",source:"https://www.nginx.com/press/",hex:"009639",guidelines:"https://www.nginx.com/press/"},_2={title:"Notion",slug:"notion",get svg(){return y+"Notion"+f+this.path+v},path:"M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v
19413.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z",source:"https://www.notion.so",hex:"000000"},C2={title:"Okta",slug:"okta",get svg(){return y+"Okta"+f+this.path+v},path:"M12 0C5.389 0 0 5.35 0 12s5.35 12 12 12 12-5.35 12-12S18.611 0 12 0zm0 18c-3.325 0-6-2.675-6-6s2.675-6 6-6 6 2.675 6 6-2.675 6-6 6z",source:"https://www.okta.com/press-room/media-assets/",hex:"007DC1",guidelines:"https://www.okta.com/terms-of-use-for-okta-content/"},I2={title:"Ollama",slug:"ollama",get svg(){return y+"Ollama"+f+this.path+v},path:"M16.361 10.26a.894.894 0 0 0-.558.47l-.072.148.001.207c0 .193.004.217.059.353.076.193.152.312.291.448.24.238.51.3.872.205a.86.86 0 0 0 .517-.436.752.752 0 0 0 .08-.498c-.064-.453-.33-.782-.724-.897a1.06 1.06 0 0 0-.466 0zm-9.203.005c-.305.096-.533.32-.65.639a1.187 1.187 0 0 0-.06.52c.057.309.31.59.598.667.362.095.632.033.872-.205.14-.136.215-.255.291-.448.055-.136.059-.16.059-.353l.001-.207-.072-.148a.894.894 0 0 0-.565-.472 1.02 1.02 0 0 0-.474.007Zm4.184 2c-.131.071-.223.25-.195.383.031.143.157.288.353.407.105.063.112.072.117.136.004.038-.01.146-.029.243-.02.094-.036.194-.036.222.002.074.07.195.143.253.064.052.076.054.255.059.164.005.198.001.264-.03.169-.082.212-.234.15-.525-.052-.243-.042-.28.087-.355.137-.08.281-.219.324-.314a.365.365 0 0 0-.175-.48.394.394 0 0 0-.181-.033c-.126 0-.207.03-.355.124l-.085.053-.053-.032c-.219-.13-.259-.145-.391-.143a.396.396 0 0 0-.193.032zm.39-2.195c-.373.036-.475.05-.654.086-.291.06-.68.195-.951.328-.94.46-1.589 1.226-1.787 2.114-.04.176-.045.234-.045.53 0 .294.005.357.043.524.264 1.16 1.332 2.017 2.714 2.173.3.033 1.596.033 1.896 0 1.11-.125 2.064-.727 2.493-1.571.114-.226.169-.372.22-.602.039-.167.044-.23.044-.523 0-.297-.005-.355-.045-.531-.288-1.29-1.539-2.304-3.072-2.497a6.873 6.873 0 0 0-.855-.031zm.645.937a3.283 3.283 0 0 1 1.44.514c.223.148.537.458.671.662.166.251.26.508.303.82.02.143.01.251-.043.482-.08.345-.332.705-.672.957a3.115 3.115 0 0 1-.689.348c-.382.122-.632.144-1.525.138-.582-.006-.686-.01-.853-.042-.57-.107-1.022-.334-1.35-.68-.264-.28-.385-.535-.45-.946-.03-.192.025-.509.137-.776.136-.326.488-.73.836-.963.403-.269.934-.46 1.422-.512.187-.02.586-.02.773-.002zm-5.503-11a1.653 1.653 0 0 0-.683.298C5.617.74 5.173 1.666 4.985 2.819c-.07.436-.119 1.04-.119 1.503 0 .544.064 1.24.155 1.721.02.107.031.202.023.208a8.12 8.12 0 0 1-.187.152 5.324 5.324 0 0 0-.949 1.02 5.49 5.49 0 0 0-.94 2.339 6.625 6.625 0 0 0-.023 1.357c.091.78.325 1.438.727 2.04l.13.195-.037.064c-.269.452-.498 1.105-.605 1.732-.084.496-.095.629-.095 1.294 0 .67.009.803.088 1.266.095.555.288 1.143.503 1.534.071.128.243.393.264.407.007.003-.014.067-.046.141a7.405 7.405 0 0 0-.548 1.873c-.062.417-.071.552-.071.991 0 .56.031.832.148 1.279L3.42 24h1.478l-.05-.091c-.297-.552-.325-1.575-.068-2.597.117-.472.25-.819.498-1.296l.148-.29v-.177c0-.165-.003-.184-.057-.293a.915.915 0 0 0-.194-.25 1.74 1.74 0 0 1-.385-.543c-.424-.92-.506-2.286-.208-3.451.124-.486.329-.918.544-1.154a.787.787 0 0 0 .223-.531c0-.195-.07-.355-.224-.522a3.136 3.136 0 0 1-.817-1.729c-.14-.96.114-2.005.69-2.834.563-.814 1.353-1.336 2.237-1.475.199-.033.57-.028.776.01.226.04.367.028.512-.041.179-.085.268-.19.374-.431.093-.215.165-.333.36-.576.234-.29.46-.489.822-.729.413-.27.884-.467 1.352-.561.17-.035.25-.04.569-.04.319 0 .398.005.569.04a4.07 4.07 0 0 1 1.914.997c.117.109.398.457.488.602.034.057.095.177.132.267.105.241.195.346.374.43.14.068.286.082.503.045.343-.058.607-.053.943.016 1.144.23 2.14 1.173 2.581 2.437.385 1.108.276 2.267-.296 3.153-.097.15-.193.27-.333.419-.301.322-.301.722-.001 1.053.493.539.801 1.866.708 3.036-.062.772-.26 1.463-.533 1.854a2.096 2.096 0 0 1-.224.258.916.916 0 0 0-.194.25c-.054.109-.057.128-.057.293v.178l.148.29c.248.476.38.823.498 1.295.253 1.008.231 2.01-.059 2.581a.845.845 0 0 0-.044.098c0 .006.329.009.732.009h.73l.02-.074.036-.134c.019-.076.057-.3.088-.516.029-.217.029-1.016 0-1.258-.11-.875-.295-1.57-.597-2.226-.032-.074-.053-.138-.046-.141.008-.005.057-.074.108-.152.376-.569.607-1.284.724-2.228.031-.26.031-1.378 0-1.628-.083-.645-.182-1.082-.348-1.525a6.083 6.083 0 0 0-.329-.7l-.038-.064.131-.194c.402-.604.636-1.262.727-2.04a6.625 6.625 0 0 0-.024-1.358 5.512 5.512 0 0 0-.939-2.339 5.325 5.325 0 0 0-.95-1.02 8.097 8.097 0 0 1-.186-.152.692.692 0 0 1 .023-.208c.208-1.087.201-2.443-.017-3.503-.19-.924-.535-1.658
194-.98-2.082-.354-.338-.716-.482-1.15-.455-.996.059-1.8 1.205-2.116 3.01a6.805 6.805 0 0 0-.097.726c0 .036-.007.066-.015.066a.96.96 0 0 1-.149-.078A4.857 4.857 0 0 0 12 3.03c-.832 0-1.687.243-2.456.698a.958.958 0 0 1-.148.078c-.008 0-.015-.03-.015-.066a6.71 6.71 0 0 0-.097-.725C8.997 1.392 8.337.319 7.46.048a2.096 2.096 0 0 0-.585-.041Zm.293 1.402c.248.197.523.759.682 1.388.03.113.06.244.069.292.007.047.026.152.041.233.067.365.098.76.102 1.24l.002.475-.12.175-.118.178h-.278c-.324 0-.646.041-.954.124l-.238.06c-.033.007-.038-.003-.057-.144a8.438 8.438 0 0 1 .016-2.323c.124-.788.413-1.501.696-1.711.067-.05.079-.049.157.013zm9.825-.012c.17.126.358.46.498.888.28.854.36 2.028.212 3.145-.019.14-.024.151-.057.144l-.238-.06a3.693 3.693 0 0 0-.954-.124h-.278l-.119-.178-.119-.175.002-.474c.004-.669.066-1.19.214-1.772.157-.623.434-1.185.68-1.382.078-.062.09-.063.159-.012z",source:"https://github.com/ollama/ollama/issues/2152#issuecomment-1905286922",hex:"000000"},b1={title:"OpenTelemetry",slug:"opentelemetry",get svg(){return y+"OpenTelemetry"+f+this.path+v},path:"M12.6974 13.1173c-1.0224 1.0224-1.0224 2.68 0 3.7024 1.0224 1.0224 2.68 1.0224 3.7024 0 1.0224-1.0223 1.0224-2.68 0-3.7024-1.0223-1.0223-2.68-1.0223-3.7024 0zm2.7677 2.7701c-.5063.5063-1.3267.5063-1.833 0s-.5063-1.3266 0-1.833c.5063-.5062 1.3267-.5062 1.833 0 .5063.504.5063 1.3267 0 1.833zM16.356.2355l-1.6041 1.6042c-.314.314-.314.83 0 1.144L21.015 9.247c.314.314.83.314 1.144 0l1.6042-1.6041c.314-.314.314-.83 0-1.144L17.4976.2354c-.314-.314-.8276-.314-1.1416 0zM5.1173 20.734c.2848-.2848.2848-.7497 0-1.0345l-.8155-.8155c-.2848-.2848-.7497-.2848-1.0345 0l-1.6845 1.6845-.0024.0024-.4625-.4625c-.2556-.2556-.6718-.2556-.925 0-.2556.2556-.2556.6718 0 .925l2.775 2.775c.2556.2556.6718.2556.925 0 .2532-.2556.2556-.6718 0-.925l-.4625-.4625.0024-.0024zm8.4856-15.893-3.5637 3.5637c-.3164.3164-.3164.8374 0 1.1538l2.2006 2.2005c1.5554-1.1197 3.7365-.981 5.1361.4187l1.7819-1.7818c.3164-.3165.3164-.8374 0-1.1538l-4.401-4.401c-.3165-.319-.8374-.319-1.1539 0zm-2.2881 7.8455-1.2999-1.2999c-.3043-.3043-.8033-.3043-1.1076 0l-4.5836 4.586c-.3042.3043-.3042.8033 0 1.1076l2.5973 2.5973c.3043.3043.8033.3043 1.1076 0l2.9478-2.9527c-.6231-1.2877-.5112-2.8431.3384-4.0383z",source:"https://cncf-branding.netlify.app/projects/opentelemetry/",hex:"000000",guidelines:"https://cncf-branding.netlify.app/projects/opentelemetry/",license:{type:"CC-BY-4.0",url:"https://spdx.org/licenses/CC-BY-4.0"}},j2={title:"Payoneer",slug:"payoneer",get svg(){return y+"Payoneer"+f+this.path+v},path:"M1.474 3.31c.234 1.802 1.035 5.642 1.398 7.263.095.459.201.853.298 1.013.501.865.907-.287.907-.287C5.644 6.616 3.17 3.597 2.38 2.787c-.139-.15-.384-.332-.608-.396-.32-.095-.374.086-.374.236.01.148.065.565.075.682zm21.835-1.463c.31.224 1.386 1.355 0 1.526-1.984.234-5.76.373-12.022 5.61C8.92 10.968 3.607 16.311.76 22.957a.181.181 0 01-.216.106c-.255-.074-.714-.352-.48-1.418.32-1.44 3.201-8.938 10.817-15.552 2.485-2.155 8.416-7.232 12.426-4.245z",source:"https://www.payoneer.com",hex:"FF4800"},E2={title:"PlanetScale",slug:"planetscale",get svg(){return y+"PlanetScale"+f+this.path+v},path:"M0 12C0 5.373 5.373 0 12 0c4.873 0 9.067 2.904 10.947 7.077l-15.87 15.87a11.981 11.981 0 0 1-1.935-1.099L14.99 12H12l-8.485 8.485A11.962 11.962 0 0 1 0 12Zm12.004 12L24 12.004C23.998 18.628 18.628 23.998 12.004 24Z",source:"https://planetscale.com",hex:"000000"},w1={title:"PostgreSQL",slug:"postgresql",get svg(){return y+"PostgreSQL"+f+this.path+v},path:"M23.5594 14.7228a.5269.5269 0 0 0-.0563-.1191c-.139-.2632-.4768-.3418-1.0074-.2321-1.6533.3411-2.2935.1312-2.5256-.0191 1.342-2.0482 2.445-4.522 3.0411-6.8297.2714-1.0507.7982-3.5237.1222-4.7316a1.5641 1.5641 0 0 0-.1509-.235C21.6931.9086 19.8007.0248 17.5099.0005c-1.4947-.0158-2.7705.3461-3.1161.4794a9.449 9.449 0 0 0-.5159-.0816 8.044 8.044 0 0 0-1.3114-.1278c-1.1822-.0184-2.2038.2642-3.0498.8406-.8573-.3211-4.7888-1.645-7.2219.0788C.9359 2.1526.3086 3.8733.4302 6.3043c.0409.818.5069 3.334 1.2423 5.7436.4598 1.5065.9387 2.7019 1.4334 3.582.553.9942 1.1259 1.5933 1.7143 1.7895.4474.1491 1.1327.1441 1.8581-.7279.8012-.9635 1.5903-1.8258 1.9446-2.2069.4351.2355.9064.3625 1.39.3772a.0569.0569 0 0 0 .0004.0041 11.0312 11.0312 0 0 0-.2472.3054c-.3389.43
19402-.4094.5197-1.5002.7443-.3102.064-1.1344.2339-1.1464.8115-.0025.1224.0329.2309.0919.3268.2269.4231.9216.6097 1.015.6331 1.3345.3335 2.5044.092 3.3714-.6787-.017 2.231.0775 4.4174.3454 5.0874.2212.5529.7618 1.9045 2.4692 1.9043.2505 0 .5263-.0291.8296-.0941 1.7819-.3821 2.5557-1.1696 2.855-2.9059.1503-.8707.4016-2.8753.5388-4.1012.0169-.0703.0357-.1207.057-.1362.0007-.0005.0697-.0471.4272.0307a.3673.3673 0 0 0 .0443.0068l.2539.0223.0149.001c.8468.0384 1.9114-.1426 2.5312-.4308.6438-.2988 1.8057-1.0323 1.5951-1.6698zM2.371 11.8765c-.7435-2.4358-1.1779-4.8851-1.2123-5.5719-.1086-2.1714.4171-3.6829 1.5623-4.4927 1.8367-1.2986 4.8398-.5408 6.108-.13-.0032.0032-.0066.0061-.0098.0094-2.0238 2.044-1.9758 5.536-1.9708 5.7495-.0002.0823.0066.1989.0162.3593.0348.5873.0996 1.6804-.0735 2.9184-.1609 1.1504.1937 2.2764.9728 3.0892.0806.0841.1648.1631.2518.2374-.3468.3714-1.1004 1.1926-1.9025 2.1576-.5677.6825-.9597.5517-1.0886.5087-.3919-.1307-.813-.5871-1.2381-1.3223-.4796-.839-.9635-2.0317-1.4155-3.5126zm6.0072 5.0871c-.1711-.0428-.3271-.1132-.4322-.1772.0889-.0394.2374-.0902.4833-.1409 1.2833-.2641 1.4815-.4506 1.9143-1.0002.0992-.126.2116-.2687.3673-.4426a.3549.3549 0 0 0 .0737-.1298c.1708-.1513.2724-.1099.4369-.0417.156.0646.3078.26.3695.4752.0291.1016.0619.2945-.0452.4444-.9043 1.2658-2.2216 1.2494-3.1676 1.0128zm2.094-3.988-.0525.141c-.133.3566-.2567.6881-.3334 1.003-.6674-.0021-1.3168-.2872-1.8105-.8024-.6279-.6551-.9131-1.5664-.7825-2.5004.1828-1.3079.1153-2.4468.079-3.0586-.005-.0857-.0095-.1607-.0122-.2199.2957-.2621 1.6659-.9962 2.6429-.7724.4459.1022.7176.4057.8305.928.5846 2.7038.0774 3.8307-.3302 4.7363-.084.1866-.1633.3629-.2311.5454zm7.3637 4.5725c-.0169.1768-.0358.376-.0618.5959l-.146.4383a.3547.3547 0 0 0-.0182.1077c-.0059.4747-.054.6489-.115.8693-.0634.2292-.1353.4891-.1794 1.0575-.11 1.4143-.8782 2.2267-2.4172 2.5565-1.5155.3251-1.7843-.4968-2.0212-1.2217a6.5824 6.5824 0 0 0-.0769-.2266c-.2154-.5858-.1911-1.4119-.1574-2.5551.0165-.5612-.0249-1.9013-.3302-2.6462.0044-.2932.0106-.5909.019-.8918a.3529.3529 0 0 0-.0153-.1126 1.4927 1.4927 0 0 0-.0439-.208c-.1226-.4283-.4213-.7866-.7797-.9351-.1424-.059-.4038-.1672-.7178-.0869.067-.276.1831-.5875.309-.9249l.0529-.142c.0595-.16.134-.3257.213-.5012.4265-.9476 1.0106-2.2453.3766-5.1772-.2374-1.0981-1.0304-1.6343-2.2324-1.5098-.7207.0746-1.3799.3654-1.7088.5321a5.6716 5.6716 0 0 0-.1958.1041c.0918-1.1064.4386-3.1741 1.7357-4.4823a4.0306 4.0306 0 0 1 .3033-.276.3532.3532 0 0 0 .1447-.0644c.7524-.5706 1.6945-.8506 2.802-.8325.4091.0067.8017.0339 1.1742.081 1.939.3544 3.2439 1.4468 4.0359 2.3827.8143.9623 1.2552 1.9315 1.4312 2.4543-1.3232-.1346-2.2234.1268-2.6797.779-.9926 1.4189.543 4.1729 1.2811 5.4964.1353.2426.2522.4522.2889.5413.2403.5825.5515.9713.7787 1.2552.0696.087.1372.1714.1885.245-.4008.1155-1.1208.3825-1.0552 1.717-.0123.1563-.0423.4469-.0834.8148-.0461.2077-.0702.4603-.0994.7662zm.8905-1.6211c-.0405-.8316.2691-.9185.5967-1.0105a2.8566 2.8566 0 0 0 .135-.0406 1.202 1.202 0 0 0 .1342.103c.5703.3765 1.5823.4213 3.0068.1344-.2016.1769-.5189.3994-.9533.6011-.4098.1903-1.0957.333-1.7473.3636-.7197.0336-1.0859-.0807-1.1721-.151zm.5695-9.2712c-.0059.3508-.0542.6692-.1054 1.0017-.055.3576-.112.7274-.1264 1.1762-.0142.4368.0404.8909.0932 1.3301.1066.887.216 1.8003-.2075 2.7014a3.5272 3.5272 0 0 1-.1876-.3856c-.0527-.1276-.1669-.3326-.3251-.6162-.6156-1.1041-2.0574-3.6896-1.3193-4.7446.3795-.5427 1.3408-.5661 2.1781-.463zm.2284 7.0137a12.3762 12.3762 0 0 0-.0853-.1074l-.0355-.0444c.7262-1.1995.5842-2.3862.4578-3.4385-.0519-.4318-.1009-.8396-.0885-1.2226.0129-.4061.0666-.7543.1185-1.0911.0639-.415.1288-.8443.1109-1.3505.0134-.0531.0188-.1158.0118-.1902-.0457-.4855-.5999-1.938-1.7294-3.253-.6076-.7073-1.4896-1.4972-2.6889-2.0395.5251-.1066 1.2328-.2035 2.0244-.1859 2.0515.0456 3.6746.8135 4.8242 2.2824a.908.908 0 0 1 .0667.1002c.7231 1.3556-.2762 6.2751-2.9867 10.5405zm-8.8166-6.1162c-.025.1794-.3089.4225-.6211.4225a.5821.5821 0 0 1-.0809-.0056c-.1873-.026-.3765-.144-.5059-.3156-.0458-.0605-.1203-.178-.1055-.2844.0055-.0401.0261-.0985.0925-.1488.1182-.0894.3518-.1226.6096-.0867.3163.0441.6426.1938.6113.4186zm7.9305-.4114c.0111.0792-.049.201-.1531.3102-.0683.0717-.212.1961-.4079.2232a.5456.5456 0 0 1-.075.0052c-.2935 0-.5414-.2344-.5607-.3717-.024-.1765.2641-.3106.5611-.352.297-.0414.6111.0088.6356.1851z",source:"https://wiki.postgresql.org/wiki/Logo",hex:"4169E1",guidelines:"https://www.postgresql.org/about/policies/trademarks/"},z2={title:"Postman",slug:"postman",get svg(){return y+"Postman"+f+this.path+v},path:"M13.527.099C6.955-.744.942 3.9.099 10.473c-.843 6.572 3.8 12.584 10.373 13.428 6.573.843 12.587-3.801 13.428-10.374C24.744 6.955 20.101.943 13.527.099zm2.471 7.485a.855.855 0 0 0-.593.25l-4.453 4.453-.307-.307-.643-.643c4.389-4.376 5.18-4.418 5.996-3.753zm-4.863 4.861l4.44-4.44a.62.62 0 1 1 .847.903l-4.699 4.125-.588-.588zm.33.694l-1.1.238a.06.06 0 0 1-.067-.032.06.06 0 0 1 .01-.073l.645-.645.512.512zm-2.803-.459l1.172-1.172.879.878-1.979.426a.074.074 0 0 1-.085-.039.072.072 0 0 1 .013-.093zm-3.646 6.058a.076.076 0 0 1-.069-.083.077.077 0 0 1 .022-.046h.002l.946-.946 1.222 1.222-2.123-.147zm2.425-1.256a.228.228 0 0 0-.117.256l.203.865a.125.125 0 0 1-.211.117h-.003l-.934-.934-.294-.295 3.762-3.758 1.82-.393.874.874c-1.255 1.102-2.971 2.201-5.1 3.268zm5.279-3.428h-.002l-.839-.839 4.699-4.125a.952.952 0 0 0 .119-.127c-.148 1.345-2.029 3.245-3.977 5.091zm3.657-6.46l-.003-.002a1.822 1.822 0 0 1 2.459-2.684l-1.61 1.613a.119.119 0 0 0 0 .169l1.247 1.247a1.817 1.817 0 0 1-2.093-.343zm2.578 0a1.714 1.714 0 0 1-.271.218h-.001l-1.207-1.207 1.533-1.533c.661.72.637 1.832-.054 2.522zM18.855 6.05a.143.143 0 0 0-.053.157.416.416 0 0 1-.053.45.14.14 0 0 0 .023.197.141.141 0 0 0 .084.03.14.14 0 0 0 .106-.05.691.691 0 0 0 .087-.751.138.138 0 0 0-.194-.033z",source:"https://www.getpostman.com/resources/media-assets/",hex:"FF6C37"},O2={title:"Prisma",slug:"prisma",get svg(){return y+"Prisma"+f+this.path+v},path:"M21.8068 18.2848L13.5528.7565c-.207-.4382-.639-.7273-1.1286-.7541-.5023-.0293-.9523.213-1.2062.6253L2.266 15.1271c-.2773.4518-.2718 1.0091.0158 1.4555l4.3759 6.7
194786c.2608.4046.7127.6388 1.1823.6388.1332 0 .267-.0188.3987-.0577l12.7019-3.7568c.3891-.1151.7072-.3904.8737-.7553s.1633-.7828-.0075-1.1454zm-1.8481.7519L9.1814 22.2242c-.3292.0975-.6448-.1873-.5756-.5194l3.8501-18.4386c.072-.3448.5486-.3996.699-.0803l7.1288 15.138c.1344.2856-.019.6224-.325.7128z",source:"https://github.com/prisma/presskit/tree/4bcb64181f266723439d955d60afa1c55fefa715",hex:"2D3748"},R2={title:"Prometheus",slug:"prometheus",get svg(){return y+"Prometheus"+f+this.path+v},path:"M12 0C5.373 0 0 5.372 0 12c0 6.627 5.373 12 12 12s12-5.373 12-12c0-6.628-5.373-12-12-12zm0 22.46c-1.885 0-3.414-1.26-3.414-2.814h6.828c0 1.553-1.528 2.813-3.414 2.813zm5.64-3.745H6.36v-2.046h11.28v2.046zm-.04-3.098H6.391c-.037-.043-.075-.086-.111-.13-1.155-1.401-1.427-2.133-1.69-2.879-.005-.025 1.4.287 2.395.511 0 0 .513.119 1.262.255-.72-.843-1.147-1.915-1.147-3.01 0-2.406 1.845-4.508 1.18-6.207.648.053 1.34 1.367 1.387 3.422.689-.951.977-2.69.977-3.755 0-1.103.727-2.385 1.454-2.429-.648 1.069.168 1.984.894 4.256.272.854.237 2.29.447 3.201.07-1.892.395-4.652 1.595-5.605-.529 1.2.079 2.702.494 3.424.671 1.164 1.078 2.047 1.078 3.716a4.642 4.642 0 01-1.11 2.996c.792-.149 1.34-.283 1.34-.283l2.573-.502s-.374 1.538-1.81 3.019z",source:"https://prometheus.io",hex:"E6522C"},L2={title:"RabbitMQ",slug:"rabbitmq",get svg(){return y+"RabbitMQ"+f+this.path+v},path:"M23.035 9.601h-7.677a.956.956 0 01-.962-.962V.962a.956.956 0 00-.962-.956H10.56a.956.956 0 00-.962.956V8.64a.956.956 0 01-.962.962H5.762a.956.956 0 01-.961-.962V.962A.956.956 0 003.839 0H.959a.956.956 0 00-.956.962v22.076A.956.956 0 00.965 24h22.07a.956.956 0 00.962-.962V10.58a.956.956 0 00-.962-.98zm-3.86 8.152a1.437 1.437 0 01-1.437 1.443h-1.924a1.437 1.437 0 01-1.436-1.443v-1.917a1.437 1.437 0 011.436-1.443h1.924a1.437 1.437 0 011.437 1.443z",source:"https://www.rabbitmq.com",hex:"FF6600",guidelines:"https://www.rabbitmq.com/trademark-guidelines.html"},D2={title:"Redis",slug:"redis",get svg(){return y+"Redis"+f+this.path+v},path:"M22.71 13.145c-1.66 2.092-3.452 4.483-7.038 4.483-3.203 0-4.397-2.825-4.48-5.12.701 1.484 2.073 2.685 4.214 2.63 4.117-.133 6.94-3.852 6.94-7.239 0-4.05-3.022-6.972-8.268-6.972-3.752 0-8.4 1.428-11.455 3.685C2.59 6.937 3.885 9.958 4.35 9.626c2.648-1.904 4.748-3.13 6.784-3.744C8.12 9.244.886 17.05 0 18.425c.1 1.261 1.66 4.648 2.424 4.648.232 0 .431-.133.664-.365a100.49 100.49 0 0 0 5.54-6.765c.222 3.104 1.748 6.898 6.014 6.898 3.819 0 7.604-2.756 9.33-8.965.2-.764-.73-1.361-1.261-.73zm-4.349-5.013c0 1.959-1.926 2.922-3.685 2.922-.941 0-1.664-.247-2.235-.568 1.051-1.592 2.092-3.225 3.21-4.973 1.972.334 2.71 1.43 2.71 2.619z",source:"https://redis.io/brand-guidelines",hex:"FF4438",guidelines:"https://redis.io/brand-guidelines"},q2={title:"Resend",slug:"resend",get svg(){return y+"Resend"+f+this.path+v},path:"M14.679 0c4.648 0 7.413 2.765 7.413 6.434s-2.765 6.434-7.413 6.434H12.33L24 24h-8.245l-8.88-8.44c-.636-.588-.93-1.273-.93-1.86 0-.831.587-1.565 1.713-1.883l4.574-1.224c1.737-.465 2.936-1.81 2.936-3.572 0-2.153-1.761-3.4-3.939-3.4H0V0z",source:"https://resend.com/brand",hex:"000000",guidelines:"https://resend.com/brand"},N2={title:"Sanity",slug:"sanity",get svg(){return y+"Sanity"+f+this.path+v},path:"m23.327 15.205-.893-1.555-4.321 2.632 4.799-6.11.726-.426-.179-.27.33-.421-1.515-1.261-.693.883-13.992 8.186 5.173-6.221 9.636-5.282-.915-1.769-5.248 2.876 2.584-3.106-1.481-1.305-5.816 6.994-5.777 3.168 4.423-5.847 2.771-1.442-.88-1.789-8.075 4.203L6.186 4.43 4.648 3.198 0 9.349l.072.058.868 1.768 5.153-2.683-4.696 6.207.77.617.458.885 5.425-2.974-5.974 7.185 1.481 1.304.297-.358 14.411-8.459-4.785 6.094.078.065-.007.005.992 1.726 6.364-3.877-2.451 3.954 1.642 1.077L24 15.648z",source:"https://github.com/sanity-io/logos/blob/e298a1ac2757c83910fe08b496a115bc9aef06bd/src/sanityMonogram.tsx",hex:"0D0E12",license:{type:"MIT",url:"https://spdx.org/licenses/MIT"}},B2={title:"Sentry",slug:"sentry",get svg(){return y+"Sentry"+f+this.path+v},path:"M13.91 2.505c-.873-1.448-2.972-1.448-3.844 0L6.904 7.92a15.478 15.478 0 0 1 8.53 12.811h-2.221A13.301 13.301 0 0 0 5.784 9.814l-2.926 5.06a7.65 7.65 0 0 1 4.435 5.848H2.194a.365.365 0 0 1-.298-.534l1.413-2.402a5.16 5.16 0 0 0-1.614-.913L.296 19.275a2.182 2.182 0 0 0 .812 2.999 2.24 2.24 0 0 0 1.086.288h6.983a9.322 9.322 0 0 0-3.845-8.318l1.11-1.922a11.47 11.47 0 0 1 4.95 10.24h5.915a17.242 17.242 0 0 0-7.885-1
1945.28l2.244-3.845a.37.37 0 0 1 .504-.13c.255.14 9.75 16.708 9.928 16.9a.365.365 0 0 1-.327.543h-2.287c.029.612.029 1.223 0 1.831h2.297a2.206 2.206 0 0 0 1.922-3.31z",source:"https://sentry.io/branding/",hex:"362D59"},H2={title:"Shopify",slug:"shopify",get svg(){return y+"Shopify"+f+this.path+v},path:"M15.337 23.979l7.216-1.561s-2.604-17.613-2.625-17.73c-.018-.116-.114-.192-.211-.192s-1.929-.136-1.929-.136-1.275-1.274-1.439-1.411c-.045-.037-.075-.057-.121-.074l-.914 21.104h.023zM11.71 11.305s-.81-.424-1.774-.424c-1.447 0-1.504.906-1.504 1.141 0 1.232 3.24 1.715 3.24 4.629 0 2.295-1.44 3.76-3.406 3.76-2.354 0-3.54-1.465-3.54-1.465l.646-2.086s1.245 1.066 2.28 1.066c.675 0 .975-.545.975-.932 0-1.619-2.654-1.694-2.654-4.359-.034-2.237 1.571-4.416 4.827-4.416 1.257 0 1.875.361 1.875.361l-.945 2.715-.02.01zM11.17.83c.136 0 .271.038.405.135-.984.465-2.064 1.639-2.508 3.992-.656.213-1.293.405-1.889.578C7.697 3.75 8.951.84 11.17.84V.83zm1.235 2.949v.135c-.754.232-1.583.484-2.394.736.466-1.777 1.333-2.645 2.085-2.971.193.501.309 1.176.309 2.1zm.539-2.234c.694.074 1.141.867 1.429 1.755-.349.114-.735.231-1.158.366v-.252c0-.752-.096-1.371-.271-1.871v.002zm2.992 1.289c-.02 0-.06.021-.078.021s-.289.075-.714.21c-.423-1.233-1.176-2.37-2.508-2.37h-.115C12.135.209 11.669 0 11.265 0 8.159 0 6.675 3.877 6.21 5.846c-1.194.365-2.063.636-2.16.674-.675.213-.694.232-.772.87-.075.462-1.83 14.063-1.83 14.063L15.009 24l.927-21.166z",source:"https://www.shopify.com/brand-assets",hex:"7AB55C",guidelines:"https://www.shopify.com/brand-assets"},F2={title:"Snowflake",slug:"snowflake",get svg(){return y+"Snowflake"+f+this.path+v},path:"M24 3.459c0 .646-.418 1.18-1.141 1.18-.723 0-1.142-.534-1.142-1.18 0-.647.419-1.18 1.142-1.18.723 0 1.141.533 1.141 1.18zm-.228 0c0-.533-.38-.951-.913-.951s-.913.38-.913.95c0 .533.38.952.913.952.57 0 .913-.419.913-.951zm-1.37-.533h.495c.266 0 .456.152.456.38 0 .153-.076.229-.19.305l.19.266v.038h-.266l-.19-.266h-.229v.266h-.266zm.495.228h-.229v.267h.229c.114 0 .152-.038.152-.114.038-.077-.038-.153-.152-.153zM7.602 12.4c.038-.151.076-.304.076-.456 0-.114-.038-.228-.038-.342-.114-.343-.304-.647-.646-.838l-4.87-2.777c-.685-.38-1.56-.152-1.94.533-.381.685-.153 1.56.532 1.94l2.701 1.56-2.701 1.56c-.685.38-.913 1.256-.533 1.94.38.685 1.256.914 1.94.533l4.832-2.777c.343-.267.571-.533.647-.876zm1.332 2.626c-.266-.038-.57.038-.837.19l-4.832 2.777c-.685.38-.913 1.256-.532 1.94.38.686 1.255.914 1.94.533l2.701-1.56v3.12c0 .8.647 1.408 1.446 1.408.799 0 1.407-.647 1.407-1.408v-5.592c0-.761-.57-1.37-1.293-1.408zm4.946-6.088c.266.038.57-.038.837-.19l4.832-2.777c.685-.38.913-1.256.532-1.94-.38-.686-1.255-.914-1.94-.533l-2.701 1.56V1.975c0-.799-.647-1.408-1.446-1.408-.799 0-1.446.609-1.446 1.408V7.53c0 .76.609 1.37 1.332 1.407zM3.265 5.97l4.832 2.777c.266.152.533.19.837.19.723-.038 1.331-.684 1.331-1.407V1.975c0-.799-.646-1.408-1.407-1.408-.799 0-1.446.647-1.446 1.408v3.12l-2.701-1.56c-.685-.38-1.56-.152-1.94.533-.419.646-.19 1.521.494 1.902zm9.093 6.011a.412.412 0 00-.114-.266l-.57-.571a.346.346 0 00-.267-.114.412.412 0 00-.266.114l-.571.57a.411.411 0 00-.114.267c0 .076.038.19.114.267l.57.57a.345.345 0 00.267.114c.076 0 .19-.038.266-.114l.571-.57a.412.412 0 00.114-.267zm1.598.533L11.94 14.53c-.039.038-.153.114-.229.114h-.608a.411.411 0 01-.267-.114L8.82 12.514a.408.408 0 01-.076-.229v-.608c0-.076.038-.19.114-.267l2.016-2.016a.41.41 0 01.267-.114h.608a.41.41 0 01.267.114l2.016 2.016a.347.347 0 01.114.267v.608c-.076.077-.114.19-.19.229zm5.593 5.44l-4.832-2.777c-.266-.152-.57-.19-.837-.152-.723.038-1.332.684-1.332 1.408v5.554c0 .8.647 1.408 1.408 1.408.799 0 1.446-.647 1.446-1.408v-3.12l2.7 1.56c.686.38 1.561.152 1.941-.533.419-.646.19-1.521-.494-1.94zm2.549-7.533l-2.701 1.56 2.7 1.56c.686.38.914 1.256.533 1.94-.38.685-1.255.913-1.94.533l-4.832-2.778a1.644 1.644 0 01-.647-.798c-.037-.153-.076-.305-.076-.457 0-.114.039-.228.039-.342.114-.343.342-.647.646-.837l4.832-2.778c.685-.38 1.56-.152 1.94.533.457.609.19 1.484-.494 1.864",source:"https://www.snowflake.com/brand-guidelines/",hex:"29B5E8",guidelines:"https://www.snowflake.com/brand-guidelines/"},G2={title:"SQLite",slug:"sqlite",get svg(){return y+"SQLite"+f+this.path+v},path:"M21.678.521c-1.032-.92-2.28-.55-3.513.544a8.71 8.71 0 0 0-.547.535c-2.109 2.237-4.066 6.38-4.674 9.544.237.48.422 1.093.544 1.561a13.044 13.044 0 0 1 .164.703s-.019-.071-.096-.296l-.05-.146a1.689 1.689 0 0 0-.033-.08c-.138-.32-.518-.995-.686-1.289-.143.423-.27.818-.376 1.176.484.884.778 2.4.778 2.4s-.025-.099-.147-.442c-.107-.303-.644-1.244-.772-1.464-.217.804-.304 1.346-.226 1.478.152.256.296.698.422 1.186.286 1.1.485 2.44.485 2.44l.017.224a22.41 22.41 0 0 0 .056 2.748c.095 1.146.273 2.13.5 2.657l.155-.084c-.334-1.038-.47-2.399-.41-3.967.09-2.398.642-5.29 1.661-8.304 1.723-4.55 4.113-8.201 6.3-9.945-1.993 1.8-4.692 7.63-5.5 9.788-.904 2.416-1.545 4.684-1.931 6.857.666-2.037 2.821-2.912 2.821-2.912s1.057-1.304 2.292-3.166c-.74.169-1.955.458-2.362.629-.6.251-.762.337-.762.337s1.945-1.184 3.613-1.72C21.695 7.9 24.195 2.767 21.678.521m-18.573.543A1.842 1.842 0 0 0 1.27 2.9v16.608a1.84 1.84 0 0 0 1.835 1.834h9.418a22.953 22.953 0 0 1-.052-2.707c-.006-.062-.011-.141-.016-.2a27.01 27.01 0 0 0-.473-2.378c-.121-.47-.275-.898-.369-1.057-.116-.197-.098-.31-.097-.432 0-.12.015-.245.037-.386
194a9.98 9.98 0 0 1 .234-1.045l.217-.028c-.017-.035-.014-.065-.031-.097l-.041-.381a32.8 32.8 0 0 1 .382-1.194l.2-.019c-.008-.016-.01-.038-.018-.053l-.043-.316c.63-3.28 2.587-7.443 4.8-9.791.066-.069.133-.128.198-.194Z",source:"https://github.com/sqlite/sqlite/blob/43e862723ec680542ca6f608f9963c0993dd7324/art/sqlite370.eps",hex:"003B57"},W2={title:"Strapi",slug:"strapi",get svg(){return y+"Strapi"+f+this.path+v},path:"M8.32 0c-3.922 0-5.882 0-7.1 1.219C0 2.438 0 4.399 0 8.32v7.36c0 3.922 0 5.882 1.219 7.101C2.438 24 4.399 24 8.32 24h7.36c3.922 0 5.882 0 7.101-1.219C24 21.562 24 19.601 24 15.68V8.32c0-3.922 0-5.882-1.219-7.101C21.562 0 19.601 0 15.68 0H8.32zm.41 7.28h7.83a.16.16 0 0 1 .16.16v7.83h-3.87v-3.71a.41.41 0 0 0-.313-.398l-.086-.012h-3.72V7.28zm-.5.25v3.87H4.553a.08.08 0 0 1-.057-.136L8.23 7.529zm.25 4.12h3.87v3.87H8.64a.16.16 0 0 1-.16-.16v-3.71zm4.12 4.12h3.87l-3.734 3.734a.08.08 0 0 1-.136-.057V15.77z",source:"https://handbook.strapi.io/strapi-brand-book-2022/strapi-logo",hex:"4945FF",guidelines:"https://handbook.strapi.io/strapi-brand-book-2022"},$2={title:"Stripe",slug:"stripe",get svg(){return y+"Stripe"+f+this.path+v},path:"M13.976 9.15c-2.172-.806-3.356-1.426-3.356-2.409 0-.831.683-1.305 1.901-1.305 2.227 0 4.515.858 6.09 1.631l.89-5.494C18.252.975 15.697 0 12.165 0 9.667 0 7.589.654 6.104 1.872 4.56 3.147 3.757 4.992 3.757 7.218c0 4.039 2.467 5.76 6.476 7.219 2.585.92 3.445 1.574 3.445 2.583 0 .98-.84 1.545-2.354 1.545-1.875 0-4.965-.921-6.99-2.109l-.9 5.555C5.175 22.99 8.385 24 11.714 24c2.641 0 4.843-.624 6.328-1.813 1.664-1.305 2.525-3.236 2.525-5.732 0-4.128-2.524-5.851-6.594-7.305h.003z",source:"https://stripe.com/newsroom/information",hex:"635BFF"},U2={title:"Supabase",slug:"supabase",get svg(){return y+"Supabase"+f+this.path+v},path:"M11.9 1.036c-.015-.986-1.26-1.41-1.874-.637L.764 12.05C-.33 13.427.65 15.455 2.409 15.455h9.579l.113 7.51c.014.985 1.259 1.408 1.873.636l9.262-11.653c1.093-1.375.113-3.403-1.645-3.403h-9.642z",source:"https://github.com/supabase/supabase/blob/4031a7549f5d46da7bc79c01d56be4177dc7c114/packages/common/assets/images/supabase-logo-wordmark--light.svg",hex:"3FCF8E"},k1={title:"Swagger",slug:"swagger",get svg(){return y+"Swagger"+f+this.path+v},path:"M12 0C5.383 0 0 5.383 0 12s5.383 12 12 12c6.616 0 12-5.383 12-12S18.616 0 12 0zm0 1.144c5.995 0 10.856 4.86 10.856 10.856 0 5.995-4.86 10.856-10.856 10.856-5.996 0-10.856-4.86-10.856-10.856C1.144 6.004 6.004 1.144 12 1.144zM8.37 5.868a6.707 6.707 0 0 0-.423.005c-.983.056-1.573.517-1.735 1.472-.115.665-.096 1.348-.143 2.017-.013.35-.05.697-.115 1.038-.134.609-.397.798-1.016.83a2.65 2.65 0 0 0-.244.042v1.463c1.126.055 1.278.452 1.37 1.629.033.429-.013.858.015 1.287.018.406.073.808.156 1.2.259 1.075 1.307 1.435 2.575 1.218v-1.283c-.203 0-.383.005-.558 0-.43-.013-.591-.12-.632-.535-.056-.535-.042-1.08-.075-1.62-.064-1.001-.175-1.988-1.153-2.625.503-.37.868-.812.983-1.398.083-.41.134-.821.166-1.237.028-.415-.023-.84.014-1.25.06-.665.102-.937.9-.91.12 0 .235-.017.369-.027v-1.31c-.16 0-.31-.004-.454-.006zm7.593.009a4.247 4.247 0 0 0-.813.06v1.274c.245 0 .434 0 .623.005.328.004.577.13.61.494.032.332.031.669.064 1.006.065.669.101 1.347.217 2.007.102.544.475.95.941 1.283-.817.549-1.057 1.333-1.098 2.215-.023.604-.037 1.213-.069 1.822-.028.554-.222.734-.78.748-.157.004-.31.018-.484.028v1.305c.327 0 .627.019.927 0 .932-.055 1.495-.507 1.68-1.412.078-.498.124-1 .138-1.504.032-.461.028-.927.074-1.384.069-.715.397-1.01 1.112-1.057a.972.972 0 0 0 .199-.046v-1.463c-.12-.014-.204-.027-.291-.032-.536-.023-.804-.203-.937-.71a5.146 5.146 0 0 1-.152-.993c-.037-.618-.033-1.241-.074-1.86-.08-1.192-.794-1.753-1.887-1.786zm-6.89 5.28a.844.844 0 0 0-.083 1.684h.055a.83.83 0 0 0 .877-.78v-.046a.845.845 0 0 0-.83-.858zm2.911 0a.808.808 0 0 0-.834.78c0 .027 0 .05.004.078 0 .503.342.826.859.826.507 0 .826-.332.826-.853-.005-.503-.342-.836-.855-.831zm2.963 0a.861.861 0 0 0-.876.835c0 .47.378.849.849.849h.009c.425.074.853-.337.881-.83.023-.457-.392-.854-.863-.854z",source:"https://swagger.io",hex:"85EA2D"},V2={title:"Telegram",slug:"telegram",get svg(){return y+"Telegram"+f+this.path+v},path:"M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.9
19462 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z",source:"https://telegram.org/tour/screenshots",hex:"26A5E4"},K2={title:"Terraform",slug:"terraform",get svg(){return y+"Terraform"+f+this.path+v},path:"M1.44 0v7.575l6.561 3.79V3.787zm21.12 4.227l-6.561 3.791v7.574l6.56-3.787zM8.72 4.23v7.575l6.561 3.787V8.018zm0 8.405v7.575L15.28 24v-7.578z",source:"https://www.hashicorp.com/brand",hex:"844FBA",guidelines:"https://www.hashicorp.com/brand"},Q2={title:"Vercel",slug:"vercel",get svg(){return y+"Vercel"+f+this.path+v},path:"m12 1.608 12 20.784H0Z",source:"https://vercel.com/geist/brands",hex:"000000",guidelines:"https://vercel.com/geist/brands"},Y2={title:"WhatsApp",slug:"whatsapp",get svg(){return y+"WhatsApp"+f+this.path+v},path:"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z",source:"https://about.meta.com/brand/resources/whatsapp/whatsapp-brand",hex:"25D366",guidelines:"https://about.meta.com/brand/resources/whatsapp/whatsapp-brand"},x1={title:"WordPress",slug:"wordpress",get svg(){return y+"WordPress"+f+this.path+v},path:"M21.469 6.825c.84 1.537 1.318 3.3 1.318 5.175 0 3.979-2.156 7.456-5.363 9.325l3.295-9.527c.615-1.54.82-2.771.82-3.864 0-.405-.026-.78-.07-1.11m-7.981.105c.647-.03 1.232-.105 1.232-.105.582-.075.514-.93-.067-.899 0 0-1.755.135-2.88.135-1.064 0-2.85-.15-2.85-.15-.585-.03-.661.855-.075.885 0 0 .54.061 1.125.09l1.68 4.605-2.37 7.08L5.354 6.9c.649-.03 1.234-.1 1.234-.1.585-.075.516-.93-.065-.896 0 0-1.746.138-2.874.138-.2 0-.438-.008-.69-.015C4.911 3.15 8.235 1.215 12 1.215c2.809 0 5.365 1.072 7.286 2.833-.046-.003-.091-.009-.141-.009-1.06 0-1.812.923-1.812 1.914 0 .89.513 1.643 1.06 2.531.411.72.89 1.643.89 2.977 0 .915-.354 1.994-.821 3.479l-1.075 3.585-3.9-11.61.001.014zM12 22.784c-1.059 0-2.081-.153-3.048-.437l3.237-9.406 3.315 9.087c.024.053.05.101.078.149-1.12.393-2.325.609-3.582.609M1.211 12c0-1.564.336-3.05.935-4.39L7.29 21.709C3.694 19.96 1.212 16.271 1.211 12M12 0C5.385 0 0 5.385 0 12s5.385 12 12 12 12-5.385 12-12S18.615 0 12 0",source:"https://wordpress.org/about/logos",hex:"21759B",guidelines:"https://wordpressfoundation.org/trademark-policy"},A1={title:"X",slug:"x",get svg(){return y+"X"+f+this.path+v},path:"M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z",source:"https://x.com",hex:"000000",guidelines:"https://about.x.com/en/who-we-are/brand-toolkit"},Z2={title:"Zapier",slug:"zapier",get svg(){return y+"Zapier"+f+this.path+v},path:"M4.157 0A4.151 4.151 0 0 0 0 4.161v15.678A4.151 4.151 0 0 0 4.157 24h15.682A4.152 4.152 0 0 0 24 19.839V4.161A4.152 4.152 0 0 0 19.839 0H4.157Zm10.61 8.761h.03a.577.577 0 0 1 .23.038.585.585 0 0 1 .201.124.63.63 0 0 1 .162.431.612.612 0 0 1-.162.435.58.58 0 0 1-.201.128.58.58 0 0 1-.23.042.529.529 0 0 1-.235-.042.585.585 0 0 1-.332-.328.559.559 0 0 1-.038-.235.613.613 0 0 1 .17-.431.59.59 0 0 1 .405-.162Zm2.853 1.572c.03.004.061.004.095.004.325-.011.646.064.937.219.238.144.431.355.552.609.128.279.189.582.185.888v.193a2 2 0 0 1 0 .219h-2.498c.003.227.075.45.204.642a.78.78 0 0 0 .646.265.714.714 0 0 0 .484-.136.642.642 0 0 0 .23-.318l.915.257a1.398 1.398 0 0 1-.28.537c-.14.159-.321.284-.521.355a2.234 2.234 0 0 1-.836.136 1.923 1.923 0 0 1-1.001-.245 1.618 1.618 0 0 1-.665-.703 2.221 2.221 0 0 1-.227-1.036 1.95 1.95 0 0 1 .48-1.398 1.9 1.9 0 0 1 1.3-.488Zm-9.607.023c.162.004.325.026.48.079.207.065.4.174.563.314.26.302.393.692.366 1.088v2.276H8.53l-.109-.711h-.065c-.064.163-.155.31-.272.439a1.122 1.122 0 0 1-.374.264 1.023 1.023 0 0 1-.453.083 1.334 1.334 0 0 1-.866-.264.965.965 0 0 1-.329-.801.993.993 0 0 1 .076-.431 1.02 1.02 0 0 1 .242-.363 1.478 1.478 0 0 1 1.043-.303h.952v-.181a.696.696 0 0 0-.136-.454.553.553 0 0 0-.438-.154.695.695 0 0 0-.378.086.48.48 0 0 0-.193.254l-.99-.144a1.26 1.26 0 0 1 .257-.563c.14-.174.321-.302.533-.378.261-.091.54-.136.82-.129.053-.003.106-.007.163-.007Zm4.384.007c.174 0 .347.038.506.114.182.083.34.211.458.374.257.423.377.911.351 1.406a2.53 2.53 0 0 1-.355 1.448 1.148 1.148 0 0 1-1.009.517c-.204 0-.401-.045-.582-.136a1.052 1.052 0 0 1-.48-.457 1.298 1.298 0 0 1-.114-.234h-.045l.004 1.784h-1.059v-4.713h.904l.117.805h.057c.068-.208.177-.401.328-.56a1.
194129 1.129 0 0 1 .843-.344h.076v-.004Zm7.559.084h.903l.113.805h.053a1.37 1.37 0 0 1 .235-.484.813.813 0 0 1 .313-.242.82.82 0 0 1 .39-.076h.234v1.051h-.401a.662.662 0 0 0-.313.008.623.623 0 0 0-.272.155.663.663 0 0 0-.174.26.683.683 0 0 0-.027.314v1.875h-1.054v-3.666Zm-17.515.003h3.262v.896L3.73 13.104l.034.113h1.973l.042.9H2.4v-.9l1.931-1.754-.045-.117H2.441v-.896Zm11.815 0h1.055v3.659h-1.055V10.45Zm3.443.684.019.016a.69.69 0 0 0-.351.045.756.756 0 0 0-.287.204c-.11.155-.174.336-.189.522h1.545c-.034-.526-.257-.787-.74-.787h.003Zm-5.718.163c-.026 0-.057 0-.083.004a.78.78 0 0 0-.31.053.746.746 0 0 0-.257.189 1.016 1.016 0 0 0-.204.695v.064c-.015.257.057.507.204.711a.634.634 0 0 0 .253.196.638.638 0 0 0 .314.061.644.644 0 0 0 .578-.265c.14-.223.204-.48.189-.74a1.216 1.216 0 0 0-.181-.711.677.677 0 0 0-.503-.257Zm-4.509 1.266a.464.464 0 0 0-.268.102.373.373 0 0 0-.114.276c0 .053.008.106.027.155a.375.375 0 0 0 .087.132.576.576 0 0 0 .397.11v.004a.863.863 0 0 0 .563-.182.573.573 0 0 0 .211-.457v-.14h-.903Z",source:"https://www.figma.com/file/NQFxTCE5pGR3dHZt0DkOyy/Zapier-Brand-Guidelines-%5BExternal%5D?type=design&node-id=101-9701&mode=design",hex:"FF4F00",guidelines:"https://www.figma.com/file/NQFxTCE5pGR3dHZt0DkOyy/Zapier-Brand-Guidelines-%5BExternal%5D?type=design&node-id=101-9701&mode=design"},d=e=>e?{icon:e,label:e.title}:null,c=(e,t)=>e?{icon:e,label:t}:null,J2={postgres:d(w1),postgresql:d(w1),mysql:d(T2),mongo:d(v1),mongodb:d(v1),redis:d(D2),sqlite:d(G2),mariadb:d(x2),clickhouse:d(Ji),elasticsearch:d(t1),elastic:d(t1),snowflake:d(F2),planetscale:d(E2),neo4j:d(M2),prisma:d(O2),cockroachdb:d(e1),cockroach:d(e1),minio:d(A2),kafka:d(Za),apachekafka:d(Za),rabbitmq:d(L2),pulsar:d($i),flink:d(Wi),spark:d(Ui),googleanalytics:d(ot),"google-analytics":d(ot),ga4:d(ot),ga:d(ot),googleads:d(Wt),"google-ads":d(Wt),adwords:d(Wt),googleadsense:d(o1),adsense:d(o1),googletagmanager:d(Ut),gtm:d(Ut),"tag-manager":d(Ut),googlesearchconsole:d($t),gsc:d($t),"search-console":d($t),googlesheets:d(m1),sheets:d(m1),googledocs:d(i1),docs:d(i1),googleforms:d(c1),forms:d(c1),googlecalendar:d(h2),googlemeet:d(u1),meet:d(u1),googlechat:d(d2),googlemaps:d(d1),maps:d(d1),bigquery:d(c2),pubsub:d(g1),"google-pubsub":d(g1),googletranslate:d(y1),translate:d(y1),googlepay:d(p1),gpay:d(p1),appsscript:d(n1),"apps-script":d(n1),colab:d(r1),"google-colab":d(r1),gcp:d(s1),googlecloud:d(s1),vercel:d(Q2),cloudflare:d(Xi),firebase:d(s2),supabase:d(U2),docker:d(Gt),container:d(Gt),containers:d(Gt),kubernetes:d(f1),k8s:d(f1),terraform:d(K2),nginx:d(S2),drive:d(l1),googledrive:d(l1),dropbox:d(n2),github:d(r2),gitlab:d(i2),jira:d(y2),linear:d(b2),notion:d(_2),confluence:d(e2),postman:d(z2),insomnia:d(g2),swagger:d(k1),openapi:d(k1),githubactions:d(a1),"github-actions":d(a1),jenkins:d(m2),circleci:d(Yi),grafana:d(u2),prometheus:d(R2),datadog:d(a2),sentry:d(B2),opentelemetry:d(b1),otel:d(b1),anthropic:d(Gi),claude:d(Zi),gemini:d(h1),googlegemini:d(h1),ollama:d(I2),langchain:d(v2),apollo:d(Ja),graphql:d(Ja),auth0:d(Ki),okta:d(C2),keycloak:d(f2),discord:d(o2),telegram:d(V2),whatsapp:d(Y2),gmail:d(l2),mailchimp:d(w2),mailgun:d(k2),resend:d(q2),brevo:d(Xa),sendinblue:d(Xa),stripe:d($2),braintree:d(Qi),payoneer:d(j2),shopify:d(H2),hubspot:d(p2),airtable:d(Fi),asana:d(Vi),mixpanel:d(P2),zapier:d(Z2),wordpress:d(x1),wp:d(x1),contentful:d(t2),sanity:d(N2),strapi:d(W2),airbyte:d(Hi),twitter:d(A1),x:d(A1)},X2={slack:c(ks,"Slack"),aws:c(Ve,"AWS"),amazon:c(Ve,"AWS"),s3:c(Ve,"S3"),lambda:c(Ve,"Lambda"),openai:c(zt,"OpenAI"),chatgpt:c(zt,"ChatGPT"),gpt:c(zt,"GPT"),linkedin:c(ws,"LinkedIn"),twilio:c(Na,"Twilio"),sms:c(Na,"Twilio"),sendgrid:c(Ze,"SendGrid"),salesforce:c(Re,"Salesforce"),llm:c(W,"LLM"),rag:c(W,"RAG"),embedding:c(W,"Embeddings"),embeddings:c(W,"Embeddings"),vector:c(W,"Vector DB"),vectordb:c(W,"Vector DB"),ml:c(W,"Machine Learning"),"machine-learning":c(W,"Machine Learning"),ai:c(W,"AI"),inference:c(W,"Inference"),completion:c(W,"Completion"),vision:c(Ha,"Vision"),ocr:c(Ha,"OCR"),image:c(Dt,"Image"),images:c(Dt,"Images"),photo:c(Dt,"Photo"),audio:c(ze,"Audio"),speech:c(ze,"Speech"),tt
194s:c(ze,"Text-to-Speech"),stt:c(ze,"Speech-to-Text"),transcription:c(ze,"Transcription"),schema:c(Xe,"Schema"),validate:c(Xe,"Validation"),validation:c(Xe,"Validation"),validator:c(Xe,"Validator"),"json-schema":c(oe,"JSON Schema"),avro:c(oe,"Avro"),protobuf:c(oe,"Protobuf"),spec:c(oe,"Spec"),api:c(De,"API"),rest:c(De,"REST"),http:c(De,"HTTP"),webhook:c(ra,"Webhook"),webhooks:c(ra,"Webhooks"),grpc:c(De,"gRPC"),websocket:c($e,"WebSocket"),ws:c($e,"WebSocket"),mqtt:c(be,"MQTT"),iot:c(be,"IoT"),broker:c(be,"Broker"),pubsub:c(be,"Pub/Sub"),cursor:c(oe,"Cursor"),code:c(oe,"Editor"),editor:c(oe,"Editor"),ide:c(oe,"IDE"),workflow:c(Oe,"Workflow"),database:c(ee,"Database"),db:c(ee,"Database"),sql:c(ee,"SQL"),query:c(ee,"Query"),etl:c(Oe,"ETL"),transform:c(Oe,"Transform"),transformer:c(Oe,"Transform"),pipeline:c(Oe,"Pipeline"),streaming:c($e,"Streaming"),stream:c($e,"Stream"),batch:c(ee,"Batch"),warehouse:c(ee,"Data Warehouse"),lake:c(ee,"Data Lake"),analytics:c(Ke,"Analytics"),chart:c(Ke,"Chart"),metrics:c(Ke,"Metrics"),report:c(Ke,"Report"),schedule:c(je,"Schedule"),cron:c(je,"Cron"),scheduled:c(je,"Scheduled"),daily:c(je,"Daily"),interval:c(je,"Interval"),sync:c(Je,"Sync"),synchronize:c(Je,"Sync"),mirror:c(Je,"Mirror"),replication:c(Je,"Replication"),filter:c(Ms,"Filter"),threat:c(ue,"Threat Intelligence"),threats:c(ue,"Threat Intelligence"),"threat-intelligence":c(ue,"Threat Intelligence"),intelligence:c(qt,"Intelligence"),malware:c(Ot,"Malware"),vulnerability:c(Ot,"Vulnerability"),vulnerabilities:c(Ot,"Vulnerabilities"),firewall:c(pa,"Firewall"),intrusion:c(Nt,"Intrusion Detection"),ids:c(Nt,"IDS"),ddos:c(ue,"DDoS Protection"),abuse:c(Nt,"Abuse Detection"),reputation:c(ue,"Reputation"),scanning:c(qt,"Scanning"),fingerprint:c(Ss,"Fingerprint"),abuseipdb:c(ue,"AbuseIPDB"),shodan:c(qt,"Shodan"),virustotal:c(ue,"VirusTotal"),geolocation:c(de,"Geolocation"),geo:c(de,"Geolocation"),location:c(de,"Location"),coordinates:c(de,"Coordinates"),latitude:c(de,"Coordinates"),country:c(Qe,"Country"),region:c(Qe,"Region"),timezone:c(Qe,"Timezone"),continent:c(Qe,"Continent"),gps:c(Ga,"GPS"),satellite:c(Ga,"Satellite"),ipinfo:c(de,"IPinfo"),maxmind:c(de,"MaxMind"),ip:c(be,"IP"),ipaddress:c(be,"IP Address"),auth:c(X,"Auth"),authentication:c(X,"Authentication"),oauth:c(X,"OAuth"),sso:c(X,"SSO"),jwt:c(X,"JWT"),token:c(X,"Token"),encrypt:c(X,"Encryption"),encryption:c(X,"Encryption"),secret:c(Ye,"Secret"),secrets:c(Ye,"Secrets"),apikey:c(Ye,"API Key"),"api-key":c(Ye,"API Key"),alert:c(Ue,"Alert"),notification:c(Ue,"Notification"),notify:c(Ue,"Notify"),monitor:c(Ue,"Monitor"),file:c(Ee,"File"),files:c(Ee,"Files"),csv:c(Ee,"CSV"),pdf:c(Ee,"PDF"),xml:c(Ee,"XML"),upload:c(Wa,"Upload"),import:c(Wa,"Import"),download:c(Ba,"Download"),export:c(Ba,"Export"),automation:c(Pe,"Automation"),bot:c(Pe,"Bot"),rpa:c(Pe,"RPA"),message:c(Lt,"Message"),chat:c(Lt,"Chat"),messaging:c(Lt,"Messaging"),email:c(Ze,"Email"),mail:c(Ze,"Email"),smtp:c(Ze,"SMTP"),users:c(Re,"Users"),team:c(Re,"Team"),user:c(Re,"User"),members:c(Re,"Members"),payment:c(we,"Payment"),payments:c(we,"Payments"),billing:c(we,"Billing"),invoice:c(we,"Invoice"),subscription:c(we,"Subscription"),cloud:c(Rt,"Cloud"),infra:c(Rt,"Infrastructure"),serverless:c(Rt,"Serverless"),search:c(js,"Search"),"graphql-api":c(bs,"GraphQL")};function el(e="",t=[]){const o=[...e.toLowerCase().split(/[\s\-_/]+/),...(t||[]).map(i=>i.toLowerCase())],n=new Set,s=[],r=({icon:i,label:l,type:h})=>{n.has(i)||(n.add(i),s.push({type:h,icon:i,label:l}))};for(const i of o){const l=J2[i];l&&r({...l,type:"si"})}for(const i of o){const l=X2[i];l&&r({...l,type:"tabler"})}return s.length===0&&s.push({type:"tabler",icon:Cs,label:"Pack"}),s}const tl="_section_j1kxv_1",al="_head_j1kxv_10",ol="_title_j1kxv_14",nl="_lead_j1kxv_25",sl="_code_j1kxv_34",rl="_marquee_j1kxv_43",il="_row_j1kxv_72",ll="_track_j1kxv_77",cl="_scroll_j1kxv_1",hl="_reverse_j1kxv_84",dl="_logo_j1kxv_125",ul="_glyph_j1kxv_151",pl="_label_j1kxv_162",gl="_infinity_j1kxv_169",B={section:tl,head:al,title:ol,lead:nl,code:sl,marquee:rl,row:il,track:ll,scroll:cl,reverse:hl,logo:dl,glyph:ul,label:pl,infinity:gl},ml=6,P1={infinity:!0};function yl(e){const t=[],o=[];return e.forEach((n,s)=>(s%2===0?t:o).push(n)),[t,o].map(fl)}function fl(e){const t=[];return e.forEach((o,n)=>{n>0&&n%ml===0&&t.push(P1),t.push(o)}),t.push(P1),t}function vl(){return a.jsxs("a",{className:`${B.logo} ${B.infinity}`,href:"https://docs.airpipe.io/docs/features/connectors",...Q,title:"Any API that speaks HTTP â read how",children:[a.jsx("span",{className:B.glyph,"aria-hidden":"true",children:a.jsx("svg",{viewBox:"0 0 24 24",width:20,height:20,fill:"none",stroke:"currentColor",strokeWidth:1.8,children:a.jsx("path",{d:"M6.5 8.5a3.5 3.5 0 100 7c2.5 0 3.5-3.5 5.5-3.5s3 3.5 5.5 3.5a3.5 3.5 0 100-7c-2.5 0-3.5 3.5-5.5 3.5S9 8.5 6.5 8.5z"})})}),a.jsx("span",{className:B.label,children:"every other API"})]})}function bl({item:e}){const t=el("",[e.iconKey])[0],o=(t==null?void 0:t.type)==="si";return a.jsxs(ae,{to:`/integrations/${e.slug}`,className:B.logo,title:`${e.name} with Air Pipe`,children:[a.jsx("span",{className:B.glyph,"aria-hidden":"true",children:o?a.jsx("svg",{role:"img",viewBox:"0 0 24 24",width:20,height:20,fill:"currentColor",children:a.jsx("path",{d:t.icon.path})}):t?a.jsx(t.icon,{size:20,stroke:1.5}):null}),a.jsx("span",{className:B.label,children:e.name})]})}function wl({item:e}){return e.infinity?a.jsx(vl,{}):a.jsx(bl,{item:e})}function T1({items:e,reverse:t}){const o=n=>a.jsx("div",{className:`${B.track} ${t?B.reverse:""}`,"aria-hidden":n||void 0,children:e.map((s,r)=>a.jsx(wl,{item:s},`${n?"dup":"a"}-${s.slug||"inf"}-${r}`))});return a.jsxs("div",{className:B.row,children:[o(!1),o(!0)]})}function kl(){const[e,t]=g.useMemo(()=>yl(At),[]);return a.jsxs("section",{className:B.section,children:[a.jsxs(K,{size:880,className:B.head,children:[a.jsx(te,{order:2,className:B.title,children:"No connector catalogue. Thatâs the point."}),a.jsxs(C,{c:"dimmed",mt:"md",className:B.lead,children:["There is no Slack node to install and no integration to wait for. Databases, Google, AWS, email and MQTT have native actions; every other API is one ",a.jsx("code",{className:B.code,children:"http:"})," action. So the service you need is already supported â including the one released this morning, and the internal one only you have."]})]}),a.jsxs("div",{className:B.marquee,children:[a.jsx(T1,{items:e}),a.jsx(T1,{items:t,reverse:!0})]}),a.jsx(D,{justify:"center",mt:"xl",children:a.jsx(F,{variant:"outline",size:"md",component:ae,to:"/marketplace",children:"See the packs that already do it"})})]})}const xl="_wrapper_1b3wm_1",Al="_title_1b3wm_7",Pl="_subtitle_1b3wm_18",Tl="_feature_1b3wm_32",nt={wrapper:xl,title:Al,subtitle:Pl,feature:Tl},Vt={heading:"Fits your stack â OpenAPI, metrics, and traces by default.",lead:"Design it visually or as readable config â then every endpoint drops into the Grafana, Datadog, or Jaeger stack you already run. No black box, no bare MCP kit.",points:[{id:"tracing",title:"Auto OpenTelemetry tracing",desc:"Set one env var and every request becomes an end-to-e
194nd OTLP trace â Jaeger, Tempo, Honeycomb, Datadog."},{id:"metrics",title:"Auto Prometheus metrics",desc:"/metrics is exposed automatically, labelled by interface â no cardinality blow-ups from IDs in paths."},{id:"docs",title:"Auto OpenAPI & Swagger",desc:"/documentation and /docs.json are generated from your config's assertions and metadata."}]},Ml={tracing:so,metrics:wt,docs:no};function Sl(){return a.jsxs(K,{size:"lg",className:nt.wrapper,id:"observability-showcase",children:[a.jsx(te,{order:2,ta:"center",className:nt.title,children:Vt.heading}),a.jsx(C,{ta:"center",c:"dimmed",size:"lg",className:nt.subtitle,children:Vt.lead}),a.jsx(pe,{cols:{base:1,md:3},spacing:"lg",mt:40,children:Vt.points.map(e=>{const t=Ml[e.id];return a.jsxs("div",{className:nt.feature,children:[a.jsx(ke,{size:44,radius:"md",variant:"light",color:"blue",children:a.jsx(t,{stroke:1.5,style:{width:S(24),height:S(24)}})}),a.jsx(C,{fw:700,fz:"lg",mt:"sm",children:e.title}),a.jsx(C,{c:"dimmed",size:"sm",mt:4,children:e.desc})]},e.id)})}),a.jsxs(D,{justify:"center",mt:32,children:[a.jsx(F,{variant:"outline",size:"md",component:ae,to:"/marketplace/pack/observability-showcase",children:"Read the config behind the demo"}),a.jsx(F,{variant:"subtle",size:"md",component:ae,to:"/features/observability",children:"How the tracing works"})]})]})}const M1=lo.find(e=>e.path==="/"),_l=[{label:"Agents",to:"/features/agents"},{label:"MCP",to:"/features/mcp"},{label:"HTTP APIs",to:"/features/automation"},{label:"Cron",to:"/features/automation"},{label:"Webhooks",to:"/features/automation"},{label:"Realtime",to:"/features/realtime"},{label:"MQTT",to:"/features/realtime"},{label:"OpenAPI",to:"/features/observability"},{label:"Prometheus",to:"/features/observability"},{label:"OpenTelemetry",to:"/features/observability"},{label:"Self-host",to:"/features/self-hosted"}];function Cl(){e();function e(){const t=Y();g.useEffect(()=>{t.hash&&setTimeout(()=>{const o=document.getElementById(t.hash.substring(1));o&&(console.log(t.hash),o.scrollIntoView({behavior:"smooth"}))},750)},[t.hash])}return a.jsxs(a.Fragment,{children:[a.jsx(Or,{title:M1.title,description:M1.description,path:"/"}),a.jsxs(K,{className:O.wrapper,size:1400,children:[a.jsx(et,{className:O.dots,style:{left:0,top:0}}),a.jsx(et,{className:O.dots,style:{left:60,top:0}}),a.jsx(et,{className:O.dots,style:{left:0,top:140}}),a.jsx(et,{className:O.dots,style:{right:0,top:60}}),a.jsxs("div",{className:O.inner,children:[a.jsxs(te,{className:O.title,children:[a.jsx(C,{component:"span",className:O.highlight,inherit:!0,children:"Unified backend"})," ","for APIs,"," ",a.jsx("br",{className:O.softBreak}),"workflows, and AI agents."]}),a.jsxs(K,{p:0,size:760,children:[a.jsxs(C,{size:"lg",c:"dimmed",className:O.description,children:["One config, not several services."," ",a.jsx("br",{className:O.softBreak}),"An HTTP API, a cron job, realtime channels, MCP tools and more."]}),a.jsx(C,{c:"dimmed",mt:"sm",className:O.subproof,children:"OpenAPI, Prometheus, and OpenTelemetry built in. Managed cloud or self-hosted."})]}),a.jsx(D,{justify:"center",gap:"xs",mt:"lg",children:_l.map(t=>a.jsx(E1,{component:ae,to:t.to,variant:"light",color:"blue",size:"lg",radius:"sm",style:{cursor:"pointer",textTransform:"none"},children:t.label},t.label))}),a.jsxs("div",{className:O.controls,children:[a.jsx(F,{size:"md",variant:"gradient",gradient:{from:"blue",to:"cyan",deg:135},className:`${O.control} btn-cta`,component:"a",href:gt,...Q,children:"Start free"}),a.jsx(F,{className:O.control,size:"md",variant:"outline",component:ae,to:"/marketplace",children:"Browse the marketplace"})]}),a.jsx(Bi,{})]})]}),a.jsx(kl,{}),a.jsx(Sl,{}),a.jsx(qr,{}),a.jsx(yr,{}),a.jsx(Ur,{}),a.jsx(Yr,{}),a.jsxs(K,{className:O.wrapper,size:1400,children:[a.jsx("br",{})," ",a.jsx("br",{}),a.jsxs("div",{className:O.inner,children:[a.jsx(te,{order:2,className:O.title,ta:"center",children:"Ship one in five minutes."}),a.jsx(K,{p:0,size:600,children:a.jsx(C,{size:"lg",c:"dimmed",className:O.description,ta:"center",children:"Free tier, no credit card. Managed cloud or the self-hosted binary â the same config either way."})}),a.jsx("div",{className:O.controls,style:{textAlign:"center"},children:a.jsx(F,{size:"xl",ta:"center",variant:"gradient",gradient:{from:"blue",to:"cyan",deg:135},className:`${O.control} btn-cta`,component:"a",href:gt,...Q,children:"Sign up"})})]})]})]})}const Il="_footer_efcfb_1",jl="_inner_efcfb_6",El="_links_efcfb_17",st={footer
194:Il,inner:jl,links:El},zl="/ap-horizontal-white.png",Ol=[{link:"/compare/zapier-alternative",label:"vs Zapier"},{link:"/compare/n8n-alternative",label:"vs n8n"},{link:"/compare/gumloop-alternative",label:"vs Gumloop"},{link:"/compare/ably-alternative",label:"vs Ably"},{link:"/compare/pusher-alternative",label:"vs Pusher"},{link:"/compare/emqx-alternative",label:"vs EMQX"},{link:"/blog",label:"Blog"},{link:"/limits",label:"Limits"},{link:"/terms",label:"Terms of Service"},{link:"/privacy",label:"Privacy Notice"},{link:"/contact",label:"Contact Us"}];function Rl(){const e=bt(),t=C1(),o=la(`(max-width: ${t.breakpoints.sm})`),n=Ol.map(s=>a.jsx(Yt,{c:"dimmed",href:s.link,lh:1,onClick:r=>{r.preventDefault(),e(s.link)},size:"sm",children:s.label},s.label));return a.jsx("div",{className:st.footer,children:a.jsxs("div",{className:st.inner,children:[a.jsx(ia,{fit:"contain",src:zl,alt:"Air Pipe",maw:o?150:void 0,className:st.image,style:{cursor:"pointer",width:145,height:28,flex:"0 0 auto"},onClick:()=>e("/")}),a.jsx(D,{className:st.links,children:n}),a.jsxs(D,{gap:"xs",justify:"flex-end",wrap:"nowrap",children:[a.jsx(St,{size:"lg",variant:"default",radius:"xl",component:"a",href:"https://x.com/AirPipeIO/","aria-label":"Air Pipe on X",...Q,children:a.jsx(xs,{style:{width:S(18),height:S(18)},stroke:1.5})}),a.jsx(St,{size:"lg",variant:"default",radius:"xl",component:"a",href:"https://discord.gg/b8mFtjWXZj","aria-label":"Air Pipe on Discord",...Q,children:a.jsx(ao,{style:{width:S(18),height:S(18)},stroke:1.5})}),a.jsx(St,{size:"lg",variant:"default",radius:"xl",component:"a",href:"https://www.youtube.com/@AirPipeIO","aria-label":"Air Pipe on YouTube",...Q,children:a.jsx(oo,{style:{width:S(18),height:S(18)},stroke:1.5})})]})]})})}const va="ap-reload-guard:",Ll=2;function Dl(e){try{return JSON.parse(sessionStorage.getItem(va+e)||"null")||{}}catch{return{}}}function ba(e,t=""){const o=Dl(e),n=o.target===t&&o.count||0;if(n>=Ll)return!1;try{sessionStorage.setItem(va+e,JSON.stringify({target:t,count:n+1}))}catch{}return window.location.reload(),!0}function ho(e){try{sessionStorage.removeItem(va+e)}catch{}}const ql=/Failed to fetch dynamically imported module|Importing a module script failed|error loading dynamically imported module|Loading chunk .* failed/i;class Nl extends g.Component{constructor(){super(...arguments);V(this,"state",{failed:!1})}static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(o){ql.test((o==null?void 0:o.message)||"")&&ba("chunk","3638012")}render(){return this.state.failed?a.jsx(ne,{mih:"60vh",p:"xl",children:a.jsxs(I1,{align:"center",gap:"sm",children:[a.jsx(te,{order:3,children:"Something went wrong"}),a.jsx(C,{c:"dimmed",ta:"center",children:"This page failed to load. Reloading usually fixes it."}),a.jsx(F,{onClick:()=>window.location.reload(),children:"Reload"})]})}):this.props.children}}const Bl=5*60*1e3,Hl=60*1e3,Fl=60*1e3,Gl=15*1e3,Wl=30*60*1e3,S1=["pointerdown","pointermove","keydown","wheel","touchstart","scroll"];function $l(){const e=document.activeElement;if(e&&/^(INPUT|TEXTAREA|SELECT)$/.test(e.tagName))return!0;for(const t of document.querySelectorAll("input, textarea"))if(!(t.disabled||t.readOnly||t.type==="hidden")&&t.value&&t.value.trim())return!0;return!1}function Ul(){const{pathname:e}=Y(),t=g.useRef(null),o=g.useRef(Date.now()),n=g.useRef(!1),s=g.useCallback(()=>{const l=t.current;if(!l||$l())return;const h=Date.now();(document.hidden||n.current||h-o.current>=Fl||h-l.since>=Wl)&&ba("version",l.version)},[]),r=g.useCallback(async()=>{var l;try{const h=await fetch(`/version.json?t=${Date.now()}`,{cache:"no-store"});if(!h.ok)return;const{version:u}=await h.json();if(!u)return;if(u==="3638012"){t.current=null,ho("version");return}((l=t.current)==null?void 0:l.version)!==u&&(t.current={version:u,since:Date.now()}),s()}catch{}},[s]);g.useEffect(()=>{const l=setTimeout(r,Hl),h=setInterval(r,Bl),u=setInterval(s,Gl),p=()=>{document.hidden||r()};return document.addEventListener("visibilitychange",p),window.addEventListener("online",r),()=>{clearTimeout(l),clearInterval(h),clearInterval(u),document.removeEventListener("visibilitychange",p),window.removeEventListener("online",r)}},[r,s]),g.useEffect(()=>{const l=()=>{o.current=Date.now()};for(const h of S1)window.addEventListener(h,l,{passive:!0});return()=>{for(const h of S1)window.removeEventListener(h,l)}},[]);const i=g.useRef(e);g.useEffect(()=>{e!==i.current&&(n.current=!0,s())},[e,s])}function _1(e,t){try{if(typeof window.rdt!="function")return;window.rdt("track",e,t||{})}catch{}}const Vl=g.lazy(()=>N(()=>import("./Pricing-jHQehpSr.js"),__vite__mapDeps([7,1,4,5,8,9,10]))),Kl=g.lazy(()=>N(()=>import("./Limits-MELKQfGq.js"),__vite__mapDeps([11,1,4,5,12]))),Ql=g.lazy(()=>N(()=>import("./Privacy-M6eZORUQ.js"),__vite__mapDeps([13,1,4,5]))),Yl=g.lazy(()=>N(()=>import("./ContactUs-ZnCv09Ld.js"),__vite__mapDeps([14,1,4,5,15]))),Zl=g.lazy(()=>N(()=>import("./TermsOfService-c331ls0t.js"),__vite__mapDeps([16,1,4,5]))),Jl=g.lazy(()=>N(()=>import("./index-iutKtKSh.js"),__vite__mapDeps([17,1,4,5,18]))),Xl=g.lazy(()=>N(()=>import("./FeaturePage-TEf6LEHb.js"),__vite__mapDeps([19,1,20,21,22,4,5,8,17,18]))),e3=g.lazy(()=>N(()=>import("./ComparePage-50MJMQIl.js"),__vite__mapDeps([23,1,20,21,22,4,5,8,17,18]))),t3=g.lazy(()=>N(()=>import("./IntegrationPage-mPNnG870.js"),__vite__mapDeps([24,1,20,21,22,4,5,8,17,18,25]))),a3=g.lazy(()=>N(()=>import("./McpClientPage-WDskGJ3f.js"),__vite__mapDeps([26,1,20,21,22,4,5,8,17,18]))),o3=g.lazy(()=>N(()=>import("./ClusterIndex-lcc_F2V2.js"),__vite__mapDeps([27,1,21,22,4,5])).then(e=>({default:e.IntegrationsIndex}))),n3=g.lazy(()=>N(()=>import("./ClusterIndex-lcc_F2V2.js"),__vite__mapDeps([27,1,21,22,4,5])).then(e=>({default:e.McpIndex}))),Kt=g.lazy(()=>N(()=>import("./Marketplace-HS0XyMYr.js"),__vite__mapDeps([28,1,4,5,8,2,3,29,30,12,9,25]))),s3=g.lazy(()=>N(()=>import("./BlogIndex-ZT6ts4iv.js"),__vite__mapDeps([31,1,32,33,34,4,5]))),r3=g.lazy(()=>N(()=>import("./BlogArchive-aj0uN5xE.js"),__vite__mapDeps([35,1,32,33,34,4,5]))),i3=g.lazy(()=>N(()=>import("./BlogPost-lk6p2iM8.js"),__vite__mapDeps([36,1,29,4,5,30,17,18,33,34])));function l3(){const{pathname:e}=Y();return g.useEffect(()=>{window.scrollTo(0,0)},[e]),null}const c3=new Set(["/pricing","/limits"]);function h3(){const{pathname:e}=Y(),t=g.useRef(!0);return g.useEffect(()=>{t.current?t.current=!1:_1("PageVisit"),c3.has(e)&&_1("ViewContent")},[e]),null}function d3(){return Ul(),null}function u3(){const{pathname:e}=Y(),t=e==="/blog"||e.startsWith("/blog/");return g.useEffect(()=>(document.body.classList.toggle("reading",t),()=>document.body.classList.remove("reading")),[t]),null}function p3(){return a.jsx("div",{style:{width:"100%",display:"flex",flexDirection:"column",minHeight:"100vh"},children:a.jsxs(ts,{children:[a.jsxs("div",{children:[a.jsx("div",{className:"wave"}),a.jsx("div",{className:"wave"}),a.jsx("div",{className:"wave"})]}),a.jsx(l3,{}),a.jsx(h3,{}),a.jsx(d3,{}),a.jsx(u3,{}),a.jsx(Us,{}),a.jsx("main",{style:{flex:1},children:a.jsx(Nl,{children:a.jsx(g.Suspense,{fallback:a.jsx(ne,{mih:"60vh",children:a.jsx(ko,{})}),children:a.jsxs(Vn,{children:[a.jsx(R,{path:"/",element:a.jsx(Cl,{})}),a.jsx(R,{path:"/pricing",element:a.jsx(Vl,{})}),a.jsx(R,{path:"/limits",element:a.jsx(Kl,{})}),a.jsx(R,{path:"/features/:slug",element:a.jsx(Xl,{})}),a.jsx(R,{path:"/compare/:slug",element:a.jsx(e3,{})}),a.jsx(R,{path:"/integrations",element:a.jsx(o3,{})}),a.jsx(R,{path:"/integrations/:slug",element:a.jsx(t3,{})}),a.jsx(R,{path:"/mcp",element:a.jsx(n3,{})}),a.jsx(R,{path:"/mcp/:slug",element:a.jsx(a3,{})}),a.jsx(R,{path:"/marketplace",element:a.jsx(Kt,{})}),a.jsx(R,{path:"/marketplace/category/:categorySlug",element:a.jsx(Kt,{})}),a.jsx(R,{path:"/marketplace/pack/:packSlug",element:a.jsx(Kt,{})}),a.jsx(R,{path:"/blog",element:a.jsx(s3,{})}),a.jsx(R,{path:"/blog/archive",element:a.jsx(r3,{})}),a.jsx(R,{path:"/blog/:slug",element:a.jsx(i3,{})}),a.jsx(R,{path:"/contact",element:a.jsx(Yl,{})}),a.jsx(R,{path:"/terms",element:a.jsx(Zl,{})}),a.jsx(R,{path:"/privacy",element:a.jsx(Ql,{})}),a.jsx(R,{path:"*",element:a.jsx(Jl,{})})]})})})}),a.jsx(Rl,{})]})})}
194document.querySelectorAll("script[data-seo-jsonld]").forEach(e=>e.remove());window.addEventListener("vite:preloadError",e=>{e.preventDefault(),ba("chunk","3638012")});setTimeout(()=>ho("chunk"),10*1e3);mo.createRoot(document.getElementById("root")).render(a.jsx(E.StrictMode,{children:a.jsx(B1,{children:a.jsx(xo,{initialDirection:"ltr",detectDirection:!1,children:a.jsx(Ao,{defaultColorScheme:"dark",colorSchemeManager:Po({key:"mantine-ui-color-scheme"}),theme:{components:{Button:{defaultProps:{radius:"md"}}}},children:a.jsx("div",{style:{width:"100%",height:"100%"},children:a.jsx(p3,{})})})})})}));export{Je as $,ht as A,ti as B,ga as C,ro as D,Q as E,el as F,b3 as G,De as H,Os as I,Oe as J,Ke as K,ae as L,S3 as M,I3 as N,j3 as O,vr as P,Ua as Q,gt as R,Or as S,X0 as T,je as U,br as V,Ba as W,lo as X,fr as Y,C3 as Z,at as _,ee as a,js as a0,w3 as a1,A3 as a2,He as a3,v3 as a4,x3 as a5,N as a6,Y as a7,Xe as a8,Ts as b,w as c,As as d,pa as e,so as f,Rs as g,Fa as h,_s as i,zs as j,ys as k,xs as l,ao as m,de as n,Ze as o,f3 as p,k3 as q,_3 as r,P3 as s,M3 as t,bt as u,Pt as v,E3 as w,ct as x,T3 as y,At as z}; 195function __vite__mapDeps(indexes) { 196 if (!__vite__mapDeps.viteFileDeps) { 197 __vite__mapDeps.viteFileDeps = ["assets/WorkflowFlow-6ATSYeBG.js","assets/react-PPJ0mPjh.js","assets/index-rOgc0dK-.js","assets/index-7udN-ufc.css","assets/mantine-DyaIkVVa.js","assets/mantine-aU1Ebnkp.css","assets/WorkflowFlow-riKl6R5h.css","assets/Pricing-jHQehpSr.js","assets/IconCircleCheck-2qN-P4qH.js","assets/IconRepeat-LjDVLvUJ.js","assets/Pricing-E_A8ALlG.css","assets/Limits-MELKQfGq.js","assets/IconBolt-0W_iBXfa.js","assets/Privacy-M6eZORUQ.js","assets/ContactUs-ZnCv09Ld.js","assets/ContactUs-RUhKjQY7.css","assets/TermsOfService-c331ls0t.js","assets/index-iutKtKSh.js","assets/index-6BuPTfg7.css","assets/FeaturePage-TEf6LEHb.js","assets/MarketingPage-alQYrBEf.js","assets/MarketingPage.module-LTI6PsUm.js","assets/MarketingPage-NpKLtvS5.css","assets/ComparePage-50MJMQIl.js","assets/IntegrationPage-mPNnG870.js","assets/packData-gA5HHc3G.js","assets/McpClientPage-WDskGJ3f.js","assets/ClusterIndex-lcc_F2V2.js","assets/Marketplace-HS0XyMYr.js","assets/GfmMarkdown-3YPD2Tfd.js","assets/GfmMarkdown-sPYRMgF2.css","assets/BlogIndex-ZT6ts4iv.js","assets/SearchBar-5aQO1_K9.js","assets/Blog.module-0SI_vvW9.js","assets/Blog-0iguE5oh.css","assets/BlogArchive-aj0uN5xE.js","assets/BlogPost-lk6p2iM8.js"] 198 } 199 return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) 200}
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.