nette/forms
📝 Nette Forms: generating, validating and processing secure forms in PHP. Handy API, fully customizable, server & client side validation and mature design.
v3.3.0
14M downloads/mo
#2221 most downloaded on Packagist
nette/forms
What this package is like to depend on
Last release 1 months ago
28 Jun 2026
Release timing varies
gaps range from 2 weeks to 6 months
Rarely documented
notes for 8 of 67 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
68 releases · first in 2014
4 releases in the last 12 months
see the full history below
Release timeline
68 releases · May 2014 to Jun 2026Releases
latest 60 of 68-
v3.3.028 Jun 2026Release notes
Open source →The headline of 3.3 is CSRF protection that the browser handles for you – no token, no cookie, no server-side state, and it holds even against XSS. On top of that, the confusing
{formContext}/{formContainer}pair collapses into a single{form scope}, you can finally nest forms with{form detached}, and a round of housekeeping clears out long-deprecated APIs. Please test and report anything that breaks for you.- PHP 8.3+ and Latte 3.1.4+ are now required.
💥 Breaking Changes
- CSRF is now strictly same-origin. Forms validate the
Sec-Fetch-Siteheader instead of the old SameSite cookie. The previous mechanism trusted submissions from any subdomain of the same site; the new one demands an exact origin match (scheme + host + port). setValues()/setDefaults()now expectiterable|stdClass.RadioList/CheckboxList:getControlPart()andgetLabelPart()throw on an invalid item key instead of silently returning a nonsensical result.- Removed long-deprecated APIs:**
DataClassGenerator,LatteRenderer,getValues(true)(usegetValues('array')), and the$defaultparameter ofgetOption()(use the??operator), negative validation rules
✨ New Features
{form scope name}– one tag to replace the easily-confused{formContext}and{formContainer}. It pushes the form onto the stack without emitting<form>, resolving the name relatively to an active form when there is one, otherwise from the top level.{form detached name}– nest forms at last. HTML forbids nested<form>tags, sodetachedemits an empty<form></form>up front and links every control back to it via the HTML5form="..."attribute, no matter where they sit in the DOM.addSubmit()accepts an$onSubmitcallback – attach a click handler right when you create the button, without a separate->onClick[] =.
🗑️ Deprecations
- A missing comma before
{form}arguments – write{form name, attr=val}instead of{form name attr=val}, freeing keywords likescope/detachednext to the name. - Several magic properties
-
v3.3.0-RC24 Jun 2026 pre-releaseNothing published for this version
-
v3.2.926 May 2026Release notes
Open source →A maintenance-focused release that tightens type safety across the whole codebase, modernizes the JavaScript test stack, and turns static analysis into a non-negotiable part of the build. No API changes – just a more solid foundation under the hood.
- Native types everywhere – filled in missing native type declarations across
Container,BaseControl,Validator,Rules,Formand friends, so PHPStan (and your IDE) see the real shape of things - Sharper phpDoc – tightened phpDoc types and descriptions throughout, giving better autocomplete and clearer intent at every call - Reorganized a few tests and switched some over to
allowCrossOrigin()for clarity
- Native types everywhere – filled in missing native type declarations across
-
v3.2.822 Nov 2025Release notes
Open source →- support for PHP 8.5
- compatible with Latte 3.1
- CheckboxList,
RadioList::getControl()return empty element when has no items
-
v3.2.717 Jul 2025 -
v3.2.631 Mar 2025Release notes
Open source →- SelectBox: correctly selects prompt #343
- MultiChoiceControl: fixed order of selected items
- tests: improved descriptions
- netteForms: do not propagate 'submit' event further when the form is invalid
- netteForms: fixed submitter property
-
v3.2.522 Oct 2024Release notes
Open source →Container::addEmail(): added $maxLength=255 #303- ChoiceControl, MultiChoiceControl: disabled items are processed in
getValue()instead ofloadHttpData() - removed return type from
__call()nette/utils#315 - SelectBox: fixed 2edbd6c
- netteForms: uses the submitter property
-
v3.2.405 Aug 2024Release notes
Open source →Container::getValue()supports conversion to enums [Close #337]- UploadControl: added
setNullable() - netteForms: rewritten to TypeScript
- Button: is omitted from values #330
- DefaultFormRenderer: fixed cummulate instances of Nette\HtmlStringable #335
Helpers::getSupportedTypes()returns array #332- support for PHP 8.4
-
v3.2.305 May 2024Release notes
Open source →- netteForms: modernized code
- netteForms: reimplemented compact transmission mode via formdata event
- netteForms: processes only elements with 'data-nette-rules'
- netteForms: added typehints to jsDoc
- netteForms: improved badInput reporting
- netteForms: rule 'length' works with numbers #329
- Form: does not show 'no associated handlers' error if the form is not submitted by the button
- Blueprint: fixed nullable types detection
- TextBase, HiddenField: added
isNullable()
-
v3.2.201 Apr 2024Nothing published for this version
-
v3.2.106 Mar 2024Nothing published for this version
-
v3.2.008 Feb 2024Nothing published for this version
-
v3.1.1521 Jan 2024Nothing published for this version
-
v3.1.1402 Nov 2023Nothing published for this version
-
v3.1.1210 Oct 2023Nothing published for this version
-
v3.1.1108 Mar 2023Nothing published for this version
-
v3.1.1019 Jan 2023Nothing published for this version
-
v3.1.813 Oct 2022Nothing published for this version
-
v3.1.712 May 2022Nothing published for this version
-
v3.1.609 Nov 2021Nothing published for this version
-
v3.1.507 Oct 2021Nothing published for this version
-
v3.1.425 Aug 2021Nothing published for this version
-
v3.1.303 Mar 2021Nothing published for this version
-
v3.1.211 Feb 2021Nothing published for this version
-
v3.1.104 Feb 2021Nothing published for this version
-
v3.1.019 Jan 2021Nothing published for this version
-
v3.0.702 Nov 2020Nothing published for this version
-
v3.0.613 Jul 2020Nothing published for this version
-
v3.0.506 Jun 2020Nothing published for this version
-
v3.0.420 Apr 2020Nothing published for this version
-
v3.0.302 Jan 2020Nothing published for this version
-
v3.0.219 Nov 2019Nothing published for this version
-
v3.0.108 Jul 2019Nothing published for this version
-
v3.0.028 Feb 2019Nothing published for this version
-
v2.4.1106 Nov 2020Nothing published for this version
-
v2.4.1019 Nov 2019Nothing published for this version
-
v2.4.916 Sep 2018Nothing published for this version
-
v2.4.828 Jun 2018Nothing published for this version
-
v2.4.707 Mar 2018Nothing published for this version
-
v2.4.625 Aug 2017Nothing published for this version
-
v2.4.513 Jul 2017Nothing published for this version
-
v2.4.429 Mar 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.109 Jul 2016Nothing published for this version
-
v2.4.030 Jun 2016Nothing published for this version
-
v2.3.1221 Dec 2016Nothing published for this version
-
v2.3.1126 Sep 2016Nothing published for this version
-
v2.3.1030 Jun 2016Nothing published for this version
-
v2.3.917 May 2016Nothing published for this version
-
v2.3.808 Feb 2016Nothing published for this version
-
v2.3.720 Jan 2016Nothing published for this version
-
v2.3.619 Oct 2015Nothing published for this version
-
v2.3.512 Oct 2015Nothing published for this version
-
v2.3.420 Jul 2015Nothing published for this version
-
v2.3.317 Jun 2015Nothing published for this version
-
v2.3.206 May 2015Nothing published for this version
-
v2.3.123 Mar 2015Nothing published for this version
-
v2.3.020 Feb 2015Nothing published for this version
-
v2.2.803 Dec 2015Nothing published for this version