World Library  
Flag as Inappropriate
Email this Article

Comparison of web application frameworks

Article Id: WHEBN0009334615
Reproduction Date:

Title: Comparison of web application frameworks  
Author: World Heritage Encyclopedia
Language: English
Subject: PRADO (framework), Agavi, Lithium (PHP framework), Dancer (software), Jamroom
Collection: Software Comparisons, Web Application Frameworks
Publisher: World Heritage Encyclopedia
Publication
Date:
 

Comparison of web application frameworks

This is a comparison of notable web application frameworks.

Contents

  • General 1
    • ASP.NET 1.1
    • C 1.2
    • C++ 1.3
    • ColdFusion Markup Language (CFML) 1.4
    • Common Lisp 1.5
    • D 1.6
    • Haskell 1.7
    • Java 1.8
    • JavaScript 1.9
    • Scala 1.10
    • Perl 1.11
    • PHP 1.12
    • Python 1.13
    • Ruby 1.14
    • Others 1.15
  • Comparison of features 2
    • C++ 2.1
    • ColdFusion Markup Language (CFML) 2.2
    • Common Lisp 2.3
    • Java 2.4
    • JavaScript 2.5
    • Perl 2.6
    • PHP 2.7
    • Python 2.8
    • Ruby 2.9
    • Others 2.10
  • See also 3
  • References 4
  • External links 5

General

Basic information about each framework.

ASP.NET

Project Current stable version Release date License
ASP.NET Dynamic Data
Base One Foundation Component Library (BFC) 7.44 (dormant) 2013-07-19 Proprietary
Component-based Scalable Logical Architecture (CSLA) 4.5.601 2014-08-04[1] Proprietary freeware, no limit on use type
MonoRail 3.3.3 2014-11-06[2] Apache
OpenRasta 2.1.0.83282449 2011-09-28 MIT

C

Project Current stable version Release date License
Saetta Web Server 1.4.10 2014-11-22[3] Proprietary

C++

Project Current stable version Release date License
CppCMS 1.0.5 2014-10-30[4] LGPL, Proprietary
Poco 1.6.1 2015-08-03[5] Boost Software License
Tntnet 2.2.1 2014-01-17[6] LGPL
Wt 3.3.4 2015-03-25[7] GPL, Proprietary

ColdFusion Markup Language (CFML)

Project Current stable version Release date License
CFWheels 1.4.3 2015-10-16 Apache v2
ColdBox Platform 4.0.0 2015-01-22 Apache v2
ColdSpring 1.2 2008-09-12 Apache v2
Fusebox 5.5.2 2012-05-08 Apache
Mach-II 1.8.1 2010-09-20 GPLv3 with Classpath exception
Model-Glue 3.1.299 2010-03-05 Apache

Common Lisp

Project Current stable version Release date License
Caveman2 2.4.0 2015-06-05[8] LLGPL[9]

D

Project Current stable version Release date License
vibe.d 0.7.24 2015-08-10[10] MIT License

Haskell

Project Current stable version Release date License
Happstack 7.0 2012-03-29 BSD-3
Snap 0.13 2014-05-06 BSD-3
Yesod 1.4.1 2014-11-23[11] MIT License

Java

Project Current stable version Release date License
Apache Click 2.3.0 (retired) 2011-03-27 Apache 2.0
Apache OFBiz 13.07.01 2014-10-06 Apache 2.0
Apache Shale 1.0.4 (retired) 2007-12-19 Apache
Apache Sling 7 2014-10-03 Apache 2.0
Apache Struts 2 2.3.24 2015-05-07 Apache 2.0
Apache Tapestry 5.3.8 2014-11-20 Apache
Apache Wicket 7.0 2015-07-28 Apache 2.0
AppFuse 3.0 2013-12-23 Apache
Brutos Framework 2.0 2015-06-30 Apache 2.0
Eclipse RAP 2.3.1 2014-09-26 Eclipse
FormEngine 2.0.1 2012-05-08 Proprietary
Grails 3.0.9 2015-04-02 Apache
Google Web Toolkit 2.7.0 2014-11-20 Apache 2.0
Hamlets 1.7.1 2012-06-29 BSD
ItsNat 1.3.1 2013-06-30 GNU LGPL, proprietary
JavaServer Faces (Mojarra) 2.2.9 2014-12-18 CDDL, GNU GPL 2, Apache 2.0
JBoss Seam 3.1.0 final (discontinued) 2012-01-13 GNU LGPL
Jspx-bay 2.0 2014-04-01 Apache 2.0
JVx 2.1.1 2014-12-06 Apache 2.0
OpenLaszlo 4.9.0 (dormant) 2010-10-21 CPL
OpenXava 5.2 2015-01-27 GNU LGPL
Oracle ADF 12.1.3.0 2014-06-26 Oracle Technology Network Developer License
Play 2.4.1 2015-06-23 Apache 2.0
RIFE 1.6.1 (unmaintained) 2007-07-14 CDDL, GNU LGPL
Spark 2.3 2015-09-16 Apache
Spring 4.2.0 2015-07-31 Apache 2.0
Stripes 1.5.8 2014-07-07 Apache
Takes 0.9.5 2015-03-20 MIT
ThinWire 1.2 (unmaintained) 2007-09-17 GNU GPL
Vaadin 7.3.10 2015-02-03 Apache 2.0
VRaptor 4.1.4 2014-12-30 Apache 2.0
Wavemaker 6.5.3 2013-03-14 Apache
WebObjects 5.4.3 2008-09-15 Proprietary
WebWork 2.2.6 (unmaintained) 2007-07-21 Apache
Ze Framework 1.1 2014-07-16 BSD
ZK 7.0.3 2014-09-02 LGPL, ZOL
ztemplates 2.4.0 2011-09-11 Apache

JavaScript

Project Current stable version Release date License
AngularJS 1.4.0 2015-05-26 MIT License
KnockoutJS 3.2.0 2014-08-12 MIT License
Backbone.js 1.1.2 2014-02-20 MIT License
Ember.js 2.0.2 2015-09-07 MIT License
OpenUI5 1.26.8 2015-03-10 Apache 2.0 License by SAP
Node.js 4.1.2 2015-07-09 MIT License
Express.js 4.12.3 2015-03-17 MIT License
Unified.js 14.0 2014-04-01 BSD (component only) & proprietary

Scala

Project Current stable version Release date License
Play! 2.3.7 2014-12-03 Apache 2.0
Lift 2.6 2015-01-11 Apache 2.0
Scalatra 2.3.0 2014-06-11 BSD

Perl

Project Current stable version Release date License
Catalyst 5.90082 2015-01-11 Artistic, GPL
Dancer 1.5800 2015-01-01 Artistic, GPL
Mason 2.22 2014-02-01 Artistic, GPL
Maypole 2.13 (dormant) 2008-04-18 Artistic, GPL
Mojolicious 6.05 2015-03-24 Artistic

PHP

Project Start date Current stable version Release date License
Agavi 2005-05 1.0 2014-11-12 LGPL
Banshee 2008-10-04 5.0 2015-06-10 Banshee
CakePHP 2005-08 3.0.14[12] 2015-09-21 MIT
CodeIgniter 2006-02-28 3.0.0[13] 2015-03-31 MIT
Fat-Free 2009-09 3.5.0[14] 2015-06-02 GPLv3
FuelPHP 2011-08 1.7.3[15] 2015-05-20 MIT
Hazaar MVC 2012-10 1.3 2014-08-29 Apache 2.0
Kajona 2006 4.6 2014-12-18 LGPLv2
Laravel 2011-06-11 5.1[16] 2015-03-06 MIT
Lithium 2009-10 1.0.0-rc1[17] 2015-08-10 BSD
Nette Framework 2006-01[18] 2.3.1[19] 2015-03-27 New BSD, GPLv2, GPLv3[20]
Phalcon 2012-11-14 2.0.8 2015-09-24 BSD
PHPixie 2012-07 3 2014-10-01 BSD
PRADO 2004-01 3.2.4[21] 2014-08-26 New BSD[22]
SmartFramework 2014-05-16 1.2.10[23] 2015-10-28 BSD
Silex 2011-09 1.3.3 [24] 2015-09-08 MIT
SilverStripe 2007-02-03 3.1.15 [25] 2015-09-18 BSD
Symfony 2005-10 2.7.0[26] 2015-05-30 MIT
TYPO3 Flow 2011-10 2.3.1[27] 2014-11-14 LGPLv3
Yii 2 2008-01 2.0.6[28] 2015-08-06 New BSD
Zend Framework 2006-03 2.4.8[29] 2015-09-15 New BSD

Python

Project Current stable version Release date License
Bottle 0.12.8 2014-12-28[30] MIT
BlueBream 1.0 (dormant) 2011-01-18 ZPL
CherryPy 3.7.0 2015-04-24[31] BSD
CubicWeb 3.20.7 2015-04-22[32] LGPL
Django 1.8.5 2015-10-03[33] BSD
Flask 0.10.1 2013-06-14[34] BSD
Grok 2.8 (dormant) 2013-02-14[35] ZPL
Nagare 0.4.1 (dormant) 2012-01-18 BSD
Pyjs 0.8.1a (dormant) 2012-05-06 Apache
Pylons 1.0.1 (dormant) 2012-08-14 BSD
Pyramid 1.5.7 2015-04-28 BSD
TACTIC 4.3.0.v02 2015-03-31[36] EPL
Tornado 4.2 2015-05-26[37] Apache
TurboGears 2.3.5 2015-04-28[38] MIT, LGPL
web2py 2.11.2 2015-05-30[39] LGPL3
Webware 1.1.1 (dormant) 2013-01-18 Python
Zope 2 2.13.23 2015-06-29[40] ZPL

Ruby

Project Current stable version Release date License
Camping 2.1 (dormant) 2010-08-20 MIT
Padrino 0.12.5 2015-02-22[41] MIT
Ruby on Rails 4.2.3 2015-06-26 MIT
Sinatra 1.4.5 2014-04-08[42] MIT
Merb 1.1.3 (dormant) 2010-07-10 MIT
PureMVC 2.0.4 (dormant) 2008-08-14 CC +Attribution

Others

Project Language Current stable version Release date License
AIDA/Web Smalltalk 6.7 2014-09-14 MIT
Application Express PL/SQL 4.2.6 2014-09-24 Proprietary freeware
AWS Ada 2014 2014-03-22 GPL
Flex ActionScript, MXML 4.14 2015-02-03 Apache
Grails Groovy (JVM) 2.4.4 2014-10-28 Apache
Kepler Lua 1.1.1 (dormant) 2009-03-11 MIT
Morfik C#, BASIC, Pascal, Java 3.0.8.1 2010-12-13 Proprietary freeware
Ocsigen OCaml 4.2 2015-07-21[43] LGPL
Opa Opa 1.1.1 2013-04-16[44] MIT and AGPL
OpenACS Tcl 5.7.0 2011-07-17 GPL
Seaside Smalltalk 3.0 2010-09-13 MIT
Zotonic Erlang 0.12.4 2015-02-20 Apache

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
Tntnet Yes No No Yes Tntdb No No No Yes No No
Wt Yes Yes Push & Pull Yes Wt::Dbo Boost.test Yes Yes No Yes

ColdFusion Markup Language (CFML)

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)
ColdBox Platform Yes Yes Push-pull Yes Yes Yes via TestBox, MockBox via plugin Yes Yes Yes Yes
ColdFusion on Wheels Yes Yes Push via plugin jLingua Yes Yes integrated RocketUnit via plugin Yes Yes via layout.cfm 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

Common Lisp

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)
Caveman2 No - - No via third-party packages like Postmortem No via third-party packages like Postmortem No Yes Yes No

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
FormEngine Java Yes Yes own connector API Ajax validation on server and form state update
Grails Groovy Yes Yes Push Yes GORM, Hibernate Unit tests, integration test, functional test multiple plugins: autobase, dbmigrate, more Spring Security,[45] Apache Shiro[46] 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 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
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 Java, Scala Yes Yes Push-pull Yes JPA, Hibernate JUnit, Selenium Yes via Core Security module Yes Yes Server-side validation
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 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
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,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 (front-end)
EmberJS Yes Yes Yes Ember Data QUnit Handlebars
qooxdoo Yes Data binding i18n Testrunner Form Validation
SproutCore Yes Yes
Wakanda Yes Yes Push & Pull Native Object NoSQL DB CommonJS Unit Testing YUI Test Service Data Security and Access Control Storage (application.storage, user.storage, SessionStorage)

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
Mason ? ? ? ? ? ? ? ? ? ? ?
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
Laravel 5.x PHP >= 5.5.9 Any Yes ? Yes Yes ? Yes ? Yes ? Yes ? ? ?
Laravel <=4.x PHP >= 5.4 Any Yes ? Yes Yes ? Yes ? Yes ? Yes ? ? ?
Banshee PHP 5 Yes, native and JQuery Yes Push Yes Yes No No Yes Yes, XSLT Yes Yes Yes Yes Yes, Bootstrap
CakePHP 1 & 2 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, Redis, XCache, APC, File Validation, security Yes No ?
CakePHP 3 PHP >= 5.4 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 (CSRF Protection Plugin CRUD Cake Bake Mobile Agent Detection, Layouts
CodeIgniter PHP >= 5.2.4 Any Yes Push Mostly[47] Third party only Ready for next release Yes Yes Yes Yes Yes No[48] Yes Templates
Drupal PHP jQuery, jQuery UI, more PAC N/A Yes Optional module SimpleTest Yes Yes Yes Memcache, APC, Varnish, more Yes No No Yes
Fat-Free Framework PHP 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.x Yes MVC, HMVC Push Yes Yes PHPUnit Yes Yes, Plugins available Yes, Plugins available File, Redis, Memcache, more Yes Yes ? ?
Fusebox PHP Yes Not mandatory Push No, custom ? ? ? Multiple plugins available ? ? via qforms or built in PHP validation Yes ? ?
Joomla ? Yes Plugin ? ? ? ? ? ? ? ? ? ? ? ?
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 ?
Nette Framework PHP >= 5.3.0 Toolkit-independent MVP Push Yes Third party only Yes No Yes Yes Yes Yes No ? ?
Phalcon PHP >= 5.3 Yes Push Yes Yes Yes Yes Yes Volt Yes Yes Yes Yes ?
PRADO PHP >= 5.3.0 Prototype, script.aculo.us, own components[49] 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[50] APC, Database, eAccelerator, Memcached, XCache Yes[51] Yes[52] ? ?
SilverStripe (Sapphire) PHP >= 5.2 jQuery, jQuery UI Yes Push-pull Yes Active record pattern Unit tests, Selenium Automatic incl. OpenID Themes Yes Yes Yes Yes Yes
Solodev CMS PHP 5 jQuery, jQuery UI, more ? Push-pull Yes Yes Yes Yes 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 ? ?
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) Plugin PHP, Twig Yes Yes Yes ? ?
Symfony 2 PHP >= 5.3.3 Any Yes Push Yes Propel, Doctrine (YAML) Yes Plugin exists Yes PHP, Twig Yes Yes Yes ? ?
Yii 2 PHP >= 5.4.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 No ACL-based, RBAC-based, plugins PHP-based, PRADO-like, plugins APC, Database, eAccelerator, File, Memcache, Redis, WinCache, XCache, Zend Platform Yes Yes ? ?
Yii 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 ? ACL-based, RBAC-based, plugins PHP-based, PRADO-like, plugins APC, Database, eAccelerator, File, Memcache, Redis, WinCache, XCache, Zend Platform Yes Yes[53] ? ?
Zend Framework[54] PHP >= 5.3 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 ? ?
Zend Framework 2 PHP >= 5.3.3 Toolkit-independent Yes Push-pull Yes Table and row data gateway and Doctrine 2.0 for Zend Framework 2.0 Unit tests, PHP Unit or other independent Yes ACL-based Yes APC, Database, File, Memcache, Zend Platform Yes Yes ? ?
Zikula PHP Yes Yes N/A Yes Yes PHPUnit Yes Yes Yes Yes Yes No ? ?

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.*
Bottle Python - - - - Sqlalchemy (via plugins) - - - built-in, Mako, Jinja2, Cheetah - - Yes
CherryPy
Django Python Yes Yes Push Yes Yes Yes Yes Yes built-in, Jinja2, Mako, Cheetah Yes Yes Yes
Flask Python Yes - - Yes Sqlalchemy (via plugin) via unittest
Yes Jinja2 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
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 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

Ruby

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)
Camping No Yes Push No Active record pattern via Mosquito Yes No Yes No No
Ruby on Rails Prototype, script.aculo.us, jQuery ActiveRecord, Action Pack Push Yes ActiveRecord Unit Tests, Functional Tests and Integration Tests Yes Plug-in Yes Yes Yes
Sinatra No Yes Push No ORM-independent rack-test Yes through a Rack middleware Yes through a Rack middleware No

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[55] FlexUnit
Kepler Lua Yes
Lift Scala Yes Yes Pull Yes Yes ScalaTest, Selenium [56] 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)

See also

References


-- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --


local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno

local p = {}


-- Helper functions


local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end

local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end

function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end

function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end

function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end

function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end


-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.


function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end

function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end


-- Hatnote -- -- Produces standard hatnote text. Implements the template.


function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end

function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) local classes = {'hatnote'} local extraclasses = options.extraclasses local selfref = options.selfref if type(extraclasses) == 'string' then classes[#classes + 1] = extraclasses end if selfref then classes[#classes + 1] = 'selfref' end return string.format( '
%s
', table.concat(classes, ' '), s )

end

return p-------------------------------------------------------------------------------- -- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --


local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno

local p = {}


-- Helper functions


local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end

local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end

function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end

function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end

function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end

function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end


-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.


function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end

function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end


-- Hatnote -- -- Produces standard hatnote text. Implements the template.


function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end

function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) local classes = {'hatnote'} local extraclasses = options.extraclasses local selfref = options.selfref if type(extraclasses) == 'string' then classes[#classes + 1] = extraclasses end if selfref then classes[#classes + 1] = 'selfref' end return string.format( '
%s
', table.concat(classes, ' '), s )

end

return p
  1. ^
  2. ^ http://www.castleproject.org/download/
  3. ^ http://izysoftware.com/news/news.php?id=210
  4. ^
  5. ^
  6. ^
  7. ^
  8. ^
  9. ^
  10. ^
  11. ^
  12. ^
  13. ^
  14. ^
  15. ^
  16. ^
  17. ^
  18. ^
  19. ^
  20. ^
  21. ^
  22. ^
  23. ^
  24. ^ http://silex.sensiolabs.org/
  25. ^ http://www.silverstripe.org/software/download/
  26. ^
  27. ^
  28. ^
  29. ^
  30. ^ http://bottlepy.org/docs/dev/changelog.html#release-0-12
  31. ^ https://pypi.python.org/pypi/CherryPy/3.7.0
  32. ^ http://www.cubicweb.org/project/cubicweb
  33. ^
  34. ^
  35. ^
  36. ^
  37. ^
  38. ^
  39. ^
  40. ^
  41. ^
  42. ^ https://github.com/sinatra/sinatra/blob/v1.4.5/CHANGES
  43. ^ http://ocsigen.org/eliom/changelog
  44. ^
  45. ^
  46. ^
  47. ^
  48. ^
  49. ^
  50. ^
  51. ^
  52. ^
  53. ^
  54. ^
  55. ^
  56. ^

External links

  • Time Saving Web Development Frameworks and Kits
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and USA.gov, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for USA.gov and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
 
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
 
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.
 


Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.