[{"data":1,"prerenderedAt":987},["ShallowReactive",2],{"navigation_docs":3,"-quayel-gateway-getting-started-installation":91,"-quayel-gateway-getting-started-installation-surround":982},[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":20,"body":93,"description":975,"extension":976,"links":977,"meta":978,"navigation":979,"path":21,"seo":980,"stem":22,"__hash__":981},"docs\u002Fquayel-gateway\u002F01.getting-started\u002F1.installation.md",{"type":94,"value":95,"toc":960},"minimark",[96,100,104,112,117,127,355,359,367,551,572,587,591,639,646,650,664,679,683,723,734,738,796,800,856,862,870,874,956],[97,98,20],"h1",{"id":99},"installation",[101,102,103],"p",{},"Quayel Gateway ships as a Docker image with every IP-intelligence dataset embedded and a ready-to-run demo config. There is nothing else to install — no Redis, no database, no sidecars.",[105,106,107,111],"note",{},[108,109,110],"strong",{},"APT packages and direct binary downloads are coming soon."," Docker is the supported way to run Quayel Gateway today.",[113,114,116],"h2",{"id":115},"docker","Docker",[101,118,119,120,126],{},"Prerequisites: ",[121,122,116],"a",{"href":123,"rel":124},"https:\u002F\u002Fdocs.docker.com\u002Fget-docker\u002F",[125],"nofollow"," 20 or newer.",[128,129,130,135,174,185,189,246,266,270,325,336,340],"steps",{},[131,132,134],"h3",{"id":133},"_1-run-the-demo","1. Run the demo",[136,137,142],"pre",{"className":138,"code":139,"language":140,"meta":141,"style":141},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","docker run --rm -p 8080:8080 -p 8443:8443 quayel\u002Fquayel-gateway\n","bash","",[143,144,145],"code",{"__ignoreMap":141},[146,147,150,153,157,160,163,166,168,171],"span",{"class":148,"line":149},"line",1,[146,151,115],{"class":152},"sBMFI",[146,154,156],{"class":155},"sfazB"," run",[146,158,159],{"class":155}," --rm",[146,161,162],{"class":155}," -p",[146,164,165],{"class":155}," 8080:8080",[146,167,162],{"class":155},[146,169,170],{"class":155}," 8443:8443",[146,172,173],{"class":155}," quayel\u002Fquayel-gateway\n",[101,175,176,177,180,181,184],{},"The image starts with a full-featured demo config listening on ",[143,178,179],{},"8080"," (HTTP) and ",[143,182,183],{},"8443"," (HTTPS).",[131,186,188],{"id":187},"_2-run-with-your-own-config","2. Run with your own config",[136,190,192],{"className":138,"code":191,"language":140,"meta":141,"style":141},"docker run --rm -p 8080:8080 -p 8443:8443 \\\n  -v $PWD\u002Fconfig.json:\u002Fetc\u002Fquayel-gateway\u002Fconfig.json:ro \\\n  -v $PWD\u002Flogs:\u002Fvar\u002Flog\u002Fquayel \\\n  quayel\u002Fquayel-gateway\n",[143,193,194,214,228,240],{"__ignoreMap":141},[146,195,196,198,200,202,204,206,208,210],{"class":148,"line":149},[146,197,115],{"class":152},[146,199,156],{"class":155},[146,201,159],{"class":155},[146,203,162],{"class":155},[146,205,165],{"class":155},[146,207,162],{"class":155},[146,209,170],{"class":155},[146,211,213],{"class":212},"sTEyZ"," \\\n",[146,215,217,220,223,226],{"class":148,"line":216},2,[146,218,219],{"class":155},"  -v",[146,221,222],{"class":212}," $PWD",[146,224,225],{"class":155},"\u002Fconfig.json:\u002Fetc\u002Fquayel-gateway\u002Fconfig.json:ro",[146,227,213],{"class":212},[146,229,231,233,235,238],{"class":148,"line":230},3,[146,232,219],{"class":155},[146,234,222],{"class":212},[146,236,237],{"class":155},"\u002Flogs:\u002Fvar\u002Flog\u002Fquayel",[146,239,213],{"class":212},[146,241,243],{"class":148,"line":242},4,[146,244,245],{"class":155},"  quayel\u002Fquayel-gateway\n",[101,247,248,249,252,253,256,257,260,261,265],{},"The gateway reads ",[143,250,251],{},"\u002Fetc\u002Fquayel-gateway\u002Fconfig.json"," and writes access logs to ",[143,254,255],{},"\u002Fvar\u002Flog\u002Fquayel\u002Faccess.jsonl",". Any valid ",[143,258,259],{},"config.json"," works — start from the demo config or the ",[121,262,264],{"href":263},"#minimal-config","minimal config"," below.",[131,267,269],{"id":268},"_3-test-it","3. Test it",[136,271,273],{"className":138,"code":272,"language":140,"meta":141,"style":141},"# The gateway answers immediately (JSON error until a real backend is configured)\ncurl -i http:\u002F\u002Flocalhost:8080\u002F\n\n# Watch the structured access log\ntail -f logs\u002Faccess.jsonl | jq .\n",[143,274,275,281,292,298,303],{"__ignoreMap":141},[146,276,277],{"class":148,"line":149},[146,278,280],{"class":279},"sHwdD","# The gateway answers immediately (JSON error until a real backend is configured)\n",[146,282,283,286,289],{"class":148,"line":216},[146,284,285],{"class":152},"curl",[146,287,288],{"class":155}," -i",[146,290,291],{"class":155}," http:\u002F\u002Flocalhost:8080\u002F\n",[146,293,294],{"class":148,"line":230},[146,295,297],{"emptyLinePlaceholder":296},true,"\n",[146,299,300],{"class":148,"line":242},[146,301,302],{"class":279},"# Watch the structured access log\n",[146,304,306,309,312,315,319,322],{"class":148,"line":305},5,[146,307,308],{"class":152},"tail",[146,310,311],{"class":155}," -f",[146,313,314],{"class":155}," logs\u002Faccess.jsonl",[146,316,318],{"class":317},"sMK4o"," |",[146,320,321],{"class":152}," jq",[146,323,324],{"class":155}," .\n",[101,326,327,328,331,332,335],{},"The demo's load balancer points at placeholder IPs, so upstream requests return ",[143,329,330],{},"502"," until you set real ",[143,333,334],{},"targets",". The gateway itself is up: every request is logged with full IP-intel context.",[131,337,339],{"id":338},"_4-go-to-production","4. Go to production",[101,341,342,343,346,347,350,351,354],{},"Use the bundled ",[143,344,345],{},"docker-compose.yml"," (ports ",[143,348,349],{},"80","\u002F",[143,352,353],{},"443",", persistent certificates, graceful shutdown) — see below.",[113,356,358],{"id":357},"docker-compose","Docker Compose",[101,360,361,362,366],{},"The repository ships an SSL-ready ",[121,363,345],{"href":364,"rel":365},"https:\u002F\u002Fgithub.com\u002Fquayel\u002FQuayel-Gateway\u002Fblob\u002Fmain\u002Fdocker-compose.yml",[125],":",[136,368,372],{"className":369,"code":370,"language":371,"meta":141,"style":141},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  gateway:\n    build: .\n    image: quayel\u002Fquayel-gateway:latest\n    container_name: quayel-gateway\n    restart: unless-stopped\n    ports:\n      - \"80:8080\"     # HTTP: ACME HTTP-01 challenges + plain HTTP\n      - \"443:8443\"    # HTTPS: SNI cert resolver \u002F Auto-SSL\n    volumes:\n      - quayel-certs:\u002Fvar\u002Flib\u002Fquayel\u002Fcerts\n      # - .\u002Fconfig.json:\u002Fetc\u002Fquayel-gateway\u002Fconfig.json:ro\n      # - .\u002Flogs:\u002Fvar\u002Flog\u002Fquayel\n    environment:\n      RUST_LOG: ${RUST_LOG:-info}\n    stop_grace_period: 15s\n\nvolumes:\n  quayel-certs:\n","yaml",[143,373,374,383,390,400,410,420,431,439,457,472,480,488,494,500,508,519,530,535,543],{"__ignoreMap":141},[146,375,376,380],{"class":148,"line":149},[146,377,379],{"class":378},"swJcz","services",[146,381,382],{"class":317},":\n",[146,384,385,388],{"class":148,"line":216},[146,386,387],{"class":378},"  gateway",[146,389,382],{"class":317},[146,391,392,395,397],{"class":148,"line":230},[146,393,394],{"class":378},"    build",[146,396,366],{"class":317},[146,398,324],{"class":399},"sbssI",[146,401,402,405,407],{"class":148,"line":242},[146,403,404],{"class":378},"    image",[146,406,366],{"class":317},[146,408,409],{"class":155}," quayel\u002Fquayel-gateway:latest\n",[146,411,412,415,417],{"class":148,"line":305},[146,413,414],{"class":378},"    container_name",[146,416,366],{"class":317},[146,418,419],{"class":155}," quayel-gateway\n",[146,421,423,426,428],{"class":148,"line":422},6,[146,424,425],{"class":378},"    restart",[146,427,366],{"class":317},[146,429,430],{"class":155}," unless-stopped\n",[146,432,434,437],{"class":148,"line":433},7,[146,435,436],{"class":378},"    ports",[146,438,382],{"class":317},[146,440,442,445,448,451,454],{"class":148,"line":441},8,[146,443,444],{"class":317},"      -",[146,446,447],{"class":317}," \"",[146,449,450],{"class":155},"80:8080",[146,452,453],{"class":317},"\"",[146,455,456],{"class":279},"     # HTTP: ACME HTTP-01 challenges + plain HTTP\n",[146,458,460,462,464,467,469],{"class":148,"line":459},9,[146,461,444],{"class":317},[146,463,447],{"class":317},[146,465,466],{"class":155},"443:8443",[146,468,453],{"class":317},[146,470,471],{"class":279},"    # HTTPS: SNI cert resolver \u002F Auto-SSL\n",[146,473,475,478],{"class":148,"line":474},10,[146,476,477],{"class":378},"    volumes",[146,479,382],{"class":317},[146,481,483,485],{"class":148,"line":482},11,[146,484,444],{"class":317},[146,486,487],{"class":155}," quayel-certs:\u002Fvar\u002Flib\u002Fquayel\u002Fcerts\n",[146,489,491],{"class":148,"line":490},12,[146,492,493],{"class":279},"      # - .\u002Fconfig.json:\u002Fetc\u002Fquayel-gateway\u002Fconfig.json:ro\n",[146,495,497],{"class":148,"line":496},13,[146,498,499],{"class":279},"      # - .\u002Flogs:\u002Fvar\u002Flog\u002Fquayel\n",[146,501,503,506],{"class":148,"line":502},14,[146,504,505],{"class":378},"    environment",[146,507,382],{"class":317},[146,509,511,514,516],{"class":148,"line":510},15,[146,512,513],{"class":378},"      RUST_LOG",[146,515,366],{"class":317},[146,517,518],{"class":155}," ${RUST_LOG:-info}\n",[146,520,522,525,527],{"class":148,"line":521},16,[146,523,524],{"class":378},"    stop_grace_period",[146,526,366],{"class":317},[146,528,529],{"class":155}," 15s\n",[146,531,533],{"class":148,"line":532},17,[146,534,297],{"emptyLinePlaceholder":296},[146,536,538,541],{"class":148,"line":537},18,[146,539,540],{"class":378},"volumes",[146,542,382],{"class":317},[146,544,546,549],{"class":148,"line":545},19,[146,547,548],{"class":378},"  quayel-certs",[146,550,382],{"class":317},[136,552,554],{"className":138,"code":553,"language":140,"meta":141,"style":141},"docker compose up -d --build\n",[143,555,556],{"__ignoreMap":141},[146,557,558,560,563,566,569],{"class":148,"line":149},[146,559,115],{"class":152},[146,561,562],{"class":155}," compose",[146,564,565],{"class":155}," up",[146,567,568],{"class":155}," -d",[146,570,571],{"class":155}," --build\n",[101,573,574,575,578,579,582,583,586],{},"To use your own config, put it at ",[143,576,577],{},".\u002Fconfig.json"," and uncomment the config mount. Keep ",[143,580,581],{},"auto_ssl.cert_storage_path"," at ",[143,584,585],{},"\u002Fvar\u002Flib\u002Fquayel\u002Fcerts"," so certificates land in the persistent volume.",[113,588,590],{"id":589},"auto-ssl-in-docker","Auto-SSL in Docker",[592,593,594,608,629],"ul",{},[595,596,597,600,601,604,605,607],"li",{},[108,598,599],{},"Persist certificates"," — the ACME account key and issued certs live in ",[143,602,603],{},"cert_storage_path"," (",[143,606,585],{}," in the image). Mount a volume over it, otherwise every container start re-issues certificates and hits Let's Encrypt rate limits.",[595,609,610,613,614,616,617,619,620,350,622,624,625,628],{},[108,611,612],{},"Ports"," — ACME HTTP-01 validation needs port 80 reachable from the internet. Map ",[143,615,450],{}," and ",[143,618,466],{}," (as in the compose file) or bind ",[143,621,349],{},[143,623,353],{}," directly in ",[143,626,627],{},"listen",".",[595,630,631,634,635,638],{},[108,632,633],{},"Clean shutdown"," — the gateway drains in-flight requests on SIGTERM (5s grace + 5s drain) and exits well inside Docker's 10s stop timeout; the compose file sets ",[143,636,637],{},"stop_grace_period: 15s"," as headroom.",[101,640,641,642,645],{},"See the ",[121,643,644],{"href":65},"Auto-SSL plugin"," for full configuration docs.",[113,647,649],{"id":648},"image-tags-and-dataset-refresh","Image tags and dataset refresh",[101,651,652,653,616,656,659,660,663],{},"Images are tagged ",[143,654,655],{},"quayel\u002Fquayel-gateway:latest",[143,657,658],{},"quayel\u002Fquayel-gateway:\u003Cversion>"," (for example ",[143,661,662],{},"quayel\u002Fquayel-gateway:0.1.0",").",[101,665,666,667,670,671,674,675,678],{},"The image is a multi-stage build: ",[143,668,669],{},"rust:1-bookworm"," compiles the release binary with all datasets embedded, ",[143,672,673],{},"debian:bookworm-slim"," runs it. ",[108,676,677],{},"Rebuilding the image is how you refresh the embedded IP-intelligence data"," — do it monthly for current DB-IP snapshots.",[113,680,682],{"id":681},"build-the-image-yourself","Build the image yourself",[136,684,686],{"className":138,"code":685,"language":140,"meta":141,"style":141},"git clone https:\u002F\u002Fgithub.com\u002Fquayel\u002FQuayel-Gateway.git\ncd Quayel-Gateway\ndocker build -t quayel\u002Fquayel-gateway .\n",[143,687,688,699,708],{"__ignoreMap":141},[146,689,690,693,696],{"class":148,"line":149},[146,691,692],{"class":152},"git",[146,694,695],{"class":155}," clone",[146,697,698],{"class":155}," https:\u002F\u002Fgithub.com\u002Fquayel\u002FQuayel-Gateway.git\n",[146,700,701,705],{"class":148,"line":216},[146,702,704],{"class":703},"s2Zo4","cd",[146,706,707],{"class":155}," Quayel-Gateway\n",[146,709,710,712,715,718,721],{"class":148,"line":230},[146,711,115],{"class":152},[146,713,714],{"class":155}," build",[146,716,717],{"class":155}," -t",[146,719,720],{"class":155}," quayel\u002Fquayel-gateway",[146,722,324],{"class":155},[101,724,725,726,729,730,733],{},"If ",[143,727,728],{},"src\u002Fdata\u002F*.mmdb"," is missing at build time the builder runs ",[143,731,732],{},"setup.sh --data-only"," automatically and downloads the latest datasets.",[113,735,737],{"id":736},"coming-soon-apt-and-direct-download","Coming soon: APT and direct download",[739,740,741,757],"table",{},[742,743,744],"thead",{},[745,746,747,751,754],"tr",{},[748,749,750],"th",{},"Method",[748,752,753],{},"Command",[748,755,756],{},"Status",[758,759,760,773,786],"tbody",{},[745,761,762,765,770],{},[763,764,116],"td",{},[763,766,767],{},[143,768,769],{},"docker run quayel\u002Fquayel-gateway",[763,771,772],{},"✅ Available now",[745,774,775,778,783],{},[763,776,777],{},"APT package",[763,779,780],{},[143,781,782],{},"apt install quayel-gateway",[763,784,785],{},"🚧 Coming soon",[745,787,788,791,794],{},[763,789,790],{},"Direct download",[763,792,793],{},"standalone Linux x86_64 binary",[763,795,785],{},[113,797,799],{"id":798},"build-from-source","Build from source",[136,801,803],{"className":138,"code":802,"language":140,"meta":141,"style":141},"git clone https:\u002F\u002Fgithub.com\u002Fquayel\u002FQuayel-Gateway.git\ncd Quayel-Gateway\n\n.\u002Fsetup.sh                    # datasets into src\u002Fdata\u002F + cargo packages\ncargo build --release         # data is embedded into the binary\n\n.\u002Ftarget\u002Frelease\u002Fquayel-gateway config.demo.json\n",[143,804,805,813,819,823,831,844,848],{"__ignoreMap":141},[146,806,807,809,811],{"class":148,"line":149},[146,808,692],{"class":152},[146,810,695],{"class":155},[146,812,698],{"class":155},[146,814,815,817],{"class":148,"line":216},[146,816,704],{"class":703},[146,818,707],{"class":155},[146,820,821],{"class":148,"line":230},[146,822,297],{"emptyLinePlaceholder":296},[146,824,825,828],{"class":148,"line":242},[146,826,827],{"class":152},".\u002Fsetup.sh",[146,829,830],{"class":279},"                    # datasets into src\u002Fdata\u002F + cargo packages\n",[146,832,833,836,838,841],{"class":148,"line":305},[146,834,835],{"class":152},"cargo",[146,837,714],{"class":155},[146,839,840],{"class":155}," --release",[146,842,843],{"class":279},"         # data is embedded into the binary\n",[146,845,846],{"class":148,"line":422},[146,847,297],{"emptyLinePlaceholder":296},[146,849,850,853],{"class":148,"line":433},[146,851,852],{"class":152},".\u002Ftarget\u002Frelease\u002Fquayel-gateway",[146,854,855],{"class":155}," config.demo.json\n",[101,857,858,859,861],{},"See ",[121,860,25],{"href":26}," for what each part of the repository does.",[105,863,864,865,869],{},"The build compiles ~140 MB of IP intelligence data (MMDB databases + CIDR lists) directly into the binary. See ",[121,866,868],{"href":867},"\u002Fquayel-gateway\u002Fdata-sources","Data Sources"," for what is embedded and how to refresh it.",[113,871,873],{"id":872},"system-requirements","System requirements",[739,875,876,889],{},[742,877,878],{},[745,879,880,883,886],{},[748,881,882],{},"Resource",[748,884,885],{},"Minimum",[748,887,888],{},"Recommended",[758,890,891,902,913,924,935,946],{},[745,892,893,896,899],{},[763,894,895],{},"CPU",[763,897,898],{},"1 core",[763,900,901],{},"2+ cores",[745,903,904,907,910],{},[763,905,906],{},"RAM",[763,908,909],{},"64 MB",[763,911,912],{},"128 MB",[745,914,915,918,921],{},[763,916,917],{},"Disk",[763,919,920],{},"200 MB",[763,922,923],{},"500 MB (for logs)",[745,925,926,929,932],{},[763,927,928],{},"Platform",[763,930,931],{},"Linux x86_64 (Ubuntu 22.04+)",[763,933,934],{},"—",[745,936,937,940,943],{},[763,938,939],{},"Binary size",[763,941,942],{},"~153 MB",[763,944,945],{},"— (includes embedded data)",[745,947,948,951,954],{},[763,949,950],{},"Runtime RSS",[763,952,953],{},"~29 MB",[763,955,934],{},[957,958,959],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":141,"searchDepth":216,"depth":216,"links":961},[962,968,969,970,971,972,973,974],{"id":115,"depth":216,"text":116,"children":963},[964,965,966,967],{"id":133,"depth":230,"text":134},{"id":187,"depth":230,"text":188},{"id":268,"depth":230,"text":269},{"id":338,"depth":230,"text":339},{"id":357,"depth":216,"text":358},{"id":589,"depth":216,"text":590},{"id":648,"depth":216,"text":649},{"id":681,"depth":216,"text":682},{"id":736,"depth":216,"text":737},{"id":798,"depth":216,"text":799},{"id":872,"depth":216,"text":873},"Run Quayel Gateway with Docker in minutes. APT packages and direct downloads are coming soon.","md",null,{},{"icon":23},{"title":20,"description":975},"Cz1zW0yJhgTxp-FsfTEbdneLG-gKEK3SF7jD0sjiOGY",[983,985],{"title":17,"path":13,"stem":14,"description":984,"icon":18,"children":-1},"What Quayel Gateway is, how it works, and where to start.",{"title":25,"path":26,"stem":27,"description":986,"icon":28,"children":-1},"How the Quayel Gateway repository is organized and where the gateway keeps its files at runtime.",1791649767383]