| Comparison of web application frameworksThis is a comparison of notable web application frameworks.
GeneralBasic information about each framework. ASP.NET C++ ColdFusion Markup Language (CFML) ECMAScript Java JavaScript Scala Perl PHP Python Ruby Others Comparison of Features ASP.NET|
ASP.NET MVC | Yes | Yes | Push | Yes | ORM-independent | Unit tests, Functional Tests, Integration Tests | Entity Framework | ASP.NET Forms Authentication (Default), Pluggable | Razor (Default), ASPX, Pluggable | Yes | Yes (client-side via plugins) |
---|
BFC | Yes | Not mandatory | Push & pull | Yes | via active data dictionary | Unit tests | | security groups and rules | Yes | metadata, result sets | Data dictionary driven |
---|
DotNetNuke | Yes | No | Pull | Yes | SubSonic, NHibernate | Unit tests | Yes | ACL-based (OpenID, LiveID, Active Directory, LDAP, CardSpace, ASP.NET Forms Authentication) | Yes | Pluggable | ASP.NET Validators, built-in API |
---|
Kentico CMS | Yes | Yes | Push & Pull | Yes | Proprietary, customizable | Unit tests | Yes, Import toolkit | ACL-based (OpenID, LiveID, Active Directory, LDAP, CardSpace, ASP.NET Forms Authentication, FB connect) | Yes | Yes, Customizable | ASP.NET Validators, built-in API |
---|
MonoRail | Prototype | Active record pattern | Push | Yes | Active record pattern | Unit tests | | via ASP.NET Forms Authentication | Yes | Yes | Yes |
---|
OpenRasta | No | Yes | Push | Yes | ORM-independent | Unit tests | No | HTTP Digest and via ASP.NET Forms Authentication or host environment | Yes | No | No |
---|
C++|
CppCMS | Yes | Yes | Push | Yes | CppDB | No | No | Yes | Yes | Yes | Yes |
---|
Wt | Yes | Yes | Push & Pull | Yes | Wt::Dbo | Boost.test | | Yes | No | No | Yes |
---|
Tntnet | Yes | No | No | Yes | Tntdb | No | No | No | Yes | No | No |
---|
ColdFusion Markup Language (CFML)|
ColdBox Platform | Yes | Yes | Push-pull | Yes | Yes | via MockBox, MXUnit, others | via plugin | Yes | Yes | Yes | via plugin |
---|
ColdFusion on Wheels | Yes | Yes | | via plugin jLingua | Yes | Yes integrated RocketUnit | via plugin | Yes | | via plugin | Yes |
---|
Fusebox | via CF or any JavaScript library | optional | Push | No, custom | via lexicons for Transfer, Reactor | via MXUnit, others | No | via plugins | | via lexicon for ColdSpring | No |
---|
Mach-II | via CF or any JavaScript library | Yes | Push | via plugin | Transfer, Reactor, Hibernate | via MXUnit, others | | via plugins | | ColdSpring | |
---|
Model-Glue | via CF or any JavaScript library | Yes | Push | | Transfer, Reactor, Hibernate | via MXUnit, others | | via plugins | | ColdSpring | |
---|
onTap | native features + Prototype + script.aculo.us | optional | Push | Yes | DataFaucet [2] | via MXUnit, others | DataFaucet has potential - supports multiple db platforms | Members onTap Plugin | Yes | Yes | Yes |
---|
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) |
---|
ECMAScript Java|
Apache Click | Java | jQuery | Page oriented | Pull | Yes | Hibernate, Cayenne | Yes | | pluggable | Velocity, JSP | Cached templates | Built-in validation |
---|
Apache OFBiz | Java | Prototype | Yes | Push-pull | Yes | Entity Engine(OOTB ORM) | JUnit | Entity Engine Tools, Data File Tool, CSV Parser, Apache POI | OOTB Security framework | Freemarker(Recommended), Velocity(Support Available), JSP(Support Available) | OOTB Cache Maintenance | Server side validation, Client Side Validation(Prototype) |
---|
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 | JSR 330 (Bean Validation) |
---|
Apache Wicket | Java | Extensions for YUI, ExtJS, more | Modular event driven | Pull | Yes | with extensions | Mock objects, unit and integration tests via extension | | Yes | Yes | Yes | Yes |
---|
FormEngine | Java | Yes | | | Yes | own connector API | | | | | | Ajax validation on server and form state update |
---|
Grails | Groovy | Yes | Active record pattern | Push | Yes | GORM, Hibernate | Unit tests, integration test, functional test | multiple plugins: autobase, dbmigrate, more | Spring Security,[11] Apache Shiro[12] | Yes | Yes | Yes |
---|
ItsNat | Java | Yes | event driven | Push | using Java i18n | | external, built-in | | pluggable | pure HTML-SVG | page caching | normal Java |
---|
JavaServer Faces | Java | Yes | Yes | Pull | Yes | Yes, with extensions | JUnit | | Yes | Facelets, JSP | Yes | Native validators, integration with Bean Validation |
---|
JBoss Seam | Java | Yes | Yes | Pull | Yes | JPA, Hibernate | JUnit, TestNG | | JAAS integration, Drools, Hibernate Filters, OpenID, CAPTCHA | Facelets | JBoss Cache, EHcache | Hibernate Validator |
---|
Jspx-bay | Java | Yes | Page oriented | | | Own API | | | JAAS integration | Master-content pages | | Yes, Internal UI validation controls |
---|
JVx WebUI | Java | Yes | Model Driven | | Yes | Yes, pluggable | JUnit | | Yes | Single sourcing | | Yes, pluggable |
---|
OpenXava | Java | Yes | Model Driven | | Yes | JPA, Hibernate, EJB2 CMP | JUnit | Hibernate tools | uses JSR-168 portal security | UI is automatically generated | uses portal and JPA caching | Yes |
---|
Play | Scala | Yes | Yes | Push-pull | Yes | JPA, Hibernate | JUnit, Selenium | Yes | via Core Security module | Yes | Yes | Server-side validation |
---|
Portofino | Java, Groovy | jQuery | Stripes | Push | Yes | Hibernate | | Liquibase | Apache Shiro | JSP, Stripes | Ehcache | Elements |
---|
RIFE | Java | DWR | Yes | Push-pull | Yes | Yes | Out of container testing | | Yes | Yes | Integration with Terracotta | Yes |
---|
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 | | 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 |
---|
WebObjects | Java | Yes | Yes | Push-pull | Yes | EOF | WOUnit (JUnit), TestNG, Selenium | in Project WONDER | | Yes | Yes | Yes |
---|
ztemplates | Java JDK 1.5 or newer | integrates YUI, Google, etc., with annotations | Yes | Push, multiple actions per URL | standard Java | use any J2EE ORM framework | Unit tests | | annotation based | Velocity, FreeMarker, JSP, others pluggable | | Ajax validation on server and form state update (YUI, JSON) |
---|
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,ZTL | HibernateUtil, SpringUtil | Spring Security | Macro components & composition | Yes | client, server |
---|
JavaScript Perl|
Catalyst | Perl | 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 | Perl | 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 |
---|
Mason | Perl | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
---|
Maypole | Perl | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
---|
Mojolicious | Perl | Toolkit-independent (REST & JSON support | No explicit model support though commonly used as MVC | Push | Yes | Yes | No | Test::Mojo | No | Yes | Built-in Perl templating, Template::Toolkit and several others via plugins | No |
---|
Reaction | Perl | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
---|
CGI::Application | Perl | 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 |
---|
PHP|
AppFlower | 2009-02 | PHP 5 | Yes, ExtJS | Yes | Push | Yes | Propel | Yes | Plugin exists | Plugin | Yes | Yes | Yes | Yes |
---|
CakePHP | 2005-08 | PHP >= 5.2 | Prototype, script.aculo.us, jQuery, jQuery UI, MooTools, MooTools More | Yes | Push | Yes | Active record pattern (CakePHP 1.x), data mapper pattern (CakePHP 2.x) | Unit tests, object mocking, fixtures, code coverage, memory analysis with SimpleTest and XDebug PHPUnit (cakephp 2.0) | Yes | ACL-based | Themes, layouts, views, elements | Memcache, XCache, APC, File | Validation, security | Yes |
---|
CodeIgniter | 2006-01 | PHP >= 5.1 | Any | Yes | Push | Mostly[13] | Third party only | Ready for next release | Yes | Yes | Yes | Yes | Yes | No[14] |
---|
Drupal | 2001-01 | PHP | jQuery, jQuery UI, more | PAC | N/A | Yes | Optional module | SimpleTest | Yes | Yes | Yes | Memcache, APC, Varnish, more | Yes | No |
---|
FuelPHP | 2010-10 | PHP >= 5.3.x | Yes | MVC, HMVC | Push | Yes | Yes | PHPUnit | Yes | Yes, Plugins available | Yes, Plugins available | File, Redis, Memcache, more | Yes | Yes |
---|
Fusebox | 1997-11 | PHP | Yes | Not mandatory | Push | No, custom | | | | Multiple plugins available | | | via qforms or built in PHP validation | Yes |
---|
Joomla | 2005-09 | PHP >= 5.3.x | Yes Mootools 1.3 | Yes | Push-pull | Yes | Yes | Unit tests | No | Yes | Yes | Yes | Yes | No |
---|
Kajona | 2004-06 | PHP 5 | Yes | Yes | Yes | Yes | Yes | Unit tests | Automatic | Yes | Yes | Yes | Yes | No |
---|
Laravel | 2011-04 | PHP >= 5.3 | Yes | Yes | Yes | Yes | Eloquent | PHPUnit | Yes | Yes | Yes | Yes | Yes | Yes |
---|
Midgard | 1999-05 | PHP | jQuery | MidCOM | Pull | Yes | Midgard | PHPUnit | datagard | ACL-based | PHP, TAL | Memcache | Yes | No |
---|
PHPixie | 2012-07 | PHP | Toolkit-independent | MVC, HMVC | Push | Yes | Yes, Active record pattern | PHPUnit | Yes, PHPixie Migration Module | Yes | PHP, HAML | APC, Database, File cache, eAccelerator, XCache | Yes, PHPixie Validation Module | No |
---|
PRADO | 2004-07 | PHP >= 5.3.0 | Prototype, script.aculo.us, own components[15] | Yes | Push-pull | Yes | Data access objects (DAO), active record pattern, SQLMap data mapper | PHPUnit | No | Yes | XML-based, similar to ASP.NETs[16] | APC, Database, eAccelerator, Memcached, XCache | Yes[17] | Yes[18] |
---|
Qcodo | 2005-10 | PHP 5 | built-in | QControl | Push | Yes | XML-based | | Inherent | | QForm and QControl | Yes | Yes | No |
---|
SilverStripe (Sapphire) | 2005-11 | PHP >= 5.2 | jQuery, jQuery UI | | Push-pull | Yes | Active record pattern | Unit tests | Automatic | incl. OpenID | | Yes | Yes | Yes |
---|
Symfony | 2005-10 | PHP 5 | 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 |
---|
Symfony 2 | 2010 | PHP >= 5.3.3 | Prototype, script.aculo.us, Unobtrusive Ajax with UJS and PJS plugins | Yes | Push | Yes | Propel, Doctrine (YAML) | Yes | Plugin exists (alpha code) | Yes | PHP, Twig | Yes | Yes | Yes |
---|
Yii | 2008-01 | PHP >= 5.1.0 | 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[19] |
---|
Zend Framework | 2006-03 | PHP >= 5.2.4 | Toolkit-independent | Yes | Push-pull | Yes | Table and row data gateway and Doctrine 2.0 for Zend Framework 2.0 | Unit tests | Yes | ACL-based | Yes | Yes | Yes | No |
---|
Zikula | 2008-06 | PHP | Yes | Yes | N/A | Yes | Yes | PHPUnit | Yes | Yes | Yes | Yes | Yes | No |
---|
Python|
CherryPy | Python | Yes | controller & URL dispatching | | Yes | ORM agnostic | use stdlib's unittest and doctest | depends on ORM | | Templating engine agnostic | Yes | Form validation engine agnostic | Yes |
---|
CubicWeb | Python | Yes | controller & URL dispatching | | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No |
---|
Flask | Python | Yes | Yes | Push | Yes | Yes | Yes | Yes | Yes | Jinja2 | Yes | Yes | No |
---|
Grok | Python | Yes | Yes | Pull | Yes | OODBMS called ZODB, SQLAlchemy, Storm | Unit tests, functional tests | ZODB Generations | Yes | Yes | Yes | Yes | |
---|
Pyjamas | 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 | Beaker cache (memory, memcached, file, databases) | preferred formencode | No |
---|
Pyramid | Python | Yes | Yes | Push | Yes | ORM-agnostic | Yes | depends on ORM | Yes | pluggable: Chameleon, Genshi; Mako, more | Beaker cache (memory, memcached, file, databases) | preferred formencode | Yes |
---|
Django | Python | Yes | Full stack | Push | Yes | Django ORM | Yes | Provided by South | ACL-based | Django Template Language | Cache Framework | Django Forms API | 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 | No |
---|
web2py | Python | Yes | Yes | Push | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No |
---|
Webware | Python | No | Optional | Pull | No | Yes | Yes | No | Yes | Yes | No | No | No |
---|
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 |
---|
mnml | Python | No | No | | No | No | only development server | No | | Templating engine agnostic | No | Form validation engine agnostic | No |
---|
Ruby Others|
AIDA/Web | Smalltalk | Yes | Yes | | Yes | Gemstone/S, GLORP, more | SUnit | | Yes | | | Yes |
---|
Application Express | PL/SQL | Yes | | | Yes | | | Yes | Yes | | | Yes |
---|
Kepler | Lua | | Yes | | | | | | | | | |
---|
Lift | Scala | Yes | Yes | Pull | Yes | Yes | | Yes | Yes | Yes | Yes | Yes |
---|
Ocsigen | OCaml | 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) |
---|
References- ^ http://weblogs.asp.net/scottgu/archiv e/2012/03/27/asp-net-mvc-web-api-razo r-and-open-source.aspx
- ^ http://codeigniter.com/news/codeignit er_2.1.3_released
- ^ http://www.qcodo.com/forums/forum.php /5/4377/
- ^ http://www.cubicweb.org/project/cubic web/3.15.2
- ^ https://www.djangoproject.com/weblog/ 2013/feb/26/15/
- ^ https://github.com/web2py/web2py/blob /master/CHANGELOG
- ^ http://flask.pocoo.org/docs/changelog /
- ^ http://www.tornadoweb.org/documentati on/releases/v2.3.0.html
- ^ http://zope2.zope.org/releases
- ^ URLRequest
- ^ Spring Security plugin
- ^ Apache Shiro plugin
- ^ Language helper included, must activate & set desired language by parsing HTTP headers.{http://codeigniter.com/user_guide/lib raries/language.html}
- ^ "Change Log : CodeIgniter User Guide". EllisLab, Inc.. http://codeigniter.com/user_guide/cha ngelog.html. Retrieved 19 March 2012.
- ^ http://www.pradosoft.com/demos/quicks tart/?page=ActiveControls.Home
- ^ http://www.pradosoft.com/demos/quicks tart/?page=Configurations.Templates1
- ^ http://www.pradosoft.com/demos/quicks tart/?page=Controls.Validation
- ^ http://www.pradosoft.com/demos/quicks tart/?page=Database.Scaffold
- ^ http://www.yiiframework.com/doc/blog/ 1.1/en/prototype.scaffold
See also |
| |