Monad Framework: PHP without the magic.

Explicit routing, explicit services, nothing running unless you called it. Built for developers who'd rather read the source than trust it.

Route::get('/orders/{id}', [ShowOrder::class, 'toCustomer'])
    ->middleware(RequireLogin::class);

A router call and a middleware class — both real, both one step from their actual definition.

What does Monad Framework do?

Monad Framework gives you explicit routing, middleware, and services — call them directly, with nothing resolved on your behalf.

View::render('orders.show', ['order' => $order]);

Every variable reaching that template arrived through this call — no implicit globals, no hidden state. Writes coming off the request are parameterized automatically, one less thing to remember. A console (mitosis) handles scaffolding and migrations. PSR-3 logging, PSR-16 caching, and PSR-18 HTTP clients ship in, ready to use.

Who is Monad Framework for?

Built for: senior PHP developers, freelancers, and solo founders who ship client work under their own name — with or without an AI assistant writing some of the code. If you're the one debugging a stranger's codebase at 11pm, or reviewing a pull request an AI wrote an hour ago, a small, readable API surface matters more than a large one.

Not built for: teams who want a batteries-included ecosystem with a first-party package for everything, and don't mind learning new conventions every release to get it. Monad hands you fewer parts, on purpose.

Highlighted features

mitosis: one console for the whole app.

Scaffolding, database migrations, and day-to-day app management — one CLI, not four separate packages to wire together.

No hidden setup step.

composer create-project monad/skeleton NewApp, then npm install, copy .env, mitosis setup, mitosis migrate — every step a command you can read before you run it, not a wizard doing something unlisted.

Explicit control, traceable errors.

You wire routes, middleware, and services yourself — nothing is resolved on your behalf. When something breaks anyway, every unhandled failure returns an incident ID before you've opened the logs: full detail in development, a safe summary with the same ID in production.

Built on Monad Framework

Real apps in production — not a demo, not a sandbox project.

Also built on Monad Framework: Herodo, Serasi Living, QuickOrder, GRIP.