<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Danny Mbanginu</title>
    <description>The latest articles on DEV Community by Danny Mbanginu (@noclass).</description>
    <link>https://dev.to/noclass</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3963284%2F8bd7fa00-3b90-44d2-adf1-add690f66c6a.jpg</url>
      <title>DEV Community: Danny Mbanginu</title>
      <link>https://dev.to/noclass</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/noclass"/>
    <language>en</language>
    <item>
      <title>Why I Built the First Procedural MVC PHP Framework in 2026</title>
      <dc:creator>Danny Mbanginu</dc:creator>
      <pubDate>Mon, 01 Jun 2026 19:54:19 +0000</pubDate>
      <link>https://dev.to/noclass/why-i-built-the-first-procedural-mvc-php-framework-in-2026-2o51</link>
      <guid>https://dev.to/noclass/why-i-built-the-first-procedural-mvc-php-framework-in-2026-2o51</guid>
      <description>&lt;h1&gt;
  
  
  Why I Built the First Procedural MVC PHP Framework in 2026
&lt;/h1&gt;

&lt;p&gt;NoClass is a modern &lt;strong&gt;MVC (Model-View-Controller) PHP framework&lt;/strong&gt; built around procedural application development rather than application classes. To the best of my knowledge, it is the &lt;strong&gt;first procedural MVC framework of its kind&lt;/strong&gt;, designed to provide the structure, features, and scalability developers expect from a modern framework without requiring a class-centric architecture.&lt;/p&gt;

&lt;p&gt;If you had told me ten years ago that I would build a PHP framework that deliberately avoids application classes, I probably would have laughed.&lt;/p&gt;

&lt;p&gt;After all, modern PHP development has become almost synonymous with object-oriented programming. Laravel, Symfony, and most other popular frameworks revolve around classes, dependency injection, service containers, facades, repositories, traits, and countless other abstractions.&lt;/p&gt;

&lt;p&gt;For many developers, that's simply how PHP is supposed to be written.&lt;/p&gt;

&lt;p&gt;Yet in 2026, after spending nearly two years building and refining a framework that started as an idea in 2024, I found myself asking a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What problem are all these abstractions actually solving for the projects I build every day?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer surprised me.&lt;/p&gt;

&lt;h2&gt;
  
  
  It Started With Frustration
&lt;/h2&gt;

&lt;p&gt;Over the years I've built numerous applications, from content systems and business tools to streaming platforms and educational software.&lt;/p&gt;

&lt;p&gt;Like many PHP developers, I used various frameworks along the way.&lt;/p&gt;

&lt;p&gt;What I noticed was that as frameworks became more sophisticated, they also became more complicated.&lt;/p&gt;

&lt;p&gt;Simple tasks often required navigating through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Controllers&lt;/li&gt;
&lt;li&gt;Services&lt;/li&gt;
&lt;li&gt;Repositories&lt;/li&gt;
&lt;li&gt;Interfaces&lt;/li&gt;
&lt;li&gt;Dependency injection containers&lt;/li&gt;
&lt;li&gt;Providers&lt;/li&gt;
&lt;li&gt;Configuration layers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes it felt like I was spending more time satisfying the framework than solving the business problem.&lt;/p&gt;

&lt;p&gt;A simple database query could end up passing through multiple layers before reaching the database.&lt;/p&gt;

&lt;p&gt;A simple route could involve several files and abstractions.&lt;/p&gt;

&lt;p&gt;I began to wonder:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have we confused complexity with architecture?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Forgotten Strength of PHP
&lt;/h2&gt;

&lt;p&gt;PHP became popular because it was approachable.&lt;/p&gt;

&lt;p&gt;You could open a file, write some code, refresh the browser, and see results immediately.Many developers learned programming because PHP lowered the barrier to entry.&lt;/p&gt;

&lt;p&gt;Somewhere along the journey, the industry began treating procedural programming as something that needed to be escaped from.Object-oriented programming became the default answer to almost every problem.But procedural programming never disappeared.&lt;/p&gt;

&lt;p&gt;The PHP interpreter itself still executes procedural code.&lt;/p&gt;

&lt;p&gt;Countless successful applications continue to use procedural approaches internally.&lt;/p&gt;

&lt;p&gt;The question was never whether procedural code works.&lt;/p&gt;

&lt;p&gt;The question was whether procedural code could still form the foundation of a modern MVC framework.&lt;/p&gt;

&lt;p&gt;I believed it could.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building NoClass
&lt;/h2&gt;

&lt;p&gt;That belief eventually became NoClass.&lt;/p&gt;

&lt;p&gt;The project actually began in 2024 as an experiment. At first, I simply wanted to see how far I could push a procedural architecture while still providing the conveniences developers expect from a modern framework.&lt;/p&gt;

&lt;p&gt;What started as a curiosity gradually evolved into something much bigger.&lt;/p&gt;

&lt;p&gt;The idea was straightforward:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if we built a modern MVC framework while keeping application code procedural?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As development progressed, it became clear that NoClass was exploring territory that few, if any, frameworks had seriously pursued: a fully featured MVC framework that embraces procedural application development instead of building everything around classes.&lt;/p&gt;

&lt;p&gt;Not because classes are bad.&lt;/p&gt;

&lt;p&gt;Not because object-oriented programming is wrong.&lt;/p&gt;

&lt;p&gt;But because many projects simply don't need that level of abstraction.&lt;/p&gt;

&lt;p&gt;Instead of this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$userRepository&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;findById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why not this?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nf"&gt;user_find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of navigating through multiple service layers, why not call a function that performs the task directly?&lt;/p&gt;

&lt;p&gt;Instead of tracing dependency injection chains, why not have an explicit execution path that can be understood immediately?&lt;/p&gt;

&lt;p&gt;The result was a framework where application code remains procedural, but developers still get the features they expect from modern development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modern Features Still Matter
&lt;/h2&gt;

&lt;p&gt;NoClass is not an attempt to return to PHP from 2003.&lt;/p&gt;

&lt;p&gt;It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MVC architecture&lt;/li&gt;
&lt;li&gt;Routing&lt;/li&gt;
&lt;li&gt;Middleware&lt;/li&gt;
&lt;li&gt;Security helpers&lt;/li&gt;
&lt;li&gt;Database abstraction helpers&lt;/li&gt;
&lt;li&gt;Asset management&lt;/li&gt;
&lt;li&gt;HMVC modules&lt;/li&gt;
&lt;li&gt;Service registration&lt;/li&gt;
&lt;li&gt;Composer integration&lt;/li&gt;
&lt;li&gt;Caching support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was never to remove modern features.&lt;/p&gt;

&lt;p&gt;The goal was to remove unnecessary complexity.&lt;/p&gt;

&lt;p&gt;Those are very different things.&lt;/p&gt;

&lt;p&gt;Caching is a good example. Performance matters in modern applications, but implementing caching shouldn't require navigating a maze of services and abstractions. NoClass provides straightforward caching capabilities that fit naturally into a procedural workflow while still helping applications scale efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Predictable Criticism
&lt;/h2&gt;

&lt;p&gt;Whenever developers hear "procedural PHP framework," certain criticisms appear almost immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  "Procedural code doesn't scale."
&lt;/h3&gt;

&lt;p&gt;Large systems scaled long before dependency injection containers existed.&lt;/p&gt;

&lt;p&gt;What matters is organisation, consistency, and architecture.&lt;/p&gt;

&lt;p&gt;NoClass supports modular development through HMVC-style modules, allowing applications to be separated into manageable units.&lt;/p&gt;

&lt;p&gt;Combined with built-in caching support, applications can remain both simple and performant as they grow.&lt;/p&gt;

&lt;h3&gt;
  
  
  "OOP is more maintainable."
&lt;/h3&gt;

&lt;p&gt;Sometimes.&lt;/p&gt;

&lt;p&gt;Sometimes not.&lt;/p&gt;

&lt;p&gt;I've seen beautifully designed object-oriented systems.&lt;/p&gt;

&lt;p&gt;I've also seen enterprise codebases where a simple feature required modifications across ten different classes.&lt;/p&gt;

&lt;p&gt;Maintainability comes from clarity, not from a specific programming paradigm.&lt;/p&gt;

&lt;h3&gt;
  
  
  "This goes against modern PHP."
&lt;/h3&gt;

&lt;p&gt;Perhaps.&lt;/p&gt;

&lt;p&gt;But "modern" should not mean "only one way." The strength of PHP has always been flexibility.The ecosystem benefits from different approaches, not fewer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Is NoClass For?
&lt;/h2&gt;

&lt;p&gt;NoClass is not trying to replace Laravel.&lt;/p&gt;

&lt;p&gt;Laravel is an excellent framework.&lt;/p&gt;

&lt;p&gt;Symfony is an excellent framework.&lt;/p&gt;

&lt;p&gt;Many object-oriented frameworks solve problems extremely well.&lt;/p&gt;

&lt;p&gt;NoClass exists for developers who want something different.&lt;/p&gt;

&lt;p&gt;Developers who value:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explicit execution flow&lt;/li&gt;
&lt;li&gt;Simplicity&lt;/li&gt;
&lt;li&gt;Transparency&lt;/li&gt;
&lt;li&gt;Smaller codebases&lt;/li&gt;
&lt;li&gt;Reduced abstraction&lt;/li&gt;
&lt;li&gt;Procedural development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is particularly attractive for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small to medium business applications&lt;/li&gt;
&lt;li&gt;Educational projects&lt;/li&gt;
&lt;li&gt;Rapid development&lt;/li&gt;
&lt;li&gt;Teams that prefer native PHP&lt;/li&gt;
&lt;li&gt;Developers transitioning from vanilla PHP&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Bigger Goal
&lt;/h2&gt;

&lt;p&gt;The real goal of NoClass is not to convince everyone to abandon object-oriented programming.&lt;/p&gt;

&lt;p&gt;That would be unrealistic and unnecessary.The goal is to challenge an assumption.The assumption that modern software development automatically requires ever-increasing layers of abstraction.&lt;/p&gt;

&lt;p&gt;Sometimes a function is enough.&lt;/p&gt;

&lt;p&gt;Sometimes a controller, a model, and a view are enough.&lt;/p&gt;

&lt;p&gt;Sometimes clarity is more valuable than cleverness.&lt;/p&gt;

&lt;p&gt;NoClass is an experiment built around that belief.Whether it becomes widely adopted is ultimately up to the community.But I believe the PHP ecosystem is healthier when developers have genuine architectural choices.&lt;/p&gt;

&lt;p&gt;Object-oriented frameworks already exist.&lt;/p&gt;

&lt;p&gt;Micro-frameworks already exist.&lt;/p&gt;

&lt;p&gt;NoClass explores a different path as a procedural MVC framework.&lt;/p&gt;

&lt;p&gt;And judging by the conversations it has already started, it seems many developers have been asking the same questions I was.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building NoClass wasn't about rejecting modern PHP.&lt;/p&gt;

&lt;p&gt;It was about re-examining some of the assumptions we've accumulated over the years.&lt;/p&gt;

&lt;p&gt;The framework isn't trying to win a war against object-oriented programming.&lt;/p&gt;

&lt;p&gt;It's trying to demonstrate that procedural PHP still has a place in modern web development.&lt;/p&gt;

&lt;p&gt;It is also an attempt to prove that a modern MVC framework does not have to be built around application classes to provide structure, maintainability, and scalability. In that sense, NoClass represents a different architectural direction and, to the best of my knowledge, the first framework of its kind within the PHP MVC ecosystem.&lt;/p&gt;

&lt;p&gt;The fact that the project started in 2024 and continued evolving through 2026 also taught me something important: simplicity is much harder to achieve than complexity. Removing layers requires far more thought than adding them.&lt;/p&gt;

&lt;p&gt;That philosophy extends to every feature in the framework, including performance-focused capabilities like caching. Modern applications need speed, but achieving that speed shouldn't require sacrificing clarity or introducing unnecessary architectural complexity.&lt;/p&gt;

&lt;p&gt;If you're interested in the technical reasoning behind NoClass, including its architectural principles, intended use cases, performance features, and position within the PHP ecosystem, you can read the full &lt;a href="https://noclass.org/whitepaper" rel="noopener noreferrer"&gt;NoClass white paper here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If nothing else, I hope NoClass encourages more discussion about simplicity, maintainability, performance, and the trade-offs we make when designing software.&lt;/p&gt;

&lt;p&gt;Because sometimes the most interesting innovations don't come from adding more layers.&lt;/p&gt;

&lt;p&gt;Sometimes they come from removing them.&lt;/p&gt;




&lt;p&gt;Website: &lt;a href="https://noclass.org" rel="noopener noreferrer"&gt;https://noclass.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;White Paper: &lt;a href="https://noclass.org/whitepaper" rel="noopener noreferrer"&gt;https://noclass.org/whitepaper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/noclassphp/noclass" rel="noopener noreferrer"&gt;https://github.com/noclassphp/noclass&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>procedural</category>
      <category>mvc</category>
      <category>framework</category>
    </item>
  </channel>
</rss>
