No magic. Just PHP.
A framework for people who want to see what their code is doing and just lean on the power of PHP.
$ composer create-project popphp/framework my-app
Transparent
by design
Understand exactly what your code is doing. No surprises and nothing happens in the dark.
Built for the
real world
Pop wasn't designed in the abstract. It was built solving real problems under real deadlines.
A gentle
on-ramp
Approachable enough to pick up fast. Capable enough that you won't outgrow it in six months.
And it comes with a full, practical toolkit for building real applications — no assembling a dozen packages before you can ship.
See what's inside →17+ years in production. Modernized for today.
Pop started in 2009, solving real deployment problems in the real world. It's been in continuous use ever since.
More on Pop →See it for yourself
There are more than a few options to wire up and run a Pop PHP application. Pick a style that fits you.
· web or console, same app object
· REST verbs without a package
· Broad PSR interoperability
$app = new Pop\Application([ 'routes' => [ 'get' => [ '/hello[/:name]' => [ 'controller' => IndexController::class, 'action' => 'index' ], ], 'post' => [ '/users[/]' => [ 'controller' => UsersController::class, 'action' => 'create' ], ], ], ]); $app->run();
$app = new Pop\Application(); $app->get('/hello[/:name]', 'IndexController->index') ->post('/users[/]', 'UsersController->create'); $app->run();
use Pop\Controller\AbstractController; class IndexController extends AbstractController { public function index(?string $name = null): void { $this->response->setBody( 'Hello ' . ($name ?? 'World') ); $this->response->send(); } }
$ ./kettle web:serve
$ curl http://localhost:8000/hello/Nick Hello Nick