History of Nette
The origins of Nette date back to 2004, when its author, David Grudl, began searching for a suitable framework to write applications, as pure PHP was no longer sufficient. None of the solutions available at the time met his needs, so he gradually started outlining the features of a new framework, which later received the name Nette.
At that time, modern frameworks like Symfony, Laravel, or Ruby on Rails did not yet exist. In the Java world, JSF (JavaServer Faces) was the standard, while in the competing .NET realm, ASP.NET WebForms dominated. Both allowed building pages using reusable UI components. However, David considered their abstraction methods and attempts to simulate statefulness over the stateless HTTP protocol using sessions or so-called postbacks to be flawed and fundamentally broken. They caused numerous difficulties for users and search engines. For instance, if you saved a link, you might later be surprised to find different content under it.
The very idea of composing pages from reusable UI components fascinated David, who was familiar with it from Delphi, a popular tool for building desktop applications at the time. He liked the marketplaces offering open-source components for Delphi. Thus, he sought to answer the question: how to create a component-based framework that would work in complete harmony with stateless HTTP? He looked for a concept that would be friendly to users, SEO, and developers alike. And so, Nette began to take shape.
The name Nette originated by chance in the bathroom when the author noticed a can of Gillette shaving gel, turned so that only llette was visible.
Thousands of hours of research, contemplation, and rewriting followed. In a dusty garage in a village somewhere outside Brno, the first outlines of the future framework emerged. The MVC (Model-View-Controller) pattern became the architectural foundation, used then by the now-forgotten PHP framework Mojavi and later popularized by the buzz around Ruby on Rails. One source of inspiration was even the never-released phpBase framework by Honza Tichý.
Articles about the upcoming Nette started appearing on the author's blog. Jokes circulated about it being vaporware. But then, in October 2007, at the PHP Seminar conference in Prague, David publicly introduced Nette. Incidentally, this conference evolved a year later into WebExpo, which became one of the largest IT conferences in Europe. Even back then, Nette boasted several original concepts, such as the aforementioned component model, a bidirectional router, a specific way of linking between presenters, etc. It had forms, solved authentication, caching, and more. All these core concepts are still used in Nette today in their original form.
In Nette, the term presenter is used instead of controller, supposedly because there were too many words starting with con in the codebase (controller, front controller, control, config, container, …).
At the end of 2007, David Grudl released the code, and Nette 0.7 saw the light of day. The framework immediately garnered immense attention. An enthusiastic community of programmers formed around it, starting monthly meetups called Posobota. This community included many figures who are prominent today, such as Ondřej Mirtes, the author of the excellent tool PHPStan. Nette's development raced forward, and in the following two years, versions 0.8 and 0.9 were released, laying the groundwork for almost all of the framework's current parts. This included AJAX snippets, which predated technologies like Hotwire for Ruby on Rails or Symfony UX Turbo by 14 years.
However, one crucial element was missing in the early Nette: a Dependency Injection Container (DIC). Nette used a service locator, and the plan was to transition to dependency injection. But how to design such a thing? David Grudl, lacking experience with DI at the time, had lunch with Václav Purchart, who had been using DI for about six months. They discussed the topic, and David began working on Nette DI, a library that completely revolutionized the way application design was approached. The DI container became one of the framework's most successful parts and later gave rise to two spin-offs: the NEON format and the Schema library.
The transition to dependency injection took considerable time, and the community waited a few years for the new version of Nette. Therefore, when it was finally released, it was numbered 2.0 directly. Thus, Nette version 1 does not exist.
Nette began its modern era in 2012 with version 2.0. It also introduced Nette Database, which included an exceptionally handy tool for working with databases, now known as Explorer. This library was originally programmed by Jakub Vrána, David Grudl's neighbor and the author of the popular Adminer tool. Jan Škrášek then took over its further development for three years.
In 2014, Nette 2.1 was released, followed shortly by Nette 2.2. How was this possible? Version 2.2 was essentially the same as 2.1, but split into twenty separate packages. The Composer tool had become established in the PHP world, changing the way libraries were conceived. Nette ceased to be a monolith and was broken down into smaller, independent parts, each with its own repository, issue tracker, and development pace and versioning. This avoids the absurdities common in monolithic frameworks, where a new version of a package might be released even if nothing within it has changed. The actual splitting of the Git repositories involved several weeks of preparation and hundreds of hours of machine time.
Nette also achieved an impressive 3rd place in the global poll for the best PHP framework organized by SitePoint magazine.