[{"data":1,"prerenderedAt":461},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started\u002Fbuilding-frankenphp":65,"\u002Fgetting-started\u002Fbuilding-frankenphp-surround":456},[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":21,"body":67,"description":449,"extension":450,"links":451,"meta":452,"navigation":453,"path":22,"seo":454,"stem":23,"__hash__":455},"docs\u002F1.getting-started\u002F3.building-frankenphp.md",{"type":68,"value":69,"toc":444},"minimark",[70,79,84,292,298,302,426,433,437,440],[71,72,73,74,78],"p",{},"Pogo plugins are Caddy\u002FFrankenPHP modules. They must be compiled into the FrankenPHP binary with ",[75,76,77],"code",{},"xcaddy",".",[80,81,83],"h2",{"id":82},"build-from-published-modules","Build from published modules",[85,86,92],"pre",{"className":87,"code":88,"filename":89,"language":90,"meta":91,"style":91},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","CGO_ENABLED=1 \\\nXCADDY_SETCAP=1 \\\nXCADDY_GO_BUILD_FLAGS=\"-ldflags='-w -s' -tags=nobadger,nomysql,nopgx,nowatcher\" \\\nCGO_CFLAGS=\"$(php-config --includes)\" \\\nCGO_CPPFLAGS=\"$(php-config --includes)\" \\\nCGO_LDFLAGS=\"$(php-config --ldflags) $(php-config --libs)\" \\\nxcaddy build \\\n  --output \u002Fusr\u002Flocal\u002Fbin\u002Ffrankenphp \\\n  --with github.com\u002Fdunglas\u002Ffrankenphp@v1.12.3 \\\n  --with github.com\u002Fdunglas\u002Ffrankenphp\u002Fcaddy@v1.12.3 \\\n  --with github.com\u002Fdunglas\u002Fcaddy-cbrotli \\\n  --with github.com\u002Fy-l-g\u002Fqueue\u002Fmodule@main \\\n  --with github.com\u002Fy-l-g\u002Fscheduler\u002Fmodule@main \\\n  --with github.com\u002Fy-l-g\u002Fpogo\u002Fmodule@main \\\n  --with github.com\u002Fy-l-g\u002Fwebsocket\u002Fmodule@main\n","Terminal","bash","",[75,93,94,115,121,137,157,173,201,212,223,234,244,254,264,274,284],{"__ignoreMap":91},[95,96,99,103,107,111],"span",{"class":97,"line":98},"line",1,[95,100,102],{"class":101},"sTEyZ","CGO_ENABLED",[95,104,106],{"class":105},"sMK4o","=",[95,108,110],{"class":109},"sfazB","1",[95,112,114],{"class":113},"sBMFI"," \\\n",[95,116,118],{"class":97,"line":117},2,[95,119,120],{"class":101},"XCADDY_SETCAP=1 \\\n",[95,122,124,127,130,133,135],{"class":97,"line":123},3,[95,125,126],{"class":101},"XCADDY_GO_BUILD_FLAGS=",[95,128,129],{"class":105},"\"",[95,131,132],{"class":109},"-ldflags='-w -s' -tags=nobadger,nomysql,nopgx,nowatcher",[95,134,129],{"class":105},[95,136,114],{"class":101},[95,138,140,143,146,149,152,155],{"class":97,"line":139},4,[95,141,142],{"class":101},"CGO_CFLAGS=",[95,144,145],{"class":105},"\"$(",[95,147,148],{"class":113},"php-config",[95,150,151],{"class":109}," --includes",[95,153,154],{"class":105},")\"",[95,156,114],{"class":101},[95,158,160,163,165,167,169,171],{"class":97,"line":159},5,[95,161,162],{"class":101},"CGO_CPPFLAGS=",[95,164,145],{"class":105},[95,166,148],{"class":113},[95,168,151],{"class":109},[95,170,154],{"class":105},[95,172,114],{"class":101},[95,174,176,179,181,183,186,189,192,194,197,199],{"class":97,"line":175},6,[95,177,178],{"class":101},"CGO_LDFLAGS=",[95,180,145],{"class":105},[95,182,148],{"class":113},[95,184,185],{"class":109}," --ldflags",[95,187,188],{"class":105},")",[95,190,191],{"class":105}," $(",[95,193,148],{"class":113},[95,195,196],{"class":109}," --libs",[95,198,154],{"class":105},[95,200,114],{"class":101},[95,202,204,207,210],{"class":97,"line":203},7,[95,205,206],{"class":101},"xcaddy ",[95,208,209],{"class":109},"build",[95,211,114],{"class":101},[95,213,215,218,221],{"class":97,"line":214},8,[95,216,217],{"class":109},"  --output",[95,219,220],{"class":109}," \u002Fusr\u002Flocal\u002Fbin\u002Ffrankenphp",[95,222,114],{"class":101},[95,224,226,229,232],{"class":97,"line":225},9,[95,227,228],{"class":109},"  --with",[95,230,231],{"class":109}," github.com\u002Fdunglas\u002Ffrankenphp@v1.12.3",[95,233,114],{"class":101},[95,235,237,239,242],{"class":97,"line":236},10,[95,238,228],{"class":109},[95,240,241],{"class":109}," github.com\u002Fdunglas\u002Ffrankenphp\u002Fcaddy@v1.12.3",[95,243,114],{"class":101},[95,245,247,249,252],{"class":97,"line":246},11,[95,248,228],{"class":109},[95,250,251],{"class":109}," github.com\u002Fdunglas\u002Fcaddy-cbrotli",[95,253,114],{"class":101},[95,255,257,259,262],{"class":97,"line":256},12,[95,258,228],{"class":109},[95,260,261],{"class":109}," github.com\u002Fy-l-g\u002Fqueue\u002Fmodule@main",[95,263,114],{"class":101},[95,265,267,269,272],{"class":97,"line":266},13,[95,268,228],{"class":109},[95,270,271],{"class":109}," github.com\u002Fy-l-g\u002Fscheduler\u002Fmodule@main",[95,273,114],{"class":101},[95,275,277,279,282],{"class":97,"line":276},14,[95,278,228],{"class":109},[95,280,281],{"class":109}," github.com\u002Fy-l-g\u002Fpogo\u002Fmodule@main",[95,283,114],{"class":101},[95,285,287,289],{"class":97,"line":286},15,[95,288,228],{"class":109},[95,290,291],{"class":109}," github.com\u002Fy-l-g\u002Fwebsocket\u002Fmodule@main\n",[71,293,294,295,78],{},"For production, pin plugin versions or commits instead of ",[75,296,297],{},"@main",[80,299,301],{"id":300},"docker-pattern","Docker pattern",[85,303,308],{"className":304,"code":305,"filename":306,"language":307,"meta":91,"style":91},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","FROM dunglas\u002Ffrankenphp:builder AS builder\n\nCOPY --from=caddy:builder \u002Fusr\u002Fbin\u002Fxcaddy \u002Fusr\u002Fbin\u002Fxcaddy\n\nRUN CGO_ENABLED=1 \\\n    XCADDY_SETCAP=1 \\\n    XCADDY_GO_BUILD_FLAGS=\"-ldflags='-w -s' -tags=nobadger,nomysql,nopgx,nowatcher\" \\\n    CGO_CFLAGS=\"$(php-config --includes)\" \\\n    CGO_CPPFLAGS=\"$(php-config --includes)\" \\\n    CGO_LDFLAGS=\"$(php-config --ldflags) $(php-config --libs)\" \\\n    xcaddy build \\\n      --output \u002Fusr\u002Flocal\u002Fbin\u002Ffrankenphp \\\n      --with github.com\u002Fdunglas\u002Ffrankenphp@v1.12.3 \\\n      --with github.com\u002Fdunglas\u002Ffrankenphp\u002Fcaddy@v1.12.3 \\\n      --with github.com\u002Fdunglas\u002Fcaddy-cbrotli \\\n      --with github.com\u002Fy-l-g\u002Fqueue\u002Fmodule@main \\\n      --with github.com\u002Fy-l-g\u002Fscheduler\u002Fmodule@main \\\n      --with github.com\u002Fy-l-g\u002Fpogo\u002Fmodule@main \\\n      --with github.com\u002Fy-l-g\u002Fwebsocket\u002Fmodule@main\n\nFROM dunglas\u002Ffrankenphp AS runner\nCOPY --from=builder \u002Fusr\u002Flocal\u002Fbin\u002Ffrankenphp \u002Fusr\u002Flocal\u002Fbin\u002Ffrankenphp\n","Dockerfile","dockerfile",[75,309,310,315,321,326,330,335,340,345,350,355,360,365,370,375,380,385,391,397,403,409,414,420],{"__ignoreMap":91},[95,311,312],{"class":97,"line":98},[95,313,314],{},"FROM dunglas\u002Ffrankenphp:builder AS builder\n",[95,316,317],{"class":97,"line":117},[95,318,320],{"emptyLinePlaceholder":319},true,"\n",[95,322,323],{"class":97,"line":123},[95,324,325],{},"COPY --from=caddy:builder \u002Fusr\u002Fbin\u002Fxcaddy \u002Fusr\u002Fbin\u002Fxcaddy\n",[95,327,328],{"class":97,"line":139},[95,329,320],{"emptyLinePlaceholder":319},[95,331,332],{"class":97,"line":159},[95,333,334],{},"RUN CGO_ENABLED=1 \\\n",[95,336,337],{"class":97,"line":175},[95,338,339],{},"    XCADDY_SETCAP=1 \\\n",[95,341,342],{"class":97,"line":203},[95,343,344],{},"    XCADDY_GO_BUILD_FLAGS=\"-ldflags='-w -s' -tags=nobadger,nomysql,nopgx,nowatcher\" \\\n",[95,346,347],{"class":97,"line":214},[95,348,349],{},"    CGO_CFLAGS=\"$(php-config --includes)\" \\\n",[95,351,352],{"class":97,"line":225},[95,353,354],{},"    CGO_CPPFLAGS=\"$(php-config --includes)\" \\\n",[95,356,357],{"class":97,"line":236},[95,358,359],{},"    CGO_LDFLAGS=\"$(php-config --ldflags) $(php-config --libs)\" \\\n",[95,361,362],{"class":97,"line":246},[95,363,364],{},"    xcaddy build \\\n",[95,366,367],{"class":97,"line":256},[95,368,369],{},"      --output \u002Fusr\u002Flocal\u002Fbin\u002Ffrankenphp \\\n",[95,371,372],{"class":97,"line":266},[95,373,374],{},"      --with github.com\u002Fdunglas\u002Ffrankenphp@v1.12.3 \\\n",[95,376,377],{"class":97,"line":276},[95,378,379],{},"      --with github.com\u002Fdunglas\u002Ffrankenphp\u002Fcaddy@v1.12.3 \\\n",[95,381,382],{"class":97,"line":286},[95,383,384],{},"      --with github.com\u002Fdunglas\u002Fcaddy-cbrotli \\\n",[95,386,388],{"class":97,"line":387},16,[95,389,390],{},"      --with github.com\u002Fy-l-g\u002Fqueue\u002Fmodule@main \\\n",[95,392,394],{"class":97,"line":393},17,[95,395,396],{},"      --with github.com\u002Fy-l-g\u002Fscheduler\u002Fmodule@main \\\n",[95,398,400],{"class":97,"line":399},18,[95,401,402],{},"      --with github.com\u002Fy-l-g\u002Fpogo\u002Fmodule@main \\\n",[95,404,406],{"class":97,"line":405},19,[95,407,408],{},"      --with github.com\u002Fy-l-g\u002Fwebsocket\u002Fmodule@main\n",[95,410,412],{"class":97,"line":411},20,[95,413,320],{"emptyLinePlaceholder":319},[95,415,417],{"class":97,"line":416},21,[95,418,419],{},"FROM dunglas\u002Ffrankenphp AS runner\n",[95,421,423],{"class":97,"line":422},22,[95,424,425],{},"COPY --from=builder \u002Fusr\u002Flocal\u002Fbin\u002Ffrankenphp \u002Fusr\u002Flocal\u002Fbin\u002Ffrankenphp\n",[71,427,428,429,432],{},"Then copy your PHP application and ",[75,430,431],{},"Caddyfile"," into the runner image.",[80,434,436],{"id":435},"verify-the-binary","Verify the binary",[71,438,439],{},"Run FrankenPHP with a Caddyfile that uses the plugin you compiled. If the binary was built without a required module, Caddy will fail during config load with an unknown directive or missing app error.",[441,442,443],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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":91,"searchDepth":98,"depth":117,"links":445},[446,447,448],{"id":82,"depth":117,"text":83},{"id":300,"depth":117,"text":301},{"id":435,"depth":117,"text":436},"Compile a FrankenPHP binary with one or more Pogo plugins.","md",null,{},{"icon":24},{"title":21,"description":449},"jbFOAUPfQ2OWbIiTJaWOAx8-j69F9vWWfSXZS3wcdJk",[457,459],{"title":16,"path":17,"stem":18,"description":458,"icon":19,"children":-1},"Prerequisites and setup for using Pogo FrankenPHP plugins.",{"title":31,"path":32,"stem":33,"description":460,"icon":34,"children":-1},"Redis Streams backed queue workers for Laravel and Symfony Messenger.",1779731237721]