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.
Flow
Client-update status pages for freelancers and agencies — clients check progress with no login required.
BeFresha
A directory and booking start point for beauty and wellness businesses across Malaysia.
PlayBall
Court and venue booking across padel, tennis, pickleball, and badminton in Indonesia.
Payday
Payment requests, links, and hosted checkout for small businesses moving from quote to paid.
Also built on Monad Framework: Herodo, Serasi Living, QuickOrder, GRIP.