Comparison of server-side web frameworks
Appearance
![]() | It has been suggested that List of web application frameworks, Talk:Comparison_of_web_application_frameworks#Merge_List_of_web_application_frameworks_into_Comparison_of_web_application_frameworks and User:The Wild Falcon be merged into this article. (Discuss) Proposed since September 2007. |
This is a comparison of notable web application frameworks.
General
Basic general information about the features
Comparison of features
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, Prototype, script.aculo.us | Yes | Yes | Yes, Gemstone/S, GLORP, ... | Yes, SUnit | Yes | |||||
Ajile | JavaScript | Yes | Yes | Push & Pull | Yes | Yes, jsUnit | Yes | Yes | ||||
Akelos PHP Framework | PHP | Yes, Prototype, script.aculo.us | Yes, Active record pattern | Push | Yes | Yes, Active record pattern | Yes, Unit Tests | Yes | Yes | Yes | Yes | |
Apache Struts | Java | Yes | Yes | Push | Yes | Yes | Yes, Unit Tests | Yes, Jakarta Tiles framework | Yes, Jakarta Validator framework | |||
Struts2 | Java | Yes | Yes | Push & Pull | Yes | Yes | Yes, Unit Tests | Yes | Yes | |||
Aranea MVC | Java | Yes | Pull | Yes | Yes | |||||||
BFC | .NET | Yes | Yes, but not mandatory | Push & Pull | Yes | Yes, through active data dictionary | Yes, Unit Tests | Yes, SQL Server, Oracle, DB2, Sybase, MySQL | Yes, security groups and rules | Yes | Yes, metadata and result sets | Yes, data dictionary-driven |
CakePHP | PHP | Yes, Prototype, script.aculo.us | Yes, Active record pattern | Push | Yes, Development branch | Yes, Active record pattern | Yes, Unit Tests | Yes | Yes, ACL-based | Yes | Yes, Development branch | Yes |
Camping | Ruby | No | Yes | Push | No | Yes, Active record pattern | Yes, via Mosquito | Yes | No | Yes | No | No |
Catalyst | Perl | Yes, multiple (Prototype, Dojo...) | Yes | Push in its most common usage | Yes | Yes, multiple (DBIx::Class, Rose::DB...) | Yes[1] | Yes, multiple (ACL-based, external engines...) | Yes, multiple (Template::Toolkit, HTML::Template, HTML::Mason...) | Yes, multiple (Memcached, TurckMM, shared memory,...) | Yes, multiple (HTML::FormValidator,...) | |
CJAX | PHP | Yes, | Yes | Push & Pull | Yes | Yes, (framework extension) | Yes Unit Tests | Yes, framework extension | Yes, framework extension | Yes, framework extension | Yes, framework extension | |
CherryPy | Python | Yes | No, because unittest and doctest are standard Python modules | Yes, CherryTemplate | Yes | |||||||
Click Framework | Java | Yes | Yes | Pull | Yes | Yes, integrates with Hibernate and Cayenne | Yes, Velocity and JSP | Yes, built-in validation | ||||
CodeIgniter | PHP | Yes, Framework extension | Yes, Modified Active record pattern | Push | Yes | Yes, framework extension | Yes, Unit Tests | No | Yes | Yes | Yes | Yes |
ColdBox Framework | ColdFusion | Yes, various libraries | Yes | Push & Pull (via Viewlets) | Yes | Yes, Transfer & Reactor | Yes, Unit Tests | No | Yes, via plugins or interceptors | Yes ColdBox Cache Manager and externally pluggable. | Yes | |
Django | Python | Yes | Yes | Push | Yes | Yes, Django ORM, SQLAlchemy | Yes | No (plugin exists, might be merged into trunk when more stable and feature complete) | Yes, ACL-based | Yes | Yes | Yes |
DotNetNuke | .NET | Yes | No | Pull | Yes | Yes, SubSonic, NHibernate | Yes, Unit Tests | Yes | Yes, ACL-based, (OpenID, LiveID, Active Directory, LDAP, CardSpace, ASP.NET Forms Auth) | Yes | Yes, Pluggable | Yes, ASP.NET Validators, built-in API |
Drupal | PHP | Yes, jQuery | Yes[2] [3] | Yes | Yes, multiple (CCK, Qcodo[4]) | Yes, simpletest, devel | Yes, Schema API | Yes, multiple (OG, Node Privacy By Role, ACL, Taxonomy Access List) | Yes, multiple (PHPTemplate, Smarty, XTemplate, others) | Yes, multiple (builtin, memcache, APC) | Yes, Form API | |
eZ Components | PHP | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
Flex | Actionscript, MXML | No | Yes,FlexUnit | |||||||||
FUSE | PHP | Yes | Yes | Push | Yes, custom | Yes | Yes, SimpleTest | Yes | Yes | Yes | Yes | |
Fusebox | ColdFusion, PHP | Yes | Yes, but not mandatory | Push | No, custom | Yes, via lexicons for Transfer and Reactor | Yes, CFUnit, CFCUnit | Yes, multiple plugins available | Yes, via lexicon for ColdSpring | Yes, via qforms or built in cf validation | ||
Google Web Toolkit | Javascript | Sure | ???, no direct data access | JUnit (too early), jsUnit (too difficult), Selenium (best) | No | |||||||
Grails | Groovy | Yes | Active record pattern | Push | Yes | Yes, GORM, Hibernate | Yes, Unit Test | No | Yes | Yes | Yes | Yes |
Grok (web framework) | Python | Yes, | Yes | Pull | Yes | Yes, OODBMS called ZODB, SQLAlchemy, Storm | Yes, Unit Tests, Functional Tests | Yes, ZODB Generations | Yes | Yes | Yes | Yes |
JBoss Seam | Java | Yes | Pull | Yes | Yes, JPA, Hibernate | Yes, JUnit, TestNG | Yes, JAAS integration | Yes, Facelets | Yes, Hibernate Validator | |||
jZeno | Java | Yes | Yes | Pull | No, custom | Yes Hibernate | Yes, JUnit, TestNG | Yes, role-based | Yes, Composite Pattern | Yes | Yes | |
Kohana | PHP | Yes | Push | Yes | Yes, framework extension | Yes, unit_test module | Yes, File and SQLite Driver based caches | Yes | ||||
LecoWeb | Java | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
Lift | Scala | Yes | Yes | Yes | Yes | |||||||
Lainsoft Forge | Java, JRuby | Yes (not restricted) | Yes | Yes, via plug-in | Yes, via plug-in | Yes, via plug-in | Yes | Yes | Yes | |||
Mach-II | ColdFusion | Yes, via CF or any JavaScript Library | Yes | Push | Yes, via custom plugin | Yes Transfer, Reactor, Hibernate | Yes, CFUnit, CFCUnit | Yes, via plugin | Yes, ColdSpring | |||
MonoRail | .NET | Yes, Prototype | Active record pattern | Push | Yes | Yes, Active record pattern | Yes, Unit Tests | Yes, via ASP.NET Forms Authentication | Yes | Yes | Yes | |
Nitro | Ruby | Yes, jQuery | Yes | Push | Yes | Yes, Og | Yes, RSpec | Yes (automatic) | Yes | Yes | Yes | Yes |
onTap | ColdFusion | Yes, native features + Prototype + script.aculo.us | Yes, but not mandatory | Push | Yes | Yes | Yes, CFUnit, CFCUnit | has potential - supports multiple db platforms | Yes, Members onTap Plugin | Yes | Yes | Yes, client + server |
OpenXava | Java | No | Yes, Model Driven | Yes | Yes, JPA, Hibernate and EJB2 CMP | Yes, JUnit | Yes, Hibernate tools | Yes, uses JSR-168 portal security | UI is automatically generated | Yes, uses portal and JPA caching | Yes | |
Pal | PHP5 | Yes, Ajax Components | Yes | Push and Pull | No, roll your own | Yes, optional Active record pattern, arbitrary SQL | No, still not completed | Yes, via plugins and filters | Yes, via plugins | Yes, allows both memcache and caching pages | Yes, built-in extensible validation | |
PHPulse | PHP5 | Yes | Yes | Push | Yes | No, integrated DB objects | No, optional | Yes | Yes | Yes | Yes | |
PRADO | PHP5 | Yes, Active Controls | Yes | Push | Yes | Yes, Active record pattern, SQLMap | Yes, PHPUnit, SimpleTest, Selenium (software) | Yes, modular and role-based ACL | Yes | Yes | Yes | |
Pylons | Python | Yes, helpers for Prototype and script.aculo.us | Yes | Push | Yes | Yes, SQLObject, SQLAlchemy | Yes, via nose | Yes, pluggable (mako, genshi, myghty, kid, ...) | Yes, Beaker cache (memory, memcached, file, databases) | Yes, preferred formencode | ||
Qcodo | PHP5 | Yes, built-in | Yes, QControl | Push | Yes | Yes, Code Generation-based | Inherent | Yes, QForm and QControl | Yes | Yes | ||
RIFE | Java | Yes, DWR (Java) | Yes | Push & Pull | Yes | Yes | Yes, Out of container testing | Yes | Yes | Yes, Integration with Terracotta | Yes | |
RoxPHP | PHP5 | Yes | Push | Yes | Yes, Active record pattern | No | Yes | Yes | Yes | |||
Ruby on Rails | Ruby | Yes, Prototype, script.aculo.us | Yes, ActiveRecord, Action Pack | Push | Yes, Localization Plug-in | Yes, ActiveRecord | Yes, Unit Tests, Functional Tests and Integration Tests | Yes | Yes, Plug-in | Yes | Yes | Yes |
Seaside | Smalltalk | Yes, Prototype, script.aculo.us, ... | Yes | Yes, GLORP, Gemstone/S, ... | Yes, Unit Tests, SUnit | No, intentionally | Yes, Magritte | |||||
SilverStripe/Sapphire | PHP 5.2+ | Yes, Prototype, script.aculo.us | Yes, Active record pattern | Push & Pull | Yes | Yes, Active record pattern | Yes, Unit Tests | Yes (Automatic) | Yes incl. OpenID | Yes (object oriented) | Yes | Yes |
Spring Framework | Java | Yes | Yes | Yes hibernate, iBatis, etc | Yes, Acegi | Commons Tiles, velocity etc | Yes, ehcache etc | Commons Validator | ||||
Stripes | Java | Yes | Yes | Push | Yes | Yes, Hibernate | Yes | Yes, framework extension | Yes | Yes | ||
Symfony | PHP5 | Yes, Prototype, script.aculo.us, Unobtrusive Ajax with UJS and PJS plugins | Yes | Push | Yes | Yes, Propel, Doctrine | Yes | Plugin exists (alpha code, though) | Yes, plugin | Yes | Yes | Yes |
Tapestry | Java | Yes | Yes | Pull | Yes | Yes, integrated with Hibernate(tapestry-hibernate module) | Yes, tapestry5-acegi library | Yes | Yes, built-in validation system | |||
Tigermouse | PHP5 | Yes, it is mostly Ajax-only framework | Yes, Active record pattern | Push | Yes | Yes, Active record pattern | No | No, Multiple RBMSes and access libraries supported | Yes, through intercepting filters (ACL-based, customizable) | Yes | No | Yes |
TurboGears | Python | Yes, MochiKit | Yes | Push | Yes | Yes, SQLObject, SQLAlchemy | Yes, nose | No | Yes, pluggable authentication providers, user->group<-permissions schema | Yes, pluggable: Kid, Genshi, any Buffet-compatible engine | No | Yes, TurboGears widgets, ToscaWidgets, both utilizing FormEncode |
WaveMaker Visual Ajax Studio | JavaScript (client), Java (server) | Yes, Dojo Toolkit | Yes | Push | Yes, Dojo Toolkit | Yes, Hibernate (Java) | Yes, JUnit | Yes, Hibernate (Java) | Yes, Spring Security, Acegi, Role-based access control | Yes, Dojo Toolkit | Yes, Dojo Toolkit | Yes, 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 | Yes, EOF | Yes, WOUnit (JUnit), TestNG, Selenium (software) | Yes, in Project WONDER | Yes | Yes | Yes | |
Wicket | Java | Yes | Modular event driven | Push | Yes | Yes | Yes | Yes | Yes | Yes | ||
Widgetplus | JavaScript | Yes it is mostly Ajax-only framework | Yes | Push & Pull | Yes | No, | Yes, | No, | Yes | Yes | Yes | Yes |
Zend Framework | PHP5 (>=5.1.4) | Yes, various libraries | Yes | Push | Yes | Yes, Table and Row data gateway | Yes, Unit Tests | Yes | Yes, ACL-based | Yes | Yes | Yes |
ZK Framework | Java | Yes, 170+ Ajax components | Yes | Push & Pull | Yes | Yes, any ORM frameworks, such as Hibernate, TopLink | Yes, Unit Tests, Functional Tests | Yes, plugin, like Acegi | Yes, DSP, Velocity, JSP, others pluggable | Yes | Yes, constraint, event validation, others pluggable | |
Zope2 | Python | Yes | Pull | Yes | Yes, native OODBMS called ZODB, SQLObject, SQLAlchemy | Yes, Unit Tests | Yes, ACL-based | Yes | Yes | Yes, CMFFormController | ||
Zope3 | Python | Yes, via add-on products, e.g. Plone w/KSS | Yes | Pull | Yes | Yes, native OODBMS called ZODB, SQLObject, SQLAlchemy | Yes, Unit Tests, Functional Tests | Yes, ZODB generations | Yes, ACL-based | Yes | Yes | Yes |
ztemplates | Java jdk 1.5 or newer | Yes, integrates YUI, Google etc. with annotations | Yes | Push, multiple actions per url | Yes, standard Java | Yes, use any J2EE ORM framework | Yes, Unit Tests | Yes, annotation based | Yes, Velocity, JSP, others pluggable | Yes, ZProperty | ||
Lion Framework | PHP | Yes | Yes | Yes Push & Pull | Yes | No | Yes | No | Yes | Yes | Yes | Yes |
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) |