Comparison of server-side web frameworks
Appearance
This is a comparison of notable web application frameworks.
General
![]() | This section needs to be divided into subsections. |
Basic information about each framework.
Comparison of features
![]() | This section needs to be divided into subsections. |
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 | Prototype, script.aculo.us | Yes | Gemstone/S, GLORP, etc. | SUnit | Yes | ||||||
Agavi | PHP | Toolkit-independent | Yes | Push | Yes | Doctrine & Propel integration | PHPUnit | Yes | Any template engine supported | Yes | Yes | |
Ajile | JavaScript | Yes | Yes | Push & Pull | Yes | jsUnit | Yes | Yes | ||||
Akelos | PHP | Prototype, script.aculo.us | Active record pattern | Push | Yes | Active record pattern | Unit Tests | Yes | Yes | Yes | Yes | |
Apache Click | Java | Yes | Yes | Pull | Yes | Hibernate and Cayenne | Velocity and JSP | Built-in validation | ||||
Apache Struts | Java | Yes | Yes | Push & Pull | Yes | Yes | Unit Tests | Yes | Yes | |||
Apache Wicket | Java | Yes | Modular event driven | Pull | Yes | Yes | Yes | Yes | Yes | Yes | ||
Aranea | Java | Yes | Pull | Yes | Yes | mapping-applications using contributions from users to advantage | ||||||
ASP.NET MVC | ASP.NET | Yes | Yes | Push | ORM-independent | Unit Tests | ASP.NET Forms Auth | pluggable (default is WebForms) | Yes | Yes (client-side via plugins) | ||
BFC | ASP.NET | Yes | Not mandatory | Push & Pull | Yes | through active data dictionary | Unit Tests | SQL Server, Oracle, DB2, Sybase, MySQL | security groups and rules | Yes | metadata and result sets | data dictionary-driven |
CakePHP | PHP | Prototype, script.aculo.us | Active record pattern | Push | Yes | Active record pattern | Unit Tests | Yes | ACL-based | Yes | Yes | Yes |
Camping | Ruby | No | Yes | Push | No | Active record pattern | via Mosquito | Yes | No | Yes | No | No |
Catalyst | Perl | Toolkit-independent (REST & JSON support, specific plugins for Prototype etc.) | Yes | Push in its most common usage | Yes | DBIx::Class, Rose::DB, etc. | [1] | ACL-based, external engines, etc. | Template::Toolkit, HTML::Template, HTML::Mason, etc. | Cache, Memcached, shared memory, etc. | HTML::FormFu, HTML::FormValidator, etc. | |
CherryPy | Python | Yes | No, because unittest and doctest are standard Python modules | CherryTemplate | Yes | |||||||
CodeIgniter | PHP | framework extension | Modified active record pattern | Push | Yes | framework extension | Unit Tests | No | Yes | Yes | Yes | Yes |
CppCMS | C++ | Yes | Push | Yes | Limited, SQL library | No | No | No | Yes | Yes | Yes | |
Django | Python | Yes | Yes | Push | Yes | Django ORM | Yes | No (plugin exists, might be merged into trunk when more stable and feature complete) | ACL-based | Yes | Yes | Yes |
DotNetNuke | ASP.NET | Yes | No | Pull | Yes | SubSonic, NHibernate | Unit Tests | Yes | ACL-based (OpenID, LiveID, Active Directory, LDAP, CardSpace, ASP.NET Forms Auth) | Yes | Pluggable | ASP.NET Validators, built-in API |
Drupal | PHP | jQuery | Yes[2][3] | Yes[4][5] | multiple (CCK, QCubed)[6] | simpletest, devel | Schema API | OG, Node Privacy By Role, ACL, Taxonomy Access List | PHPTemplate, Smarty, XTemplate, others | builtin, memcache, APC | Form API | |
eZ Components | PHP | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
Flex | Actionscript, MXML | Not by name but similar technology [7] | FlexUnit | |||||||||
FUSE | PHP | Yes | Yes | Push | custom | Yes | SimpleTest | Yes | Yes | Yes | Yes | |
Fusebox | ColdFusion, PHP | Yes | Not mandatory | Push | No, custom | via lexicons for Transfer and Reactor | CFUnit, CFCUnit | multiple plugins available | via lexicon for ColdSpring | via qforms or built in cf validation | ||
Google Web Toolkit | Java, Javascript | Yes | Yes | ???, no direct data access | JUnit (too early), jsUnit (too difficult), Selenium (best) | No | ||||||
Grails | Groovy | Yes | Active record pattern | Push | Yes | GORM, Hibernate | Unit Test | multiple plugins(autobase, dbmigrate, etc.) | Yes | Yes | Yes | Yes |
Grok | Python | Yes | Yes | Pull | Yes | OODBMS called ZODB, SQLAlchemy, [[Storm (software)}|Storm]] | Unit Tests, Functional Tests | ZODB Generations | Yes | Yes | Yes | Yes |
ItsNat | Java | Yes | event driven | Push | using Java i18n | external and built-in | pluggable | pure HTML/SVG | page caching | normal Java | ||
IT Mill Toolkit | Java | GWT | Pull | Yes | Yes | JUnit, IT Mill Testing Tools | Yes | Yes | ||||
JBoss Seam | Java | Yes | Pull | Yes | JPA, Hibernate | JUnit, TestNG | JAAS integration | Facelets | Hibernate Validator | |||
Kohana | PHP | Yes | Push | Yes | framework extension | unit_test module | File and SQLite Driver based caches | Yes | ||||
Lift | Scala | Yes | Yes | Yes | Yes | |||||||
Mach-II | CFML | via CF or any JavaScript Library | Yes | Push | via custom plugin | Transfer, Reactor, Hibernate | CFUnit, CFCUnit | via plugin | ColdSpring | |||
Midgard | PHP | jQuery | MidCOM | Pull | Yes | Midgard | PHPUnit | datagard | ACL-based | PHP and TAL | memcache | Yes |
MonoRail | ASP.NET | Prototype | Active record pattern | Push | Yes | Active record pattern | Unit Tests | via ASP.NET Forms Authentication | Yes | Yes | Yes | |
Nitro | Ruby | jQuery | Yes | Push | Yes | Og | RSpec | (automatic) | Yes | Yes | Yes | Yes |
onTap | ColdFusion | native features + Prototype + script.aculo.us | optional | Push | Yes | DataFaucet [3] | CFUnit, CFCUnit, MXUnit | DataFaucet has potential - supports multiple db platforms | Members onTap Plugin | very extensible | Yes | client + server, extensible |
OpenACS | TCL | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
OpenXava | Java | Yes | Model Driven | Yes | JPA, Hibernate and EJB2 CMP | JUnit | Hibernate tools | uses JSR-168 portal security | UI is automatically generated | uses portal and JPA caching | Yes | |
Orinoco | PHP | Toolkit-independent | Yes | Push & Pull | Yes | |||||||
PEAR | PHP | |||||||||||
Pyjamas | Python, Javascript | Yes | Yes | ???, no direct data access | No | |||||||
Pylons | Python | helpers for Prototype and script.aculo.us | Yes | Push | Yes | SQLObject, SQLAlchemy | via nose | pluggable (mako, genshi, myghty, kid, etc.) | Beaker cache (memory, memcached, file, databases) | preferred formencode | ||
Qcodo | PHP 5 | built-in | QControl | Push | Yes | Code Generation-based | Inherent | QForm and QControl | Yes | Yes | ||
RIFE | Java | DWR (Java) | Yes | Push & Pull | Yes | Yes | Out of container testing | Yes | Yes | Integration with Terracotta | Yes | |
Ruby on Rails | Ruby | Prototype, script.aculo.us | ActiveRecord, Action Pack | Push | Localization Plug-in | ActiveRecord | Unit Tests, Functional Tests and Integration Tests | Yes | Plug-in | Yes | Yes | Yes |
Seaside | Smalltalk | Prototype, script.aculo.us, etc. | Yes | GLORP, Gemstone/S, etc. | Unit Tests, SUnit | No, intentionally | Magritte | |||||
SilverStripe (Sapphire) | PHP 5 (>=5.2) | Prototype, script.aculo.us | Active record pattern | Push & Pull | Yes | Active record pattern | Unit Tests | (Automatic) | incl. OpenID | (object oriented) | Yes | Yes |
Spring | Java | Yes | Yes | Hibernate, iBatis, etc | Spring Security (formerly Acegi) | Commons Tiles, Velocity, etc. | ehcache etc. | Commons Validator | ||||
Stripes | Java | Yes | Yes | Push | Yes | Hibernate | Yes | framework extension | Yes | Yes | ||
Symfony | PHP 5 | Prototype, script.aculo.us, Unobtrusive Ajax with UJS and PJS plugins | Yes | Push | Yes | Propel, Doctrine | Yes | Plugin exists (alpha code, though) | plugin | Yes | Yes | Yes |
Tapestry | Java | Yes | Yes | Pull | Yes | integrated with Hibernate (tapestry-hibernate module) | tapestry5-acegi library | Yes | built-in validation system | |||
Tigermouse | PHP 5 | it is mostly Ajax-only framework | Active record pattern | Push | Yes | Active record pattern | No | No, Multiple RBMSes and access libraries supported | through intercepting filters (ACL-based, customizable) | Yes | No | Yes |
TurboGears | Python | Toolkit-independent, provides support via JSON | Yes | Push | Yes | SQLAlchemy (default), SQLObject | nose | No | Repoze.what & Repoze.who | Genshi, additional plugins available | Support for memcached, and any WSGI compliant system | ToscaWidgets, utilizing FormEncode |
Vaadin | Java | GWT | Pull | Yes | Yes | Yes | Yes | Yes | ||||
Wavemaker | JavaScript (client), Java (server) | Dojo Toolkit | Yes | Push | Dojo Toolkit | Hibernate (Java) | JUnit | Hibernate (Java) | Spring Security, Acegi, Role-based access control | Dojo Toolkit | Dojo Toolkit | Regular expression, schema-driven validation |
web2py | Python | Yes | Yes | Push | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
WebObjects | Java | Yes | Yes | Push & Pull | Yes | EOF | WOUnit (JUnit), TestNG, Selenium | in Project WONDER | Yes | Yes | Yes | |
Wigbi | PHP, JavaScript | Wigbi AJAX engine, jQuery, MooTools | No | No | Custom | Wigbi ORM engine | Plug-in | Plug-in | ||||
ZK | Java, ZUML | Yes | Yes | Yes | any J2EE ORM framework | |||||||
Zend | PHP 5 (>=5.2.4) | Toolkit-independent | Yes | Push & Pull | Yes | Table and Row data gateway | Unit Tests | Yes | ACL-based | Yes | Yes | Yes |
Zope 2 | Python | Yes | Pull | Yes | native OODBMS called ZODB, SQLObject, SQLAlchemy | Unit Tests | ACL-based | Yes | Yes | CMFFormController | ||
Zope 3 | Python | via add-on products, e.g. Plone w/KSS | Yes | Pull | Yes | native OODBMS called ZODB, SQLObject, SQLAlchemy | Unit Tests, Functional Tests | ZODB generations | ACL-based | 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) | ||
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://www.phpwact.org/php/mvc_frameworks
http://java-source.net/open-source/web-frameworks
http://pythonsource.com/open-source/web-frameworks