Comparison of server-side web frameworks
This is a comparison of notable web frameworks, software used to build and deploy web applications.
General
Basic information about each framework.
Systems listed on a light purple background are no longer in active development.
ASP.NET
C++
ColdFusion Markup Language (CFML)
Elixir
Haskell
Java
JavaScript
Perl
PHP
Python
Ruby
Scala
Others
Comparison of features
C++
Project
|
Ajax
|
MVC framework
|
MVC push-pull
|
i18n & L10n?
|
ORM
|
Testing framework(s)
|
DB migration framework(s)
|
Security framework(s)
|
Template framework(s)
|
Caching framework(s)
|
Form validation framework(s)
|
CppCMS
|
Yes
|
Yes
|
Push
|
Yes
|
CppDB
|
No
|
No
|
Yes
|
Yes
|
Yes
|
Yes
|
Wt
|
Yes
|
Yes
|
Push & Pull
|
Yes
|
Wt::Dbo
|
Boost.test
|
|
Yes
|
Yes
|
No
|
Yes
|
ColdFusion Markup Language (CFML)
Java
Project
|
Language
|
Ajax
|
MVC framework
|
MVC push-pull
|
i18n & L10n?
|
ORM
|
Testing framework(s)
|
DB migration framework(s)
|
Security framework(s)
|
Template framework(s)
|
Caching framework(s)
|
Form validation framework(s)
|
Apache Click
|
Java
|
jQuery
|
Page oriented
|
Pull
|
Yes
|
Hibernate, Cayenne
|
Yes
|
|
pluggable
|
Velocity, JSP
|
Cached templates
|
Built-in validation
|
Apache OFBiz
|
Java, Groovy, XML,
|
jQuery
|
Yes
|
Push-pull
|
Yes
|
Entity Engine (Internal kind of ORM, not really ORM, notably used by Atlassian Jira)
|
JUnit
|
Entity Engine Tools, Data File Tool, CSV Parser, Apache POI
|
Internal Security framework based on OWASP
|
Freemarker (Recommended), Velocity (Support Available), JSP (Support Available)
|
Internal Cache Maintenance with Distributed Cache Clearing for clusters
|
Server side validation, Client Side Validation (JQuery)
|
Apache Sling
|
Java
|
Yes
|
Yes
|
Push-pull
|
|
Uses JCR content repository
|
|
|
Yes
|
Yes
|
Yes
|
Apache Struts
|
Java
|
Yes
|
Yes
|
Push-pull
|
Yes
|
Yes
|
Unit tests
|
|
|
Yes
|
|
Yes
|
Apache Tapestry
|
Java
|
Prototype, jQuery
|
Yes
|
Pull
|
Yes
|
JPA, Hibernate, Cayenne
|
Selenium, TestNG, JUnit
|
|
Spring Security, Shiro
|
Yes
|
with extensions
|
Native or Bean Validation
|
Apache Wicket
|
Java
|
Extensions for YUI, ExtJS, more
|
No (Modular event-driven)
|
Pull
|
Yes
|
with extensions
|
Mock objects, unit and integration tests via extension
|
|
Yes
|
Yes
|
Yes
|
Yes
|
Grails
|
Groovy
|
Yes
|
Yes
|
Push
|
Yes
|
GORM, Hibernate
|
Unit tests, integration test, functional test
|
multiple plugins: autobase, dbmigrate, more
|
Spring Security,[77] Apache Shiro[78]
|
Yes
|
Yes
|
Yes
|
JavaServer Faces
|
Java
|
Yes
|
Yes
|
Pull
|
Yes
|
JPA, Hibernate and any other Java EE ORM framework
|
JUnit
|
|
Yes
|
Facelets, JSP
|
Yes
|
Native validators, integration with Bean Validation
|
Project
|
Language
|
Ajax
|
MVC framework
|
MVC push-pull
|
i18n & L10n?
|
ORM
|
Testing framework(s)
|
DB migration framework(s)
|
Security framework(s)
|
Template framework(s)
|
Caching framework(s)
|
Form validation framework(s)
|
JBoss Seam
|
Java
|
Yes
|
Yes
|
Pull
|
Yes
|
JPA, Hibernate
|
JUnit, TestNG
|
|
JAAS integration, Drools, Hibernate Filters, OpenID, CAPTCHA
|
Facelets
|
JBoss Cache, Ehcache
|
Hibernate Validator
|
JWt
|
Java
|
Yes
|
Yes
|
Push-pull
|
Yes
|
|
|
|
Yes
|
Yes
|
|
Yes
|
Play
|
Java, Scala
|
Yes
|
Yes
|
Push-pull
|
Yes
|
JPA, Hibernate
|
JUnit, Selenium
|
Yes
|
via Core Security module
|
Yes
|
Yes
|
Server-side validation
|
Spring
|
Java
|
Yes
|
Yes
|
Push
|
Yes
|
Hibernate, iBatis, more
|
Mock objects, unit tests
|
|
Spring Security (formerly Acegi)
|
JSP, Commons Tiles, Velocity, Thymeleaf, more
|
Ehcache, more
|
Commons validator, Bean Validation
|
Stripes
|
Java
|
Yes
|
Yes
|
Pull
|
Yes
|
JPA, Hibernate
|
Yes
|
|
framework extension
|
Yes
|
|
Yes
|
Vaadin
|
Java
|
GWT
|
|
Push-pull
|
Yes
|
Yes
|
Yes
|
|
|
Yes
|
|
Yes
|
Wavemaker
|
JavaScript (client), Java (server)
|
Dojo Toolkit
|
Yes
|
Push
|
Dojo Toolkit
|
Hibernate
|
JUnit
|
Hibernate
|
Spring Security (formerly Acegi), role-based access control
|
Dojo Toolkit
|
Dojo Toolkit
|
Regular expression, schema-driven validation
|
Project
|
Language
|
Ajax
|
MVC framework
|
MVC push-pull
|
i18n & L10n?
|
ORM
|
Testing framework(s)
|
DB migration framework(s)
|
Security framework(s)
|
Template framework(s)
|
Caching framework(s)
|
Form validation framework(s)
|
WebObjects
|
Java
|
Yes
|
Yes
|
Push-pull
|
Yes
|
EOF
|
WOUnit (JUnit), TestNG, Selenium
|
in Project WONDER
|
|
Yes
|
Yes
|
Yes
|
Google Web Toolkit
|
Java, JavaScript
|
Yes
|
|
|
Yes
|
JPA with RequestFactory
|
JUnit (too early), jsUnit (too difficult), Selenium (best)
|
via Java
|
Yes
|
|
|
Bean Validation
|
ZK
|
Java, ZUML
|
jQuery
|
Yes
|
Push-pull
|
Yes
|
any J2EE ORM framework
|
JUnit, ZATS
|
HibernateUtil, SpringUtil
|
Spring Security
|
Macro components & composition
|
Yes
|
client, server
|
JavaScript
Project
|
Ajax
|
MVC framework
|
MVC push-pull
|
i18n & L10n?
|
ORM
|
Testing framework(s)
|
DB migration framework(s)
|
Security framework(s)
|
Template framework(s)
|
Caching framework(s)
|
Form validation framework(s)
|
AngularJS
|
XHR, JSONP
|
Yes
|
|
i18n and l10n
|
|
Karma (unit testing), Protractor (end-to-end testing)
|
|
Content Security Policy (CSP), XSRF
|
Templates
|
Caching
|
Form validation (client-side)
|
EmberJS
|
Yes
|
Yes
|
|
Yes
|
Ember Data
|
QUnit
|
|
|
Handlebars
|
|
|
qooxdoo
|
Yes
|
Data binding
|
|
i18n
|
|
Testrunner
|
|
|
|
|
Form Validation
|
SproutCore
|
Yes
|
Yes
|
|
|
|
|
|
|
|
|
Perl
Project
|
Ajax
|
MVC framework
|
MVC push-pull
|
i18n & L10n?
|
ORM
|
Testing framework(s)
|
DB migration framework(s)
|
Security framework(s)
|
Template framework(s)
|
Caching framework(s)
|
Form validation framework(s)
|
Catalyst
|
Toolkit-independent (REST & JSON support, specific plugins for Prototype JavaScript Framework, more)
|
Yes
|
Push in its most common usage
|
Yes
|
DBIx::Class, Rose::DB::Object, more
|
Supports Perl testing standards, Test Anything Protocol (TAP)
|
?
|
ACL-based, external engines, more
|
Template::Toolkit, HTML::Template, HTML::Mason, PHP and any extant Perl template engine
|
Cache, Memcached, shared memory, more
|
HTML::FormHandler HTML::FormFu, HTML::FormValidator, more
|
Dancer
|
Yes
|
Yes
|
Push
|
Yes
|
DBIx::Class, ORMesque
|
Yes
|
?
|
?
|
Template::Toolkit, HTML::Mason, Text::MicroTemplate, any extant Perl template engine
|
Cache, Memcached, shared memory, more
|
DataFu, any extant Perl form validation software
|
Maypole
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
Mojolicious
|
Toolkit-independent (REST & JSON support)
|
No explicit model support though commonly used as MVC
|
Push
|
Yes
|
Commonly used with DBIx::Class
|
Test::Mojo
|
?
|
Signed session cookie
|
Built-in Perl templating, Template::Toolkit and several others via plugins
|
?
|
Not explicitly, use any Perl Modules
|
PHP
Project
|
Language
|
Ajax
|
MVC framework
|
MVC push-pull
|
i18n & L10n?
|
ORM
|
Testing framework(s)
|
DB migration framework(s)
|
Security framework(s)
|
Template framework(s)
|
Caching framework(s)
|
Form validation framework(s)
|
Scaffolding
|
RAD
|
Mobility
|
CakePHP
|
PHP >= 7.2[79]
|
Any
|
Yes
|
Yes, Push & Cells
|
Yes
|
ORM, Data Mapper Pattern, SQL Relational Algebra Abstraction Layer
|
Unit tests, object mocking, fixtures, code coverage, memory analysis with PHPUnit and Xdebug and Continuous Integration via Travis
|
Yes
|
CRUD based, ACL-based, Multiple Plugins
|
Themes, Layouts, Cells, Views, Elements, Plugins for Twig, Bootstrap, etc.
|
Memcache, Redis, XCache, APC, File
|
Validation via Contexts (Table (DAO), Entity (VO) & Controller), CSRF Protection
|
Plugin CRUD
|
Cake Bake
|
Mobile Agent Detection, Layouts
|
CodeIgniter
|
PHP >= 7.2[80] (ver 4 and up) or PHP >= 5.6.0[81] (until ver 3.1.11)
|
Any
|
Yes
|
Push
|
Mostly[82]
|
Third party only
|
Ready for next release, Unit tests for v.4 and up
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
No[83]
|
Yes
|
Templates
|
Fat-Free Framework
|
PHP >= 5.4[84]
|
Any
|
MVC, RMR
|
Push-pull
|
Yes
|
Data mappers for SQL, MongoDB, Flat-File
|
Built-in
|
Yes
|
Yes
|
Yes
|
APC, Memcache, XCache, WinCache, and Filesystem
|
Yes
|
No
|
?
|
?
|
FuelPHP
|
PHP >= 5.3.3[85]
|
Yes
|
MVC, HMVC
|
Push
|
Yes
|
Yes
|
PHPUnit
|
Yes
|
Yes, Plugins available
|
Yes, Plugins available
|
File, Redis, Memcache, more
|
Yes
|
Yes
|
?
|
?
|
Gyroscope
|
PHP >= 5.4
|
nano.js, replaceable[86]
|
LCHH
|
Push-pull
|
Mostly
|
Data-source agnostic
|
No
|
Built-in Schema comparison tool and UDF editor
|
ACL-based, replaceable
|
Implementation-specific; helper functions and theme templates available
|
APC, Memcache
|
Yes
|
Interactive code generator
|
Yes
|
Dedicated mobile and tablet layouts, landscape-portrait transformation
|
Kajona
|
PHP >= 7[87]
|
Any
|
Yes
|
Push
|
Yes
|
Yes
|
PHPUnit, Selenium, Jasmine
|
Yes
|
Yes
|
Yes
|
APC, Database, File
|
Yes
|
Yes
|
Yes
|
Bootstrap
|
Laminas (formerly Zend Framework)
|
PHP >= 7.3[88]
|
Toolkit-independent
|
Yes
|
Push-pull
|
Yes
|
Table and row data gateway or Doctrine
|
Unit tests, PHP Unit or other independent
|
Yes
|
ACL-based
|
Yes
|
APC, Database, File, Memcache, Zend Platform
|
Yes
|
Yes
|
?
|
?
|
Laravel
|
PHP >= 8.0[89]
|
Any
|
Yes
|
Push
|
Yes
|
Eloquent
|
PHPUnit
|
Yes
|
Yes
|
Yes
|
APC, Database, File, Memcache, Redis
|
Yes
|
Yes
|
Yes
|
Yes
|
Li3 (Lithium)
|
PHP >= 5.3.6
|
Any
|
Yes
|
Push
|
Yes
|
Yes
|
Unit tests, builtin test framework or other independent
|
No
|
Yes, Plugins available
|
PHP, Twig Plugin available
|
Memcache, Redis, XCache, APC, File
|
Yes, with CSRF Protection and Form Signing
|
No
|
Yes
|
?
|
Phalcon
|
PHP >= 8.0[90]
|
Any
|
Yes
|
Push
|
Yes
|
Yes
|
Codeception PHPUnit
|
Yes
|
Yes
|
Volt, PHP
|
APC, Memcache, Memory, Redis, Redis Cluster, File
|
Yes
|
Yes
|
Yes
|
?
|
Pop PHP
|
PHP >= 8.1
|
Any
|
Yes
|
Push
|
Yes
|
Yes
|
PHPUnit with CI via GitHub Actions
|
Yes
|
ACL-based
|
Yes
|
APC, Database, File, Memcache, Redis, Session
|
Yes
|
Yes
|
Yes
|
?
|
PRADO
|
PHP >= 7.3[91]
|
Prototype, script.aculo.us, own components[92]
|
No
|
Push-pull
|
Yes
|
Data access objects (DAO), active record pattern, SQLMap data mapper
|
PHPUnit, SimpleTest, Selenium
|
No
|
Yes
|
XML-based, similar to ASP.NETs[92]
|
APC, Database, eAccelerator, Memcached, XCache
|
Yes[92]
|
Yes[92]
|
?
|
?
|
SilverStripe (Sapphire)
|
PHP >= 7.1[93]
|
jQuery, jQuery UI
|
Yes
|
Push-pull
|
Yes
|
Active record pattern
|
Unit tests, Selenium
|
Automatic
|
incl. OpenID
|
Themes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Silex
|
PHP >= 5.3.9
|
Yes
|
Yes
|
Yes
|
Yes
|
Plugin exists (Doctrine)
|
Yes
|
No
|
Yes
|
PHP, Twig
|
Plugin exists
|
Yes
|
Plugin exists
|
?
|
?
|
Smart.Framework
|
PHP >= 7.3[94]
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes (PostgreSQL, MySQL, SQLite, MongoDB, Solr, others via plugins)
|
Yes
|
No
|
Yes
|
Yes (Markers, Twig, others via plugins)
|
Yes (File, Redis, others via plugins)
|
Yes
|
No
|
Yes
|
Yes, (jQuery mobile, Bootstrap, others via plugins)
|
Symfony
|
PHP >= 8.1[95]
|
Prototype, script.aculo.us, Unobtrusive Ajax with UJS and PJS plugins
|
Yes
|
Push
|
Yes
|
Propel, Doctrine (YAML)
|
Yes
|
Plugin exists (alpha code)
|
Plugin
|
PHP, Twig
|
Yes
|
Yes
|
Yes
|
?
|
?
|
TYPO3
|
PHP >= 7.2[96]
|
Any
|
Yes
|
Push-pull
|
Yes
|
Yes
|
Yes
|
Partial
|
Yes
|
TYPO3 Fluid
|
Yes
|
Yes
|
Plugin exists
|
Plugin exists
|
?
|
Yii
|
PHP >= 5.4[97]
|
jQuery, jQuery UI, own components, plugins
|
Yes
|
Push-pull
|
Yes
|
Data Access Objects (DAO), Active Record Pattern, Plugins (incl. Doctrine 2.0)
|
PHPUnit, Selenium
|
Yes
|
ACL-based, RBAC-based, plugins
|
PHP-based, PRADO-like, plugins
|
APC, Database, eAccelerator, File, Memcache, Redis, WinCache, XCache, Zend Platform
|
Yes
|
Yes[98]
|
?
|
?
|
Python
Project
|
Language
|
Ajax
|
MVC framework
|
MVC push-pull
|
i18n & L10n?
|
ORM
|
Testing framework(s)
|
DB migration framework(s)
|
Security framework(s)
|
Template framework(s)
|
Caching framework(s)
|
Form validation framework(s)
|
Python 3.*
|
CherryPy
|
Python
|
-
|
-
|
_
|
-
|
pluggable
|
-
|
-
|
-
|
pluggable
|
-
|
-
|
Yes
|
Django
|
Python
|
Yes
|
Yes
|
Push
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
built-in, Jinja2, Mako, Cheetah
|
Yes
|
Yes
|
Yes
|
FastAPI
|
Python
|
Yes
|
-
|
-
|
-
|
ORM-agnostic
|
via pytest
|
depends on ORM
|
Yes
|
Jinja2
|
-
|
Yes
|
Yes
|
Flask
|
Python
|
Yes
|
-
|
-
|
Yes
|
ORM-agnostic
|
via unittest
|
depends on ORM
|
Yes
|
Jinja2
|
Yes
|
Yes
|
Yes
|
Jam.py
|
Python, JavaScript
|
Yes
|
Event driven
|
Yes
|
Yes
|
Yes
|
via pytest and mocha
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Pyjs
|
Python, JavaScript
|
Yes
|
Use PureMVC Python version (compiled to JavaScript)
|
|
Yes
|
??, no direct data access
|
|
No
|
|
|
|
|
No
|
Pylons
|
Python
|
helpers for Prototype and script.aculo.us
|
controller
|
Push
|
Yes
|
ORM-agnostic
|
via nose
|
depends on ORM
|
|
pluggable: Mako, Genshi, Myghty, Kid, more
|
native: pluggable: Redis, Beaker (memory, memcached, file, databases)
|
preferred formencode
|
No
|
Pyramid
|
Python
|
Yes
|
Yes
|
Push
|
Yes
|
ORM-agnostic
|
Yes
|
depends on ORM
|
Yes
|
pluggable: Jinja2, Chameleon, Mako, Genshi, more
|
default: native session factory. pluggable: Redis, PyNaCl, Beaker (memory, memcached, file, databases), more
|
deform, formencode, WTForms, more
|
Yes
|
TACTIC
|
Python
|
Yes
|
Yes
|
Pull
|
No
|
Yes
|
Yes
|
Yes
|
Yes
|
Mako
|
No
|
Yes
|
No
|
Tornado
|
Python
|
See Advanced Async Example implements AJAX
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
Yes
|
TurboGears
|
Python
|
Toolkit-independent, provides support via JSON
|
Full stack, best-of-breed based
|
Push
|
Yes
|
SQLAlchemy
|
nose
|
SQLAlchemy-Migrate
|
Repoze.what & Repoze.who
|
pluggable: Genshi, more
|
Support for memcached, and any WSGI compliant system
|
ToscaWidgets, utilizing FormEncode
|
Yes
|
web2py
|
Python
|
Yes
|
Yes
|
Push
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes[99]
|
BlueBream (Zope 3)
|
Python
|
via add-on products, e.g. Plone w/KSS
|
Yes
|
Pull
|
Yes
|
ZODB, SQLObject, SQLAlchemy
|
Unit tests, functional tests
|
ZODB generations
|
ACL-based
|
Yes
|
Yes
|
Yes
|
No
|
Zope 2
|
Python
|
|
Yes
|
Pull
|
Yes
|
ZODB, SQLObject, SQLAlchemy
|
Unit tests
|
|
ACL-based
|
Yes
|
Yes
|
CMFFormController
|
No
|
Ruby
Others
Project
|
Language
|
Ajax
|
MVC framework
|
MVC push-pull
|
i18n & L10n?
|
ORM
|
Testing framework(s)
|
DB migration framework(s)
|
Security framework(s)
|
Template framework(s)
|
Caching framework(s)
|
Form validation framework(s)
|
AIDA/Web
|
Smalltalk
|
Yes
|
Yes
|
|
Yes
|
Gemstone/S, GLORP, more
|
SUnit
|
|
Yes
|
|
|
Yes
|
Application Express
|
PL/SQL
|
Yes
|
|
|
Yes
|
|
|
Yes
|
Yes
|
|
|
Yes
|
Flex
|
ActionScript, MXML
|
Not by name but similar technology[100]
|
|
|
|
|
FlexUnit
|
|
|
|
|
|
Lift
|
Scala
|
Yes
|
Yes
|
Pull
|
Yes
|
Yes
|
ScalaTest, Selenium[101]
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Opa
|
Opa
|
Yes
|
|
|
Yes
|
MongoDB
|
|
|
Yes
|
Yes
|
Yes
|
|
OpenACS
|
Tcl
|
Yes
|
Yes
|
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Seaside
|
Smalltalk
|
jQuery, jQuery UI, Prototype JavaScript Framework, script.aculo.us, more
|
Yes
|
|
Yes
|
GLORP, Gemstone/S, more
|
Unit tests, SUnit
|
|
|
No, intentionally
|
|
Magritte
|
Project
|
Language
|
Ajax
|
MVC framework
|
MVC push-pull
|
i18n & L10n?
|
ORM
|
Testing framework(s)
|
DB migration framework(s)
|
Security framework(s)
|
Template framework(s)
|
Caching framework(s)
|
Form validation framework(s)
|
See also
References
|
|