From Wikipedia, the free encyclopedia
This is a comparison of notable web application frameworks.
General
Basic information about each framework.
Perl
PHP
Java
Python
Ruby
Project
|
Current Stable Version
|
Release Date
|
License
|
Summary
|
Camping
|
1.5.180
|
2007-01-06
|
MIT
|
a micro framework contained in a single ruby file
|
Merb
|
1.0.15
|
2009-11-04
|
MIT
|
project has merged with Ruby on Rails
|
Nitro
|
0.41
|
2006-12-12
|
BSD
|
project is no longer actively developed
|
Ruby on Rails
|
2.3.8
|
2010-05-25
|
MIT / Ruby
|
a full-featured and well-documented web framework
|
Ramaze
|
2010.04.04
|
2010-04-04
|
GPL
|
an extremely modular, customisable and flexible framework
|
Sinatra
|
1.0
|
2010-03-23
|
MIT
|
Rack-based, gentler learning curve
|
ASP.NET
Other
Comparison of Features
ASP.NET
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)
|
ASP.NET MVC
|
Yes
|
Yes
|
Push
|
|
ORM-independent
|
Unit Tests
|
|
ASP.NET Forms Auth
|
pluggable (default is WebForms)
|
Yes
|
Yes (client-side via plugins)
|
BFC
|
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
|
DotNetNuke
|
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
|
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
|
Vici MVC
|
Yes
|
Yes
|
Push
|
Yes
|
ORM-independent
|
Unit Tests
|
|
via ASP.NET Forms Authentication
|
Yes
|
No
|
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)
|
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
|
Push
|
Yes
|
Limited, SQL library
|
No
|
No
|
No
|
Yes
|
Yes
|
Yes
|
Wt
|
Yes
|
Yes
|
Push & Pull
|
Yes
|
Wt::Dbo
|
Boost.test
|
|
Yes
|
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)
|
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
|
Yes
|
Page Oriented
|
Pull
|
Yes
|
Hibernate and Cayenne
|
Yes
|
|
pluggable
|
Velocity and JSP
|
Cached Templates
|
Built-in validation
|
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 Wicket
|
Java
|
Yes, extensions for YUI, ExtJS and more
|
Modular event driven
|
Pull
|
Yes
|
Yes, with extensions
|
Yes, mock objects, unit and integration tests through an extension
|
|
Yes
|
Yes
|
Yes
|
Yes
|
Aranea
|
Java
|
Yes
|
|
Pull
|
Yes
|
Yes
|
|
|
|
mapping-applications using contributions from users to advantage
|
|
|
FormEngine
|
Java
|
Yes
|
|
|
Yes
|
own connector API
|
|
|
|
|
|
AJAX validation on server and form state update
|
ItsNat
|
Java
|
Yes
|
event driven
|
Push
|
using Java i18n
|
|
external and built-in
|
|
pluggable
|
pure HTML/SVG
|
page caching
|
normal Java
|
JBoss Seam
|
Java
|
Yes
|
Yes
|
Pull
|
Yes
|
JPA, Hibernate
|
JUnit, TestNG
|
|
JAAS integration, Drools, Hibernate Filters, OpenID, CAPTCHA
|
Facelets
|
JbossCache, EHCache
|
Hibernate Validator
|
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
|
Play
|
Java
|
Yes
|
Yes
|
Push and Pull
|
Yes
|
JPA, Hibernate
|
JUnit, Selenium
|
Separate module
|
via Core Security module
|
Yes
|
Yes
|
Server-side validation
|
RIFE
|
Java
|
DWR (Java)
|
Yes
|
Push & Pull
|
Yes
|
Yes
|
Out of container testing
|
|
Yes
|
Yes
|
Integration with Terracotta
|
Yes
|
Spring
|
Java
|
Yes
|
Yes
|
|
Yes
|
Hibernate, iBatis, etc
|
Yes, mock objects & unit tests
|
|
Spring Security (formerly Acegi)
|
Commons Tiles, Velocity, etc.
|
ehcache etc.
|
Commons Validator
|
Stripes
|
Java
|
Yes
|
Yes
|
Push
|
Yes
|
JPA, Hibernate
|
Yes
|
|
framework extension
|
Yes
|
|
Yes
|
Tapestry
|
Java
|
Yes
|
Yes
|
Pull
|
Yes
|
integrated with Hibernate (tapestry-hibernate module)
|
|
|
tapestry5-acegi library
|
Yes
|
|
built-in validation system
|
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
|
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
|
???, no direct data access
|
JUnit (too early), jsUnit (too difficult), Selenium (best)
|
No
|
|
|
|
|
ZK
|
Java, ZUML
|
Yes
|
Yes
|
Push & Pull
|
Yes
|
any J2EE ORM framework
|
Yes
|
|
Spring Security
|
macro components
|
Yes
|
client and server
|
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)
|
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)
|
Banshee PHP
|
PHP 5
|
Banshee AJAX, jQuery/jQuery UI
|
Yes
|
Push
|
|
|
Module demos, security audit script
|
No
|
ACL-based
|
XSLT
|
Yes
|
Yes
|
CakePHP
|
PHP
|
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
|
Yes
|
ACL-based
|
Themes, Layouts, Views and Elements
|
Memcache, Xcache, APC, File
|
Validation and Security
|
CodeCharge Studio
|
PHP 5
|
Prototype, Yahoo! UI Library, DIY
|
Yes
|
Push
|
Yes
|
Yes
|
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
CodeIgniter
|
PHP
|
Prototype/script.aculo.us, jQuery/jQuery UI]]
|
Modified active record pattern
|
Push
|
Yes
|
framework extension
|
Unit Tests
|
No
|
Yes
|
Yes
|
Yes
|
Yes
|
eZ Components
|
PHP
|
No
|
Yes
|
Push
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Fusebox
|
PHP
|
Yes
|
Not mandatory
|
Push
|
No, custom
|
|
|
|
multiple plugins available
|
|
|
via qforms or built in PHP validation
|
Midgard
|
PHP
|
jQuery
|
MidCOM
|
Pull
|
Yes
|
Midgard
|
PHPUnit
|
datagard
|
ACL-based
|
PHP and TAL
|
memcache
|
Yes
|
phunction
|
PHP 5
|
No
|
Optional
|
|
No
|
No
|
No
|
No
|
OpenID
|
Views
|
APC, File
|
Yes
|
Qcodo
|
PHP 5
|
built-in
|
QControl
|
Push
|
Yes
|
XML-based
|
|
Inherent
|
|
QForm and QControl
|
Yes
|
Yes
|
Simple Pattern Framework
|
PHP 5
|
DIY
|
Yes
|
Push
|
Yes
|
Active PHP
|
Database Query Debugger
|
No
|
Self Administered
|
Smarty
|
Yes
|
Self Administered
|
Symfony
|
PHP 5
|
Prototype, script.aculo.us, Unobtrusive Ajax with UJS and PJS plugins
|
Yes
|
Push
|
Yes
|
Propel, Doctrine (YAML)
|
Yes
|
Plugin exists (alpha code, though)
|
plugin
|
Yes
|
Yes
|
Yes
|
Zend Framework
|
PHP 5 (>=5.2.4)
|
Toolkit-independent
|
Yes
|
Push & Pull
|
Yes
|
Table and Row data gateway
|
Unit Tests
|
Yes
|
ACL-based
|
Yes
|
Yes
|
Yes
|
SilverStripe (Sapphire)
|
PHP 5 (>=5.2)
|
jQuery/jQuery UI
|
Active record pattern
|
Push & Pull
|
Yes
|
Active record pattern
|
Unit Tests
|
(Automatic)
|
incl. OpenID
|
(object oriented)
|
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)
|
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
|
No
|
controller & URL dispatching
|
|
Yes
|
ORM agnostic
|
use stdlib's unittest and doctest
|
depends on ORM
|
|
Templating engine agnostic
|
Yes
|
Form validation engine agnostic
|
Yes
|
Django
|
Python
|
Django uses jquery in the admin, but is js-agnostic in the user templates
|
Full Stack
|
Push
|
Yes
|
Django ORM
|
Yes
|
reusable applications which might get merged into core e.g. South
|
ACL-based
|
Django Template Language
|
Cache Framework
|
Django Forms API
|
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, etc.)
|
Beaker cache (memory, memcached, file, databases)
|
preferred formencode
|
No
|
TurboGears
|
Python
|
Toolkit-independent, provides support via JSON
|
Full stack, best-of-breed based
|
Push
|
Yes
|
SQLAlchemy
|
nose
|
No
|
Repoze.what & Repoze.who
|
Genshi, additional plugins available
|
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
|
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
|
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.*
|
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
|
Prototype, script.aculo.us
|
Yes
|
|
|
Gemstone/S, GLORP, etc.
|
SUnit
|
|
Yes
|
|
|
|
Catalyst
|
Perl
|
Toolkit-independent (REST & JSON support, specific plugins for Prototype etc.)
|
Yes
|
Push in its most common usage
|
Yes
|
DBIx::Class, Rose::DB::Object, etc.
|
[1]
|
|
ACL-based, external engines, etc.
|
Template::Toolkit, HTML::Template, HTML::Mason, etc.
|
Cache, Memcached, shared memory, etc.
|
HTML::FormFu, HTML::FormValidator, etc.
|
Flex
|
Actionscript, MXML
|
Not by name but similar technology [2]
|
|
|
|
|
FlexUnit
|
|
|
|
|
|
Grails
|
Groovy
|
Yes
|
Active record pattern
|
Push
|
Yes
|
GORM, Hibernate
|
Unit Test, Integration test, Functional test
|
multiple plugins(autobase, dbmigrate, etc.)
|
{{{1}}}
|
Yes
|
Yes
|
No
|
Lift
|
Scala
|
Yes
|
Yes
|
Pull
|
Yes
|
Yes
|
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Seaside
|
Smalltalk
|
Prototype, script.aculo.us, etc.
|
|
|
Yes
|
GLORP, Gemstone/S, etc.
|
Unit Tests, SUnit
|
|
|
No, intentionally
|
|
Magritte
|
OpenACS
|
TCL
|
Yes
|
Yes
|
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Yes
|
Sproutcore
|
Javascript
|
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)
|
References
See also