nette/application
🏆 Nette Application: a full-stack component-based MVC kernel for PHP that helps you write powerful and modern web applications. Write less, have cleaner code and your work will bring you joy.
v3.3.0
16M downloads/mo
#2136 most downloaded on Packagist
nette/application
What this package is like to depend on
Last release 1 months ago
29 Jun 2026
Release timing varies
gaps range from 3 weeks to 10 months
Rarely documented
notes for 8 of 80 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
81 releases · first in 2014
6 releases in the last 12 months
see the full history below
Release timeline
81 releases · May 2014 to Jun 2026Releases
latest 60 of 81-
v3.3.029 Jun 2026Release notes
Open source →Nette Application 3.3 modernizes the foundations: PHP 8.3+ and Latte 3.1, more reliable CSRF protection driven by the browser itself, and a default presenter mapping that finally matches the structure used throughout the documentation. It also clears out a pile of long-forgotten legacy. Please test the RC and report anything that breaks before the stable release.
💥 Breaking Changes
- PHP 8.3 – 8.5 and Latte 3.1 are now required
- More reliable CSRF protection – same-origin is now verified via the browser's
Sec-Fetch-Siteheader instead of a SameSite cookie. - Default presenter mapping is now
App\Presentation\*\**Presenter Application::processRequest()returns aResponseinstead of sending it itself (#350) – sending is handled byrun(). This enables long-running runtimes (RoadRunner, FrankenPHP) and PSR integration.Presenter::getRequest()throws instead of returningnullwhen the presenter isn't running yetLatteFactory::create()now takes?Control– update any customLatteFactoryimplementation to the newcreate(?Control $control = null)signature.- Removed
{ifCurrent}– use{if isLinkCurrent('...')}. - Removed compatibility with old class names such as
PresenterComponentandIRouter.
⚠️ Deprecations
Mostly very old curiosities that few people knew existed – they still work but now emit a deprecation notice:
@annotations→ PHP attributes:@persistent→#[Persistent],@crossOrigin→#[Requires(sameOrigin: false)],@deprecated→#[Deprecated].- Array access on
RouteList–$router[] = new Route(...)and friends are replaced by$router->addRoute(...)/getRouters(). - Query string in a link destination –
link('Product:detail?id=1')should pass arguments instead:link('Product:detail', ['id' => 1]). Component::getParameter()second$defaultargument – use the??operator instead.- Some magic properties (
$presenter->view,$layout,$request,$session…) – use the getters.
✨ New Features
- Set the URL fragment straight from arguments –
link('Product:detail', ['#' => 'reviews'])produces...#reviews. The value is URL-encoded, must be scalar, and isn't passed on as a request parameter. - New
Presenter::completeTemplate()– aprotectedmethod extracted fromsendTemplate()that you can override to inject shared variables or set the template file before rendering.
-
v3.3.0-RC24 Jun 2026 pre-releaseNothing published for this version
-
v3.2.1229 Jun 2026Release notes
Open source →A hardening release. Crafted or malformed request parameters that used to slip through as uncaught 500s now degrade gracefully to 4xx. If your site gets probed by scanners – and it does – these three fixes turn a batch of "Server Error" reports into clean Bad Request / Not Found responses.
- Self-links no longer crash on bad input – when a presenter builds a link to the current page (
redirect('this'),forward('this'),isLinkCurrent('this'), typically from a language switcher) while the current URL carries a parameter that doesn't fit the action's typed signature (e.g.?id=abcforint $id), the framework raised an uncaughtInvalidLinkException(HTTP 500). It now reports a properBadRequestException(4xx) through the newInvalidRequestParameterException. Explicitly passed bad link arguments still throwInvalidLinkException, so genuine programmer mistakes stay visible. - Numeric component ids no longer trigger a TypeError – a crafted query key such as
?1-foo=barproduced a numeric component id that hitgetComponent()'sstringtype hint and threw aTypeError(HTTP 500). The id is now cast to string and the request is handled gracefully. - Routing panel survives weird parameters – a request like
?do[]=xcould crash Tracy's routing panel during development. It now skips non-string presenter/signal/action values instead of throwing.
- Self-links no longer crash on bad input – when a presenter builds a link to the current page (
-
v3.2.1001 Jun 2026Release notes
Open source →- Sharper phpDoc types and descriptions throughout the codebase
- Reverted the experimental
hasPresenter()/getPresenterIfExists()addition and the$throwdeprecation inComponent/Form::getPresenter()– the previous API behavior stays unchanged - {layout auto} no longer triggers infinite recursion – when used inside a referring template, the layout finder is now skipped instead of looping back on itself
- Response and router classes now use promoted readonly properties, trimming boilerplate across
Application,FileResponse,JsonResponse,RedirectResponse,TextResponse,ForwardResponseandCliRouter - Callback parameters in
PresenterFactory,CallbackResponseandMultiplierare normalized toClosurefor stronger typing
-
v3.2.919 Dec 2025Release notes
Open source →- added #[TemplateVariable]
- LinkGenerator: throws an error when the link points to #[Requires(forward: true)]
-
v3.2.824 Nov 2025 -
v3.2.717 Jul 2025Release notes
Open source →- Latte: added filter
|absoluteUrland{linkBase} - SnippetRuntime: Fixed snippets rendering when multiple templates are rendered (#349)
- TemplateFactory: does not assign the default property to the template if it does not match the type #352
- class Template is abstract
- error 500: improved CSS style reset nette/tracy#581
- optimized global function calls
- Latte: added filter
-
v3.2.610 Sep 2024Release notes
Open source →- LatteExtension: added option 'locale'
- LatteExtension: automatically passes translator to Latte\Essential\TranslatorExtension
- support for PHP 8.4
-
v3.2.513 May 2024Release notes
Open source →- ApplicationExtension: checks the correct usage of attributes
Component::tryCall()throws BadRequestExceptionMultiplier::createComponent()allow to return a null (#327)- LatteExtension: fixed v3.2.3
-
v3.2.412 May 2024Nothing published for this version
-
v3.2.320 Apr 2024Nothing published for this version
-
v3.2.111 Mar 2024Nothing published for this version
-
v3.2.008 Feb 2024Nothing published for this version
-
v3.1.1512 May 2024Nothing published for this version
-
v3.1.1409 Oct 2023Nothing published for this version
-
v3.1.1327 Aug 2023Nothing published for this version
-
v3.1.1128 Apr 2023Nothing published for this version
-
v3.1.1017 Jan 2023Nothing published for this version
-
v3.1.828 Nov 2022Nothing published for this version
-
v3.1.701 Jun 2022Nothing published for this version
-
v3.1.617 May 2022Nothing published for this version
-
v3.1.520 Dec 2021Nothing published for this version
-
v3.1.406 Oct 2021Nothing published for this version
-
v3.1.302 Jun 2021Nothing published for this version
-
v3.1.208 Feb 2021Nothing published for this version
-
v3.1.125 Jan 2021Nothing published for this version
-
v3.1.031 Dec 2020Nothing published for this version
-
v3.0.825 Jan 2021Nothing published for this version
-
v3.0.702 Nov 2020Nothing published for this version
-
v3.0.625 Aug 2020Nothing published for this version
-
v3.0.520 Apr 2020Nothing published for this version
-
v3.0.422 Jan 2020Nothing published for this version
-
v3.0.305 Jan 2020Nothing published for this version
-
v3.0.221 Oct 2019Nothing published for this version
-
v3.0.108 Jul 2019Nothing published for this version
-
v3.0.003 Apr 2019Nothing published for this version
-
v2.4.1724 Nov 2020Nothing published for this version
-
v2.4.1625 Aug 2020Nothing published for this version
-
v2.4.1509 Jun 2020Nothing published for this version
-
v2.4.1419 Nov 2019Nothing published for this version
-
v2.4.1323 Nov 2018Nothing published for this version
-
v2.4.1216 May 2018Nothing published for this version
-
v2.4.1107 Mar 2018Nothing published for this version
-
v2.4.1005 Feb 2018Nothing published for this version
-
v2.4.924 Aug 2017Nothing published for this version
-
v2.4.816 Jul 2017Nothing published for this version
-
v2.4.711 Jul 2017Nothing published for this version
-
v2.4.623 May 2017Nothing published for this version
-
v2.4.502 Feb 2017Nothing published for this version
-
v2.4.419 Jan 2017Nothing published for this version
-
v2.4.320 Dec 2016Nothing published for this version
-
v2.4.227 Sep 2016Nothing published for this version
-
v2.4.131 Jul 2016Nothing published for this version
-
v2.4.025 Jun 2016Nothing published for this version
-
v2.3.1425 Aug 2020Nothing published for this version
-
v2.3.1317 Jun 2016Nothing published for this version
-
v2.3.1206 Apr 2016Nothing published for this version
-
v2.3.1109 Feb 2016Nothing published for this version
-
v2.3.1007 Feb 2016Nothing published for this version
-
v2.3.920 Jan 2016Nothing published for this version