History of Nette

The origins of Nette date back to 2004, when its author David Grudl started looking for a suitable framework in which to write applications, as pure PHP was no longer sufficient. None of the solutions available at the time suited him, so he gradually began to outline the features of a new framework, which later got the name Nette.

At that time, current frameworks like Symfony, Laravel or Ruby on Rails did not exist yet. In the Java world, JSF (JavaServer Faces) was the standard, and in the competing .NET realm, ASP.NET Webforms was the dominant framework. Both allowed building pages using reusable UI components. David considered their abstraction methods and attempts to create statelessness over the stateless HTTP protocol using sessions or postbacks to be flawed and fundamentally broken. They caused many difficulties for users and search engines. For example, if you saved a link, you were surprised to find different content under it later.

The possibility of composing pages from reusable UI components fascinated David, who knew it well from Delphi, a popular tool for building desktop applications at the time. He liked the marketplaces with opensource components for Delphi. So he tried to solve the question of how to create a component framework that would, in turn, work in complete harmony with stateless HTTP. He was looking for a concept that would be user, SEO and developer friendly. And so Nette was born.

The name Nette came about by chance in the bathroom, when the author spotted a bottle of Gillette shaving gel, rotated so that only the llette could be seen.

Thousands of hours of research, thinking and rewriting followed. In a dusty garage in a village somewhere outside Brno, the first outlines of the future framework were being created. The basis of the architecture was the MVC pattern, which was then used by the now forgotten PHP framework Mojavi and later popularized by the hype around Ruby on Rails. One of the inspirational sources was even the never published phpBase framework by Honza Tichý.

Articles about the upcoming Nette started to appear on the author's blog. It was joked that it was about vaporware. But then in October 2007, at the Prague PHP Seminar conference, David publicly introduced Nette. By the way, this conference evolved into WebExpo a year later, later one of the biggest IT conferences in Europe. Even then Nette proudly presented a number of original concepts, such as the aforementioned component model, bidirectional router, specific way of linking between presenters, etc. It had forms, authentication, caching, etc. Everything is still used in Nette in its original concept until today.

Nette uses presenter instead of controller because there were supposedly too many words starting with con in the code (controller, front controller, control, config, container, …).

At the end of 2007, David Grudl published the code and Nette 0.7 was released. An enthusiastic community of programmers formed around it and started to meet every month at the Posobota event. The community included many of today's luminaries, such as Ondrej Mirtes, author of the great PHPStan tool. The development of Nette moved forward, and in the next two years versions 0.8 and 0.9 were released, laying the foundations for almost all of today's parts of the framework. Including AJAX snippets that predate Hotwire for Ruby on Rails or Symfony UX Turbo by 14 years.

But one crucial thing was missing from Nette back then. Dependecy injection container (DIC). Nette was using a service locator and the intention was to move to dependecy injection. But how to design such a thing? David Grudl, who had no experience with DI at the time, went to lunch with Vasek Purchart, who had been using DI for about half a year. Together they discussed the topic and David started work on Nette DI, a library that completely revolutionized the way we think about application design. The DI container became one of the most successful parts of the framework. And it gave rise to two spin-offs: the Neon format and the Schema library.

The shift to dependency injection took a lot of time, and we waited a couple of years for a new version of Nette. Therefore, when it finally came out, it was numbered 2. So Nette version 1 does not exist.

Nette started its modern history in 2012 with version 2.0. It also brought Nette Database, which included an extremely handy database tool, now called Explorer. This library was originally programmed by Jakub Vrána, David Grudl's neighbor and author of the popular Adminer tool. Its further development was then taken over by Jan Škrášek for three years.

In 2014, Nette 2.1 was released, followed shortly by Nette 2.2. How is this possible? Version 2.2 was the same as version 2.1, just split into twenty separate packages. The Composer tool took hold in the PHP world and changed the way we think about library creation. Nette ceased to be a monolith and broke up into smaller independent parts. Each with its own repository, issue tracker and its own flow of development and versioning. This way Nette doesn't have to go through the absurdities common in monolithic frameworks, where a new version of a package comes out even though nothing has changed. The actual splitting of the Git repositories involved several weeks of preparation and hundreds of hours of machine time.

Nette also came in an amazing 3rd place in the global poll for the best PHP framework organized by Sitepoint magazine.