[{"data":1,"prerenderedAt":672},["ShallowReactive",2],{"navigation_docs":3,"-quayel-gateway-getting-started":91,"-quayel-gateway-getting-started-surround":669},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":90},"Quayel Gateway","i-lucide-network","\u002Fquayel-gateway","quayel-gateway",[10,29,68],{"title":11,"icon":12,"path":13,"stem":14,"children":15},"Getting Started","i-lucide-rocket","\u002Fquayel-gateway\u002Fgetting-started","quayel-gateway\u002F01.getting-started\u002Findex",[16,19,24],{"title":17,"path":13,"stem":14,"icon":18},"Introduction","i-lucide-book-open",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fquayel-gateway\u002Fgetting-started\u002Finstallation","quayel-gateway\u002F01.getting-started\u002F1.installation","i-lucide-container",{"title":25,"path":26,"stem":27,"icon":28},"Project Structure","\u002Fquayel-gateway\u002Fgetting-started\u002Fproject-structure","quayel-gateway\u002F01.getting-started\u002F2.project-structure","i-lucide-folder-tree",{"title":30,"icon":31,"path":32,"stem":33,"children":34},"Plugins","i-lucide-puzzle","\u002Fquayel-gateway\u002Fplugins","quayel-gateway\u002F02.plugins\u002Findex",[35,38,43,48,53,58,63],{"title":36,"path":32,"stem":33,"icon":37},"Overview","i-lucide-workflow",{"title":39,"path":40,"stem":41,"icon":42},"IP Intelligence","\u002Fquayel-gateway\u002Fplugins\u002Fip-intel","quayel-gateway\u002F02.plugins\u002F1.ip-intel","i-lucide-radar",{"title":44,"path":45,"stem":46,"icon":47},"Firewall","\u002Fquayel-gateway\u002Fplugins\u002Ffirewall","quayel-gateway\u002F02.plugins\u002F2.firewall","i-lucide-shield",{"title":49,"path":50,"stem":51,"icon":52},"Rate Limiting","\u002Fquayel-gateway\u002Fplugins\u002Frate-limiting","quayel-gateway\u002F02.plugins\u002F3.rate-limiting","i-lucide-gauge",{"title":54,"path":55,"stem":56,"icon":57},"Cache","\u002Fquayel-gateway\u002Fplugins\u002Fcache","quayel-gateway\u002F02.plugins\u002F4.cache","i-lucide-database",{"title":59,"path":60,"stem":61,"icon":62},"Load Balancer","\u002Fquayel-gateway\u002Fplugins\u002Fload-balancer","quayel-gateway\u002F02.plugins\u002F5.load-balancer","i-lucide-scale",{"title":64,"path":65,"stem":66,"icon":67},"Auto-SSL","\u002Fquayel-gateway\u002Fplugins\u002Fauto-ssl","quayel-gateway\u002F02.plugins\u002F6.auto-ssl","i-lucide-lock",{"title":69,"icon":70,"path":71,"stem":72,"children":73},"AI","i-lucide-bot","\u002Fquayel-gateway\u002Fai","quayel-gateway\u002F03.ai\u002Findex",[74,75,80,85],{"title":36,"path":71,"stem":72,"icon":70},{"title":76,"path":77,"stem":78,"icon":79},"The Quayel Gateway Skill","\u002Fquayel-gateway\u002Fai\u002Fskill","quayel-gateway\u002F03.ai\u002F1.skill","i-lucide-wand-sparkles",{"title":81,"path":82,"stem":83,"icon":84},"Installing the Skill","\u002Fquayel-gateway\u002Fai\u002Finstallation","quayel-gateway\u002F03.ai\u002F2.installation","i-lucide-download",{"title":86,"path":87,"stem":88,"icon":89},"AI Agent Guide","\u002Fquayel-gateway\u002Fai\u002Fagent-guide","quayel-gateway\u002F03.ai\u002F3.agent-guide","i-lucide-braces",false,{"id":92,"title":17,"body":93,"description":662,"extension":663,"links":664,"meta":665,"navigation":666,"path":13,"seo":667,"stem":14,"__hash__":668},"docs\u002Fquayel-gateway\u002F01.getting-started\u002Findex.md",{"type":94,"value":95,"toc":656},"minimark",[96,100,112,436,439,444,476,480,488,501,505,519,530,534,537,652],[97,98,17],"h1",{"id":99},"introduction",[101,102,103,104,111],"p",{},"Quayel Gateway is a high-performance API gateway built on ",[105,106,110],"a",{"href":107,"rel":108},"https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fpingora",[109],"nofollow","Pingora"," — the Rust framework behind Cloudflare's edge. It provides embedded IP intelligence, firewall, rate limiting, edge caching, load balancing, and on-demand TLS, all configured through a single JSON file.",[113,114,119],"pre",{"className":115,"code":116,"language":117,"meta":118,"style":118},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"gateway_id\": \"gw-prod-01\",\n  \"gateway_name\": \"production\",\n  \"server_name\": \"api.example.com\",\n  \"config_version\": \"2026-01-01-001\",\n  \"listen\": { \"http\": \"0.0.0.0:8080\" },\n  \"plugins\": {\n    \"ip_intel\": { \"enabled\": true },\n    \"load_balancer\": { \"enabled\": true, \"load_balancers\": [ \u002F* ... *\u002F ] },\n    \"logging\": { \"enabled\": true, \"mode\": \"file\", \"file\": { \"path\": \"\u002Fvar\u002Flog\u002Fquayel\u002Faccess.jsonl\" } }\n  }\n}\n","json","",[120,121,122,131,159,180,201,222,257,272,302,348,424,430],"code",{"__ignoreMap":118},[123,124,127],"span",{"class":125,"line":126},"line",1,[123,128,130],{"class":129},"sMK4o","{\n",[123,132,134,137,141,144,147,150,154,156],{"class":125,"line":133},2,[123,135,136],{"class":129},"  \"",[123,138,140],{"class":139},"spNyl","gateway_id",[123,142,143],{"class":129},"\"",[123,145,146],{"class":129},":",[123,148,149],{"class":129}," \"",[123,151,153],{"class":152},"sfazB","gw-prod-01",[123,155,143],{"class":129},[123,157,158],{"class":129},",\n",[123,160,162,164,167,169,171,173,176,178],{"class":125,"line":161},3,[123,163,136],{"class":129},[123,165,166],{"class":139},"gateway_name",[123,168,143],{"class":129},[123,170,146],{"class":129},[123,172,149],{"class":129},[123,174,175],{"class":152},"production",[123,177,143],{"class":129},[123,179,158],{"class":129},[123,181,183,185,188,190,192,194,197,199],{"class":125,"line":182},4,[123,184,136],{"class":129},[123,186,187],{"class":139},"server_name",[123,189,143],{"class":129},[123,191,146],{"class":129},[123,193,149],{"class":129},[123,195,196],{"class":152},"api.example.com",[123,198,143],{"class":129},[123,200,158],{"class":129},[123,202,204,206,209,211,213,215,218,220],{"class":125,"line":203},5,[123,205,136],{"class":129},[123,207,208],{"class":139},"config_version",[123,210,143],{"class":129},[123,212,146],{"class":129},[123,214,149],{"class":129},[123,216,217],{"class":152},"2026-01-01-001",[123,219,143],{"class":129},[123,221,158],{"class":129},[123,223,225,227,230,232,234,237,239,243,245,247,249,252,254],{"class":125,"line":224},6,[123,226,136],{"class":129},[123,228,229],{"class":139},"listen",[123,231,143],{"class":129},[123,233,146],{"class":129},[123,235,236],{"class":129}," {",[123,238,149],{"class":129},[123,240,242],{"class":241},"sBMFI","http",[123,244,143],{"class":129},[123,246,146],{"class":129},[123,248,149],{"class":129},[123,250,251],{"class":152},"0.0.0.0:8080",[123,253,143],{"class":129},[123,255,256],{"class":129}," },\n",[123,258,260,262,265,267,269],{"class":125,"line":259},7,[123,261,136],{"class":129},[123,263,264],{"class":139},"plugins",[123,266,143],{"class":129},[123,268,146],{"class":129},[123,270,271],{"class":129}," {\n",[123,273,275,278,281,283,285,287,289,293,295,297,300],{"class":125,"line":274},8,[123,276,277],{"class":129},"    \"",[123,279,280],{"class":241},"ip_intel",[123,282,143],{"class":129},[123,284,146],{"class":129},[123,286,236],{"class":129},[123,288,149],{"class":129},[123,290,292],{"class":291},"sbssI","enabled",[123,294,143],{"class":129},[123,296,146],{"class":129},[123,298,299],{"class":129}," true",[123,301,256],{"class":129},[123,303,305,307,310,312,314,316,318,320,322,324,327,329,332,334,336,339,343,346],{"class":125,"line":304},9,[123,306,277],{"class":129},[123,308,309],{"class":241},"load_balancer",[123,311,143],{"class":129},[123,313,146],{"class":129},[123,315,236],{"class":129},[123,317,149],{"class":129},[123,319,292],{"class":291},[123,321,143],{"class":129},[123,323,146],{"class":129},[123,325,326],{"class":129}," true,",[123,328,149],{"class":129},[123,330,331],{"class":291},"load_balancers",[123,333,143],{"class":129},[123,335,146],{"class":129},[123,337,338],{"class":129}," [",[123,340,342],{"class":341},"sHwdD"," \u002F* ... *\u002F",[123,344,345],{"class":129}," ]",[123,347,256],{"class":129},[123,349,351,353,356,358,360,362,364,366,368,370,372,374,377,379,381,383,386,388,391,393,395,397,399,401,403,407,409,411,413,416,418,421],{"class":125,"line":350},10,[123,352,277],{"class":129},[123,354,355],{"class":241},"logging",[123,357,143],{"class":129},[123,359,146],{"class":129},[123,361,236],{"class":129},[123,363,149],{"class":129},[123,365,292],{"class":291},[123,367,143],{"class":129},[123,369,146],{"class":129},[123,371,326],{"class":129},[123,373,149],{"class":129},[123,375,376],{"class":291},"mode",[123,378,143],{"class":129},[123,380,146],{"class":129},[123,382,149],{"class":129},[123,384,385],{"class":152},"file",[123,387,143],{"class":129},[123,389,390],{"class":129},",",[123,392,149],{"class":129},[123,394,385],{"class":291},[123,396,143],{"class":129},[123,398,146],{"class":129},[123,400,236],{"class":129},[123,402,149],{"class":129},[123,404,406],{"class":405},"swJcz","path",[123,408,143],{"class":129},[123,410,146],{"class":129},[123,412,149],{"class":129},[123,414,415],{"class":152},"\u002Fvar\u002Flog\u002Fquayel\u002Faccess.jsonl",[123,417,143],{"class":129},[123,419,420],{"class":129}," }",[123,422,423],{"class":129}," }\n",[123,425,427],{"class":125,"line":426},11,[123,428,429],{"class":129},"  }\n",[123,431,433],{"class":125,"line":432},12,[123,434,435],{"class":129},"}\n",[101,437,438],{},"One JSON config file, one binary, zero external dependencies.",[440,441,443],"h2",{"id":442},"what-makes-quayel-different","What makes Quayel different",[445,446,447,453,458,462,466,471],"card-group",{},[448,449,452],"card",{"icon":450,"title":451},"i-lucide-package-check","Zero external dependencies","All IP intelligence data (~140 MB of MMDB + CIDR lists) is compiled directly into the binary. No Redis, no external databases, no downloads on startup.",[448,454,457],{"icon":455,"title":456},"i-lucide-binary","Single binary deployment","Copy one file, write one JSON config, start serving. ~29 MB runtime RSS.",[448,459,461],{"icon":67,"title":460},"On-demand TLS","Automatic certificate provisioning via Let's Encrypt ACME. Certs are obtained on first request, not on startup. All state in memory for O(1) lookups.",[448,463,465],{"icon":42,"title":464},"Embedded IP intelligence","Every request is enriched with country, ASN, VPN\u002FTor\u002Fdatacenter\u002Fproxy detection, risk scoring, and network classification — all in ~5μs (cached).",[448,467,470],{"icon":468,"title":469},"i-lucide-list-ordered","Deterministic plugin pipeline","Plugins execute in a fixed order: IP Intel → Firewall → Rate Limit → Load Balancer → Cache → Logging. Any plugin can short-circuit the pipeline.",[448,472,475],{"icon":473,"title":474},"i-lucide-scroll-text","Structured JSONL logging","Every request produces a single JSON line with full context: IP intel, firewall decisions, rate limit state, cache status, load balancer target, and per-phase timing.",[440,477,479],{"id":478},"how-a-request-flows","How a request flows",[113,481,486],{"className":482,"code":484,"language":485},[483],"language-text","Request In\n   │\n   ▼\nIP Intelligence ──→ Firewall ──→ Rate Limit ──→ Load Balancer ──→ Cache ──→ Upstream\n   │                  │             │                │              │\n   │  enrich:         │  allow\u002F     │  throttle\u002F     │  select      │  HIT → respond\n   │  country, ASN,   │  block\u002F     │  429           │  upstream    │  MISS → fetch\n   │  VPN, Tor, risk  │  redirect   │                │  target      │  REVALIDATING\n   │                  │             │                │              │  → serve stale\n   ▼                  ▼             ▼                ▼              ▼\n                    Logging (JSONL access log, one line per request)\n","text",[120,487,484],{"__ignoreMap":118},[101,489,490,491,495,496,500],{},"Any plugin can return a response and short-circuit the remaining pipeline. Rules ",[492,493,494],"em",{},"inside"," a plugin run in array order — ",[497,498,499],"strong",{},"first match wins",".",[440,502,504],{"id":503},"where-to-go-next","Where to go next",[445,506,507,510,513,516],{},[448,508,509],{"icon":23,"title":20,"to":21},"Run Quayel Gateway with Docker in minutes. APT and direct downloads coming soon.",[448,511,512],{"icon":28,"title":25,"to":26},"How the repository is organized and where the gateway keeps its files at runtime.",[448,514,515],{"icon":31,"title":30,"to":32},"IP intelligence, firewall, rate limiting, cache, load balancing, and auto-SSL.",[448,517,518],{"icon":70,"title":69,"to":71},"Configure the gateway with an AI agent: skill package, installation, and the full agent guide.",[520,521,522,523,526,527,529],"tip",{},"Building configs with an AI agent? Install the ",[105,524,525],{"href":82},"Quayel Gateway skill"," or point the agent at the ",[105,528,86],{"href":87}," — a machine-oriented contract with the exact schema, enums, defaults, and a validation loop.",[440,531,533],{"id":532},"deep-dives","Deep dives",[101,535,536],{},"Full reference material lives alongside these docs:",[538,539,540,553],"table",{},[541,542,543],"thead",{},[544,545,546,550],"tr",{},[547,548,549],"th",{},"Page",[547,551,552],{},"What it covers",[554,555,556,568,583,594,605,616,627,638],"tbody",{},[544,557,558,565],{},[559,560,561],"td",{},[105,562,564],{"href":563},"\u002Fquayel-gateway\u002Farchitecture","Architecture",[559,566,567],{},"System design, request context, embedded data, concurrency model",[544,569,570,576],{},[559,571,572],{},[105,573,575],{"href":574},"\u002Fquayel-gateway\u002Fconfiguration","Configuration",[559,577,578,579,582],{},"Every ",[120,580,581],{},"config.json"," field, with a complete example",[544,584,585,591],{},[559,586,587],{},[105,588,590],{"href":589},"\u002Fquayel-gateway\u002Fconditions","Conditions",[559,592,593],{},"The matching language shared by firewall, rate limit, cache, and LB rules",[544,595,596,602],{},[559,597,598],{},[105,599,601],{"href":600},"\u002Fquayel-gateway\u002Fdata-sources","Data Sources",[559,603,604],{},"Embedded datasets, sources, licenses, and the update process",[544,606,607,613],{},[559,608,609],{},[105,610,612],{"href":611},"\u002Fquayel-gateway\u002Flogging","Logging",[559,614,615],{},"JSONL access-log format and every field",[544,617,618,624],{},[559,619,620],{},[105,621,623],{"href":622},"\u002Fquayel-gateway\u002Ftesting","Testing & Validation",[559,625,626],{},"The all-rules config and 57-assertion live test suite",[544,628,629,635],{},[559,630,631],{},[105,632,634],{"href":633},"\u002Fquayel-gateway\u002Fapi-reference","API Reference",[559,636,637],{},"Upstream headers, response bodies, and variables",[544,639,640,646],{},[559,641,642],{},[105,643,645],{"href":644},"\u002Fquayel-gateway\u002Fversioning","Versioning",[559,647,648,649,651],{},"Releases, ",[120,650,208],{},", dataset vintages, and docs versions",[653,654,655],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":118,"searchDepth":133,"depth":133,"links":657},[658,659,660,661],{"id":442,"depth":133,"text":443},{"id":478,"depth":133,"text":479},{"id":503,"depth":133,"text":504},{"id":532,"depth":133,"text":533},"What Quayel Gateway is, how it works, and where to start.","md",null,{},{"icon":18},{"title":17,"description":662},"KkaRk6E4cDDzC6tvjf2ZW1HPT1wo3DHnO56NJ1yzMBw",[664,670],{"title":20,"path":21,"stem":22,"description":671,"icon":23,"children":-1},"Run Quayel Gateway with Docker in minutes. APT packages and direct downloads are coming soon.",1791649766343]