[{"data":1,"prerenderedAt":1231},["ShallowReactive",2],{"navigation":3,"\u002Freference\u002Fcaddy":65,"\u002Freference\u002Fcaddy-surround":1226},[4,25,50],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Building FrankenPHP","\u002Fgetting-started\u002Fbuilding-frankenphp","1.getting-started\u002F3.building-frankenphp","i-lucide-hammer",{"title":26,"icon":6,"path":27,"stem":28,"children":29,"page":6},"Extensions","\u002Fextensions","2.extensions",[30,35,40,45],{"title":31,"path":32,"stem":33,"icon":34},"Queue","\u002Fextensions\u002Fqueue","2.extensions\u002F1.queue","i-lucide-list-checks",{"title":36,"path":37,"stem":38,"icon":39},"Scheduler","\u002Fextensions\u002Fscheduler","2.extensions\u002F2.scheduler","i-lucide-calendar-clock",{"title":41,"path":42,"stem":43,"icon":44},"Pogo","\u002Fextensions\u002Fpogo","2.extensions\u002F3.pogo","i-lucide-split",{"title":46,"path":47,"stem":48,"icon":49},"WebSocket","\u002Fextensions\u002Fwebsocket","2.extensions\u002F4.websocket","i-lucide-radio",{"title":51,"icon":6,"path":52,"stem":53,"children":54,"page":6},"Reference","\u002Freference","3.reference",[55,60],{"title":56,"path":57,"stem":58,"icon":59},"Caddy Reference","\u002Freference\u002Fcaddy","3.reference\u002F1.caddy","i-lucide-settings-2",{"title":61,"path":62,"stem":63,"icon":64},"PHP API","\u002Freference\u002Fphp-api","3.reference\u002F2.php-api","i-lucide-file-code-2",{"id":66,"title":56,"body":67,"description":1219,"extension":1220,"links":1221,"meta":1222,"navigation":1223,"path":57,"seo":1224,"stem":58,"__hash__":1225},"docs\u002F3.reference\u002F1.caddy.md",{"type":68,"value":69,"toc":1213},"minimark",[70,74,82,149,334,337,423,426,470,473,478,525,617,619,623,669,741,744,754,797,800,858,861,1209],[71,72,31],"h2",{"id":73},"queue",[75,76,77,81],"p",{},[78,79,80],"code",{},"pogo_queue"," is a global Caddy option.",[83,84,90],"pre",{"className":85,"code":86,"filename":87,"language":88,"meta":89,"style":89},"language-caddyfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  pogo_queue {\n    backend redis {\n      url {$POGO_REDIS_URL}\n    }\n\n    worker public\u002Fqueue-worker.php\n  }\n}\n","Caddyfile","caddyfile","",[78,91,92,100,106,112,118,124,131,137,143],{"__ignoreMap":89},[93,94,97],"span",{"class":95,"line":96},"line",1,[93,98,99],{},"{\n",[93,101,103],{"class":95,"line":102},2,[93,104,105],{},"  pogo_queue {\n",[93,107,109],{"class":95,"line":108},3,[93,110,111],{},"    backend redis {\n",[93,113,115],{"class":95,"line":114},4,[93,116,117],{},"      url {$POGO_REDIS_URL}\n",[93,119,121],{"class":95,"line":120},5,[93,122,123],{},"    }\n",[93,125,127],{"class":95,"line":126},6,[93,128,130],{"emptyLinePlaceholder":129},true,"\n",[93,132,134],{"class":95,"line":133},7,[93,135,136],{},"    worker public\u002Fqueue-worker.php\n",[93,138,140],{"class":95,"line":139},8,[93,141,142],{},"  }\n",[93,144,146],{"class":95,"line":145},9,[93,147,148],{},"}\n",[150,151,152,168],"table",{},[153,154,155],"thead",{},[156,157,158,162,165],"tr",{},[159,160,161],"th",{},"Directive",[159,163,164],{},"Default",[159,166,167],{},"Description",[169,170,171,187,200,215,230,245,259,274,289,304,319],"tbody",{},[156,172,173,179,184],{},[174,175,176],"td",{},[78,177,178],{},"backend redis",[174,180,181],{},[78,182,183],{},"redis",[174,185,186],{},"Durable Redis Streams backend.",[156,188,189,194,197],{},[174,190,191],{},[78,192,193],{},"backend memory",[174,195,196],{},"none",[174,198,199],{},"Local demo backend only.",[156,201,202,207,212],{},[174,203,204],{},[78,205,206],{},"worker",[174,208,209],{},[78,210,211],{},"queue-worker.php",[174,213,214],{},"PHP worker script.",[156,216,217,222,227],{},[174,218,219],{},[78,220,221],{},"queues",[174,223,224],{},[78,225,226],{},"default",[174,228,229],{},"Comma or space separated queue names.",[156,231,232,237,242],{},[174,233,234],{},[78,235,236],{},"concurrency",[174,238,239],{},[78,240,241],{},"1",[174,243,244],{},"Number of queue reserve loops.",[156,246,247,252,256],{},[174,248,249],{},[78,250,251],{},"worker_threads",[174,253,254],{},[78,255,236],{},[174,257,258],{},"FrankenPHP worker thread count.",[156,260,261,266,271],{},[174,262,263],{},[78,264,265],{},"max_payload_bytes",[174,267,268],{},[78,269,270],{},"1048576",[174,272,273],{},"Maximum job payload size.",[156,275,276,281,286],{},[174,277,278],{},[78,279,280],{},"visibility_timeout",[174,282,283],{},[78,284,285],{},"90s",[174,287,288],{},"Time before a pending job can be reclaimed.",[156,290,291,296,301],{},[174,292,293],{},[78,294,295],{},"reserve_timeout",[174,297,298],{},[78,299,300],{},"1s",[174,302,303],{},"Blocking reserve timeout.",[156,305,306,311,316],{},[174,307,308],{},[78,309,310],{},"shutdown_timeout",[174,312,313],{},[78,314,315],{},"30s",[174,317,318],{},"Grace period for queue loop shutdown.",[156,320,321,326,331],{},[174,322,323],{},[78,324,325],{},"max_attempts",[174,327,328],{},[78,329,330],{},"3",[174,332,333],{},"Attempts before failed stream\u002Fdead-letter behavior.",[75,335,336],{},"Redis backend directives:",[150,338,339,349],{},[153,340,341],{},[156,342,343,345,347],{},[159,344,161],{},[159,346,164],{},[159,348,167],{},[169,350,351,366,381,395,408],{},[156,352,353,358,363],{},[174,354,355],{},[78,356,357],{},"url",[174,359,360],{},[78,361,362],{},"POGO_REDIS_URL",[174,364,365],{},"Redis URL. Required if env var is absent.",[156,367,368,373,378],{},[174,369,370],{},[78,371,372],{},"key_prefix",[174,374,375],{},[78,376,377],{},"pogo",[174,379,380],{},"Redis key prefix.",[156,382,383,388,392],{},[174,384,385],{},[78,386,387],{},"group",[174,389,390],{},[78,391,226],{},[174,393,394],{},"Redis consumer group.",[156,396,397,402,405],{},[174,398,399],{},[78,400,401],{},"consumer",[174,403,404],{},"hostname and process id",[174,406,407],{},"Base consumer name.",[156,409,410,415,420],{},[174,411,412],{},[78,413,414],{},"tls",[174,416,417],{},[78,418,419],{},"false",[174,421,422],{},"Enables TLS for Redis connection.",[75,424,425],{},"Memory backend directives:",[150,427,428,438],{},[153,429,430],{},[156,431,432,434,436],{},[159,433,161],{},[159,435,164],{},[159,437,167],{},[169,439,440,455],{},[156,441,442,447,452],{},[174,443,444],{},[78,445,446],{},"max_messages",[174,448,449],{},[78,450,451],{},"1000",[174,453,454],{},"Maximum in-memory messages.",[156,456,457,462,467],{},[174,458,459],{},[78,460,461],{},"max_total_bytes",[174,463,464],{},[78,465,466],{},"67108864",[174,468,469],{},"Maximum total payload bytes.",[71,471,36],{"id":472},"scheduler",[75,474,475,81],{},[78,476,477],{},"pogo_scheduler",[83,479,481],{"className":85,"code":480,"filename":87,"language":88,"meta":89,"style":89},"{\n  pogo_scheduler {\n    command php artisan schedule:run\n    dir \u002Fvar\u002Fwww\u002Fhtml\n    timeout 5m\n    overlap allow\n    shutdown_grace 30s\n  }\n}\n",[78,482,483,487,492,497,502,507,512,517,521],{"__ignoreMap":89},[93,484,485],{"class":95,"line":96},[93,486,99],{},[93,488,489],{"class":95,"line":102},[93,490,491],{},"  pogo_scheduler {\n",[93,493,494],{"class":95,"line":108},[93,495,496],{},"    command php artisan schedule:run\n",[93,498,499],{"class":95,"line":114},[93,500,501],{},"    dir \u002Fvar\u002Fwww\u002Fhtml\n",[93,503,504],{"class":95,"line":120},[93,505,506],{},"    timeout 5m\n",[93,508,509],{"class":95,"line":126},[93,510,511],{},"    overlap allow\n",[93,513,514],{"class":95,"line":133},[93,515,516],{},"    shutdown_grace 30s\n",[93,518,519],{"class":95,"line":139},[93,520,142],{},[93,522,523],{"class":95,"line":145},[93,524,148],{},[150,526,527,537],{},[153,528,529],{},[156,530,531,533,535],{},[159,532,161],{},[159,534,164],{},[159,536,167],{},[169,538,539,554,567,582,603],{},[156,540,541,546,551],{},[174,542,543],{},[78,544,545],{},"command",[174,547,548],{},[78,549,550],{},"php artisan schedule:run",[174,552,553],{},"Command and arguments.",[156,555,556,561,564],{},[174,557,558],{},[78,559,560],{},"dir",[174,562,563],{},"empty",[174,565,566],{},"Optional working directory.",[156,568,569,574,579],{},[174,570,571],{},[78,572,573],{},"timeout",[174,575,576],{},[78,577,578],{},"5m",[174,580,581],{},"Max duration per command run.",[156,583,584,589,594],{},[174,585,586],{},[78,587,588],{},"overlap",[174,590,591],{},[78,592,593],{},"allow",[174,595,596,598,599,602],{},[78,597,593],{}," or ",[78,600,601],{},"skip",".",[156,604,605,610,614],{},[174,606,607],{},[78,608,609],{},"shutdown_grace",[174,611,612],{},[78,613,315],{},[174,615,616],{},"Grace period before cancelling active commands.",[71,618,41],{"id":377},[75,620,621,81],{},[78,622,377],{},[83,624,626],{"className":85,"code":625,"filename":87,"language":88,"meta":89,"style":89},"{\n  pogo {\n    pool default {\n      worker public\u002Fpogo-worker.php\n      num_threads 8\n      max_wait 30s\n    }\n  }\n}\n",[78,627,628,632,637,642,647,652,657,661,665],{"__ignoreMap":89},[93,629,630],{"class":95,"line":96},[93,631,99],{},[93,633,634],{"class":95,"line":102},[93,635,636],{},"  pogo {\n",[93,638,639],{"class":95,"line":108},[93,640,641],{},"    pool default {\n",[93,643,644],{"class":95,"line":114},[93,645,646],{},"      worker public\u002Fpogo-worker.php\n",[93,648,649],{"class":95,"line":120},[93,650,651],{},"      num_threads 8\n",[93,653,654],{"class":95,"line":126},[93,655,656],{},"      max_wait 30s\n",[93,658,659],{"class":95,"line":133},[93,660,123],{},[93,662,663],{"class":95,"line":139},[93,664,142],{},[93,666,667],{"class":95,"line":145},[93,668,148],{},[150,670,671,682],{},[153,672,673],{},[156,674,675,677,680],{},[159,676,161],{},[159,678,679],{},"Required",[159,681,167],{},[169,683,684,700,711,723],{},[156,685,686,691,694],{},[174,687,688],{},[78,689,690],{},"pool",[174,692,693],{},"Yes",[174,695,696,697,699],{},"Defines a named worker pool. A ",[78,698,226],{}," pool is required.",[156,701,702,706,708],{},[174,703,704],{},[78,705,206],{},[174,707,693],{},[174,709,710],{},"PHP worker script for the pool.",[156,712,713,718,721],{},[174,714,715],{},[78,716,717],{},"num_threads",[174,719,720],{},"No",[174,722,258],{},[156,724,725,730,732],{},[174,726,727],{},[78,728,729],{},"max_wait",[174,731,720],{},[174,733,734,735,738,739,602],{},"Maximum ",[78,736,737],{},"SendMessage"," wait. Defaults to ",[78,740,315],{},[71,742,46],{"id":743},"websocket",[75,745,746,749,750,753],{},[78,747,748],{},"pogo_websocket"," is an HTTP handler directive. Place it before ",[78,751,752],{},"php_server"," for the WebSocket route.",[83,755,757],{"className":85,"code":756,"filename":87,"language":88,"meta":89,"style":89},"route \u002Fapp\u002F* {\n  pogo_websocket {\n    app_id pogo-app\n    app_secret {$WS_APP_SECRET}\n    auth_path \u002Fpogo\u002Fauth\n    auth_script public\u002Fwebsocket-worker.php\n  }\n}\n",[78,758,759,764,769,774,779,784,789,793],{"__ignoreMap":89},[93,760,761],{"class":95,"line":96},[93,762,763],{},"route \u002Fapp\u002F* {\n",[93,765,766],{"class":95,"line":102},[93,767,768],{},"  pogo_websocket {\n",[93,770,771],{"class":95,"line":108},[93,772,773],{},"    app_id pogo-app\n",[93,775,776],{"class":95,"line":114},[93,777,778],{},"    app_secret {$WS_APP_SECRET}\n",[93,780,781],{"class":95,"line":120},[93,782,783],{},"    auth_path \u002Fpogo\u002Fauth\n",[93,785,786],{"class":95,"line":126},[93,787,788],{},"    auth_script public\u002Fwebsocket-worker.php\n",[93,790,791],{"class":95,"line":133},[93,792,142],{},[93,794,795],{"class":95,"line":139},[93,796,148],{},[75,798,799],{},"Required directives:",[150,801,802,810],{},[153,803,804],{},[156,805,806,808],{},[159,807,161],{},[159,809,167],{},[169,811,812,822,838,848],{},[156,813,814,819],{},[174,815,816],{},[78,817,818],{},"app_id",[174,820,821],{},"Pusher app id \u002F key.",[156,823,824,829],{},[174,825,826],{},[78,827,828],{},"app_secret",[174,830,831,832,598,835,602],{},"Shared secret. May be resolved from ",[78,833,834],{},"WS_APP_SECRET_\u003CAPP_ID>",[78,836,837],{},"WS_APP_SECRET",[156,839,840,845],{},[174,841,842],{},[78,843,844],{},"auth_path",[174,846,847],{},"Auth endpoint path.",[156,849,850,855],{},[174,851,852],{},[78,853,854],{},"auth_script",[174,856,857],{},"PHP auth worker script.",[75,859,860],{},"Common optional directives:",[150,862,863,873],{},[153,864,865],{},[156,866,867,869,871],{},[159,868,161],{},[159,870,164],{},[159,872,167],{},[169,874,875,890,905,920,935,948,962,977,997,1010,1022,1034,1046,1059,1071,1085,1097,1109,1121,1132,1144,1156,1168,1180,1195],{},[156,876,877,882,887],{},[174,878,879],{},[78,880,881],{},"num_workers",[174,883,884],{},[78,885,886],{},"2",[174,888,889],{},"Dedicated PHP auth workers.",[156,891,892,897,902],{},[174,893,894],{},[78,895,896],{},"max_connections",[174,898,899],{},[78,900,901],{},"10000",[174,903,904],{},"Max concurrent clients.",[156,906,907,912,917],{},[174,908,909],{},[78,910,911],{},"max_auth_body",[174,913,914],{},[78,915,916],{},"16384",[174,918,919],{},"Max PHP auth response body size.",[156,921,922,927,932],{},[174,923,924],{},[78,925,926],{},"max_concurrent_auth",[174,928,929],{},[78,930,931],{},"100",[174,933,934],{},"Auth concurrency guard.",[156,936,937,942,945],{},[174,938,939],{},[78,940,941],{},"num_shards",[174,943,944],{},"CPU based",[174,946,947],{},"Internal hub shard count.",[156,949,950,955,959],{},[174,951,952],{},[78,953,954],{},"handshake_rate",[174,956,957],{},[78,958,931],{},[174,960,961],{},"Connection attempts per second per direct remote IP.",[156,963,964,969,974],{},[174,965,966],{},[78,967,968],{},"handshake_burst",[174,970,971],{},[78,972,973],{},"50",[174,975,976],{},"Handshake burst allowance.",[156,978,979,984,987],{},[174,980,981],{},[78,982,983],{},"allowed_origins",[174,985,986],{},"same host policy",[174,988,989,990,598,993,996],{},"Exact ",[78,991,992],{},"http:\u002F\u002F",[78,994,995],{},"https:\u002F\u002F"," origins.",[156,998,999,1004,1007],{},[174,1000,1001],{},[78,1002,1003],{},"broker_queue_size",[174,1005,1006],{},"delivery default",[174,1008,1009],{},"Internal broker queue size.",[156,1011,1012,1017,1019],{},[174,1013,1014],{},[78,1015,1016],{},"shard_queue_size",[174,1018,1006],{},[174,1020,1021],{},"Per-shard queue size.",[156,1023,1024,1029,1031],{},[174,1025,1026],{},[78,1027,1028],{},"outbound_queue_size",[174,1030,1006],{},[174,1032,1033],{},"Per-client outbound queue size.",[156,1035,1036,1041,1043],{},[174,1037,1038],{},[78,1039,1040],{},"write_burst_size",[174,1042,1006],{},[174,1044,1045],{},"Per-client write burst size.",[156,1047,1048,1053,1056],{},[174,1049,1050],{},[78,1051,1052],{},"client_msg_rate_limit",[174,1054,1055],{},"module default",[174,1057,1058],{},"Client event rate limit.",[156,1060,1061,1066,1068],{},[174,1062,1063],{},[78,1064,1065],{},"client_msg_rate_burst",[174,1067,1055],{},[174,1069,1070],{},"Client event burst.",[156,1072,1073,1078,1082],{},[174,1074,1075],{},[78,1076,1077],{},"enable_compression",[174,1079,1080],{},[78,1081,419],{},[174,1083,1084],{},"WebSocket compression.",[156,1086,1087,1092,1094],{},[174,1088,1089],{},[78,1090,1091],{},"ping_period",[174,1093,1055],{},[174,1095,1096],{},"Server ping interval.",[156,1098,1099,1104,1106],{},[174,1100,1101],{},[78,1102,1103],{},"pong_wait",[174,1105,1055],{},[174,1107,1108],{},"Client pong timeout.",[156,1110,1111,1116,1118],{},[174,1112,1113],{},[78,1114,1115],{},"write_wait",[174,1117,1055],{},[174,1119,1120],{},"Socket write timeout.",[156,1122,1123,1127,1129],{},[174,1124,1125],{},[78,1126,310],{},[174,1128,1055],{},[174,1130,1131],{},"Graceful shutdown timeout.",[156,1133,1134,1139,1141],{},[174,1135,1136],{},[78,1137,1138],{},"webhook_url",[174,1140,563],{},[174,1142,1143],{},"Best-effort webhook target.",[156,1145,1146,1151,1153],{},[174,1147,1148],{},[78,1149,1150],{},"webhook_secret",[174,1152,563],{},[174,1154,1155],{},"Webhook signing secret.",[156,1157,1158,1163,1165],{},[174,1159,1160],{},[78,1161,1162],{},"redis_host",[174,1164,563],{},[174,1166,1167],{},"Enables Redis Pub\u002FSub broker.",[156,1169,1170,1175,1177],{},[174,1171,1172],{},[78,1173,1174],{},"redis_password",[174,1176,563],{},[174,1178,1179],{},"Redis password.",[156,1181,1182,1187,1192],{},[174,1183,1184],{},[78,1185,1186],{},"redis_db",[174,1188,1189],{},[78,1190,1191],{},"0",[174,1193,1194],{},"Redis database.",[156,1196,1197,1202,1206],{},[174,1198,1199],{},[78,1200,1201],{},"redis_tls",[174,1203,1204],{},[78,1205,419],{},[174,1207,1208],{},"Redis TLS.",[1210,1211,1212],"style",{},"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":89,"searchDepth":96,"depth":102,"links":1214},[1215,1216,1217,1218],{"id":73,"depth":102,"text":31},{"id":472,"depth":102,"text":36},{"id":377,"depth":102,"text":41},{"id":743,"depth":102,"text":46},"Directive overview for Queue, Scheduler, Pogo, and WebSocket.","md",null,{},{"icon":59},{"title":56,"description":1219},"LdAtVYVleXqCWvijJIf3RgCRmnP03mjkjXC8SaAfs8w",[1227,1229],{"title":46,"path":47,"stem":48,"description":1228,"icon":49,"children":-1},"Embedded Pusher-compatible WebSocket server and Laravel broadcaster.",{"title":61,"path":62,"stem":63,"description":1230,"icon":64,"children":-1},"Native PHP functions exposed by the Pogo FrankenPHP plugins.",1779731238168]