Getting Started

Introduction

What the Pogo FrankenPHP plugins provide and when to use each one.

Pogo is a small set of FrankenPHP plugins that move common application runtime services into the FrankenPHP binary:

  • Queue runs Laravel and Symfony jobs through a FrankenPHP-native worker loop backed by Redis Streams.
  • Scheduler triggers one configured command, such as php artisan schedule:run, on each wall-clock minute.
  • Pogo runs request-scoped parallel PHP jobs in dedicated FrankenPHP worker pools.
  • WebSocket embeds a Pusher-compatible WebSocket server and Laravel broadcasting driver.

The goal is a simpler PHP deployment for small platforms, demos, single-binary applications, and controlled production workloads where the tradeoffs are understood.

What these plugins replace

PluginCommon external servicePogo replacement
QueueSupervisor plus Redis queue workersFrankenPHP queue worker loop
SchedulerCron, systemd timer, scheduler sidecarEmbedded Caddy app with Go ticker
PogoAd hoc synchronous fan-outRequest-scoped worker pools
WebSocketPusher, Reverb, or Node.js WebSocket serverEmbedded WebSocket handler

Production posture

Each plugin has a different maturity and reliability model.

PluginCurrent statusMain reliability note
QueueProduction-orientedRedis Streams, at-least-once delivery, idempotent handlers required.
SchedulerExperimentalLocal ticker only; use a singleton service or shared app locks when scaled.
PogoExperimentalJobs are tied to the active HTTP request and are not persisted.
WebSocketExperimentalPusher-compatible subset with at-most-once delivery.
  1. Read Installation for prerequisites.
  2. Read Building FrankenPHP for the shared xcaddy pattern.
  3. Open the extension page you need under Extensions.
  4. Use Caddy reference and PHP API reference once you are wiring a real application.