Comparison of server-side web frameworks
From EverybodyWiki Bios & Wiki
This article or section possibly contains synthesis of material which does not verifiably mention or relate to the main topic. (February 2026) (Learn how and when to remove this template message) |
This is a comparison of notable web frameworks, software used to build and deploy web applications. This article focuses on frameworks used for building the backend.
General
Basic information about each framework.
Systems listed on a light purple background are no longer in active development.
ASP.NET
| Project | Current stable version | Release date | License |
|---|---|---|---|
| ASP.NET Dynamic Data | |||
| Base One Foundation Component Library (BFC) | 7.51 | 2018-06-01 | Proprietary |
| Component-based Scalable Logical Architecture (CSLA) | 4.11.2 | 2019-07-31[1] | MIT |
| MonoRail | 2.1 | 2011-03-17[2] | Apache |
C++
| Project | Current stable version | Release date | License |
|---|---|---|---|
| CppCMS | 2.0.1 | 2025-11-02[3] | MIT |
| Drogon | 1.9.5 | 2024-06-08[4] | MIT |
| Poco | Template:POCO C++ Libraries version | Template:POCO C++ Libraries version | Boost Software License |
| Wt | 4.10.4 | 2024-03-06[5] | GPL, Proprietary |
ColdFusion Markup Language (CFML)
| Project | Current stable version | Release date | License |
|---|---|---|---|
| ColdBox Platform | Template:ColdBox Platform version | Template:ColdBox Platform version | Apache v2 |
Elixir
| Project | Current stable version | Release date | License |
|---|---|---|---|
| Phoenix | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
Haskell
| Project | Current stable version | Release date | License |
|---|---|---|---|
| Snap | 1.1.3.2[6] | 2023-07-19 | BSD-3 |
| Yesod | Template:Yesod (web framework) version | Template:Yesod (web framework) version | MIT License |
Java
| Project | Current stable version | Release date | License |
|---|---|---|---|
| Apache Click | 2.3.0 | 2011-03-27 | Apache 2.0 |
| Apache OFBiz | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | Apache 2.0 |
| Apache Shale | 1.0.4 | 2007-12-19 | Apache |
| Apache Sling | 12 | 2022-03-18 | Apache 2.0 |
| Apache Struts | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | Apache 2.0 |
| Apache Tapestry | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | Apache 2.0 |
| Apache Wicket | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | Apache 2.0 |
| AppFuse | 3.5.0 | 2015-02-20 | Apache 2.0 |
| Eclipse Mojarra (Jakarta Faces RI) | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | CDDL, GNU GPL 2, Apache 2.0 |
| Eclipse RAP | 4.1 | 2024-12-04 | Eclipse |
| Grails | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | Apache |
| Google Web Toolkit | 2.12.2 | 2025-03-03 | Apache 2.0 |
| JBoss Seam | 3.1.0 final | 2012-01-13 | GNU LGPL |
| JWt | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | GPL, Proprietary |
| Netty | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | Apache License 2.0 |
| OpenLaszlo | 4.9.0 | 2010-10-21 | CPL |
| Oracle ADF | 12.2.1.4 | 2019-10-09 | Oracle Technology Network Developer License |
| Play | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | Apache 2.0 |
| Spring | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | Apache 2.0 |
| Stripes | 1.6.0 | 2015-07-23 | Apache |
| Vaadin | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | Apache 2.0 |
| Wavemaker | 11.6.0[7] | 2024-03-03 | Apache |
| WebObjects | 5.4.3 | 2008-09-15 | Proprietary |
JavaScript
| Project | Current stable version | Release date | License |
|---|---|---|---|
| Analog | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
| Express.js | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
| Fastify | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
| Meteor | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
| NestJS | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
| Next.js | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
| Nuxt | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
| Remix | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
| Sails.js | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
| SvelteKit | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT License |
Perl
| Project | Current stable version | Release date | License |
|---|---|---|---|
| Catalyst | Template:Catalyst (software) version | Template:Catalyst (software) version | Artistic, GPL |
| Dancer | Template:Dancer (software) version | Template:Dancer (software) version | Artistic, GPL |
| Maypole | 2.13 | 2008-04-18 | Artistic, GPL |
| Mojolicious | Template:Mojolicious version | Template:Mojolicious version | Artistic |
PHP
Python
| Project | Current stable version | Release date | License |
|---|---|---|---|
| BlueBream | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | ZPL |
| CherryPy | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | BSD |
| CubicWeb | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | LGPL |
| Django | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | BSD |
| FastAPI | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT |
| Flask | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | BSD |
| Google App Engine | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | LGPL, Proprietary |
| Grok | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | ZPL |
| Gunicorn | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT |
| Pylons | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | BSD |
| Pyramid | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | BSD |
| Tornado | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | Apache |
| TurboGears | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT, LGPL |
| web2py | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | LGPL3 |
| Zope 2 | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | ZPL |
Ruby
| Project | Current stable version | Release date | License |
|---|---|---|---|
| Padrino | 0.14.4 | 2019-01-14[15] | MIT |
| Ruby on Rails | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT |
| Sinatra | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value). | Lua error in Module:Wd at line 2189: attempt to index field 'wikibase' (a nil value).; Error: first parameter cannot be parsed as a date or time. | MIT |
Scala
| Project | Current stable version | Release date | License |
|---|---|---|---|
| Lift | 3.4.3 | 2020-11-28 | Apache 2.0 |
| Play | 2.8.8 | 2021-04-08 | Apache 2.0 |
| Scalatra | 2.8.1 | 2021-09-25 | BSD |
Others
| Project | Language | Current stable version | Release date | License |
|---|---|---|---|---|
| AIDA/Web | Smalltalk | 6.7 | 2014-09-14 | MIT |
| Oracle APEX | PL/SQL | 22.2 | 2022-11-10 | Proprietary freeware |
| Flex | ActionScript, MXML | 4.16.1 | 2019-11-23 | Apache |
| Grails | Groovy (JVM) | 6.2.2[16] | 2024-11-20 | Apache |
| Morfik | C#, BASIC, Pascal, Java | 3.0.8.1 | 2010-12-13 | Proprietary freeware |
| Opa | Opa | 1.1.1 | 2013-04-16[17] | MIT and AGPL |
| OpenACS | Tcl | 5.10.1[18] | 2024-09-03 | GPL |
| Rocket | Rust | 0.5.1[19] | 2024-05-23 | MIT or Apache |
| Tokio | Rust | 1.48.0[20] | 2025-10-14 | MIT |
| Seaside | Smalltalk | 3.5.9[21] | 2024-10-20 | MIT |
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 |
| 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 | Quick & cbORM | Yes via TestBox | Yes | Yes | CFML | Yes | Yes |
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 | |
| Grails | Groovy | Yes | Yes | Push | Yes | GORM, Hibernate | Unit tests, integration test, functional test | multiple plugins: autobase, dbmigrate, more | Spring Security,[22] Apache Shiro[23] | Yes | Yes | Yes |
| 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 | |
| JWt | Java | Yes | Yes | Push-pull | Yes | Yes | Yes | Yes | ||||
| Play | Java, Scala | Yes | Yes | Push-pull | Yes | JPA, Hibernate | JUnit, Selenium | Yes | via Core Security module | Yes | Yes | Server-side validation |
| 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 | |
| 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) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Analog | Yes via Angular |
Yes | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
| Express.js | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
| Fastify | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
| Meteor | N/A | N/A | N/A | N/A | MongoDB | N/A | N/A | N/A | N/A | N/A | N/A |
| NestJS | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
| Next.js | Yes via React |
Partial via Flux |
No | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
| Nuxt | Yes via Vue.js |
Yes | Unknown | Unknown | Unknown | Yes via Vue.js |
Unknown | Unknown | Yes via Vue.js |
Unknown | Unknown |
| Remix | Yes via React |
Partial via Flux |
No | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
| Sails.js | Yes | Yes | Unknown | Unknown | Yes | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
| SvelteKit | Yes via Svelte |
Yes | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Yes via Svelte |
Unknown | Unknown |
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 |
| 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 | PHP version | 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CakePHP | ≥ 8.2[24] | 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 (DAO), Entity (VO) & Controller), CSRF Protection | Plugin CRUD | Cake Bake | Mobile Agent Detection, Layouts |
| CodeIgniter | ≥ 8.1[25] | Any | Yes | Push | Mostly[26] | Third party only | Ready for next release, Unit tests for v.4 and up | Yes | Yes | Yes | Yes | Yes | No[27] | Yes | Templates |
| Fat-Free Framework | ≥ 5.4[28] | 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 | ≥ 5.3.3[29] | Yes | MVC, HMVC | Push | Yes | Yes | PHPUnit | Yes | Yes, Plugins available | Yes, Plugins available | File, Redis, Memcache, more | Yes | Yes | ? | ? |
| Gyroscope | ≥ 5.4 | nano.js, replaceable[30] | LCHH | Push-pull | Mostly | Data-source agnostic | No | Built-in Schema comparison tool and UDF editor | ACL-based, replaceable | Implementation-specific; helper functions and theme templates available | APC, Memcache | Yes | Interactive code generator | Yes | Dedicated mobile and tablet layouts, landscape-portrait transformation |
| Kajona | ≥ 7[31] | Any | Yes | Push | Yes | Yes | PHPUnit, Selenium, Jasmine | Yes | Yes | Yes | APC, Database, File | Yes | Yes | Yes | Bootstrap |
| Laminas (formerly Zend Framework) | ≥ 7.3[32] | 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 | ? | ? |
| Laravel | ≥ 8.0[33] | Any | Yes | Push | Yes | Eloquent | PHPUnit | Yes | Yes | Yes | APC, Database, File, Memcache, Redis | Yes | Yes | Yes | Yes |
| Li3 (Lithium) | ≥ 8.0[34] | 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 | ? |
| Phalcon | ≥ 8.0[35] | Any | Yes | Push | Yes | Yes | Codeception PHPUnit | Yes | Yes | Volt, PHP | APC, Memcache, Memory, Redis, Redis Cluster, File | Yes | Yes | Yes | ? |
| Pop PHP | ≥ 8.3 | Any | Yes | Push | Yes | Yes | PHPUnit with CI via GitHub Actions | Yes | ACL-based | Yes | APC, Database, File, Memcache, Redis, Session | Yes | Yes | Yes | ? |
| PRADO | ≥ 7.3[36] | Prototype, script.aculo.us, own components[37] | 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[37] | APC, Database, eAccelerator, Memcached, XCache | Yes[37] | Yes[37] | ? | ? |
| SilverStripe (Sapphire) | ≥ 7.1[38] | jQuery, jQuery UI | Yes | Push-pull | Yes | Active record pattern | Unit tests, Selenium | Automatic | incl. OpenID | Themes | Yes | Yes | Yes | Yes | Yes |
| Silex | ≥ 5.3.9 | Yes | Yes | Yes | Yes | Plugin exists (Doctrine) | Yes | No | Yes | PHP, Twig | Plugin exists | Yes | Plugin exists | ? | ? |
| Smart.Framework | ≥ 7.4[39] | Yes | Yes | Yes | Yes | Yes (PostgreSQL, MySQL, SQLite, MongoDB, Solr, others via plugins) | Yes | No | Yes | Yes (Markers, Twig, others via plugins) | Yes (File, Redis, others via plugins) | Yes | No | Yes | Yes, (jQuery mobile, Bootstrap, others via plugins) |
| Symfony | ≥ 8.1[40] | 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 | ? | ? |
| TYPO3 | ≥ 7.2[41] | Any | Yes | Push-pull | Yes | Yes | Yes | Partial | Yes | TYPO3 Fluid | Yes | Yes | Plugin exists | Plugin exists | ? |
| Yii | ≥ 5.4[42] | 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[43] | ? | ? |
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 | — | — | — | — | pluggable | — | — | — | pluggable | — | — | Yes |
| Django | Python | Yes | Yes | Push | Yes | Yes | Yes | Yes | Yes | built-in, Jinja2, Mako, Cheetah | Yes | Yes | Yes |
| FastAPI | Python | Yes | — | — | — | ORM-agnostic | via pytest | depends on ORM | Yes | Jinja2 | — | Yes | Yes |
| Flask | Python | Yes | — | — | Yes | ORM-agnostic | via unittest | depends on ORM | Yes | Jinja2 | Yes | Yes | Yes |
| Jam.py | Python, JavaScript | Yes | Event driven | Yes | Yes | Yes | via pytest and mocha | Yes | Yes | Yes | Yes | Yes | Yes |
| 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 | native: pluggable: Redis, Beaker (memory, memcached, file, databases) | preferred formencode | No | |
| Pyramid | Python | Yes | Yes | Push | Yes | ORM-agnostic | Yes | depends on ORM | Yes | pluggable: Jinja2, Chameleon, Mako, Genshi, more | default: native session factory. pluggable: Redis, PyNaCl, Beaker (memory, memcached, file, databases), more | deform, formencode, WTForms, more | 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 | Yes[44] |
| 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) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 Rack middleware | Yes | through 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[45] | FlexUnit | |||||||||
| Lift | Scala | Yes | Yes | Pull | Yes | Yes | ScalaTest, Selenium[46] | Yes | Yes | 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
Lists of frameworks for frontend development:
Other:
- Common Gateway Interface, used before web frameworks
- Comparison of shopping cart software
- Content management system
- Dynamic web page
- Java view technologies and frameworks
- List of content management systems
- List of rich web application frameworks
- List of web service frameworks
References
- ↑ "Version 4.11.2". Github. Retrieved 4 September 2019.
- ↑ "Download - Castle Project". castleproject.org. Archived from the original on 2017-06-07. Retrieved 2015-01-02. Unknown parameter
|url-status=ignored (help) - ↑ "CppCMS Blog". Blog.cppcms.com. Archived from the original on 2013-08-03. Retrieved 2023-11-04. Unknown parameter
|url-status=ignored (help) - ↑ "drogonframework/drogon". GitHub. Retrieved 2024-07-10.
- ↑ "Wt: Release notes". www.webtoolkit.eu. Archived from the original on 2017-08-06. Retrieved 2024-07-10. Unknown parameter
|url-status=ignored (help) - ↑ "snapframework/snap". github.com.
- ↑ "WaveMaker 11.6.0 - Release date: 03 March 2024 | WaveMaker Docs". www.wavemaker.com. 2024-03-04. Retrieved 2024-03-06.
- ↑ "Antradar Downloads". antradar.com. 2023-11-24. Archived from the original on 2023-11-29. Retrieved 2023-12-24. Unknown parameter
|url-status=ignored (help) - ↑ "Releases". github.com. Archived from the original on 29 July 2017. Retrieved 10 June 2017. Unknown parameter
|url-status=ignored (help) - ↑ "Release 3.8.0 · laminas/laminas-mvc". GitHub. Retrieved 2025-06-19.
- ↑ "phalcon/cphalcon". github.com. Retrieved 2026-01-19.
- ↑ "Releases - popphp/popphp-framework". github.com. 2019-10-17. Archived from the original on 2020-10-20. Retrieved 2019-05-30. Unknown parameter
|url-status=ignored (help) - ↑ "PRADO PHP Framework". prafoframework.net. Retrieved 9 June 2020.
- ↑
"License of PRADO". pradosoft.com. 2013. Archived from the original on 2013-10-16. Retrieved 2013-10-16. Unknown parameter
|url-status=ignored (help) - ↑ "Padrino 0.14.4 release". Padrino. Retrieved 5 September 2019.
- ↑ "Introducing Grails Framework 6.2.2 Release". grails.org. Retrieved 2024-12-29.
- ↑ "The Opa Blog: Some great news on Opa". Blog.opalang.org. Archived from the original on 2013-02-28. Retrieved 2013-08-18. Unknown parameter
|url-status=ignored (help) - ↑ "OpenACS Home". openacs.org. Archived from the original on 2024-12-18. Retrieved 2024-12-30. Unknown parameter
|url-status=ignored (help) - ↑ "Releases · rwf2/Rocket". GitHub.
- ↑ "Release Tokio v1.48.0 · tokio-rs/Tokio". GitHub.
- ↑ "Releases · SeasideSt/Seaside · GitHub". GitHub. 25 October 2024. Archived from the original on 29 July 2017. Retrieved 19 July 2021. Unknown parameter
|url-status=ignored (help) - ↑ "Grails Plugin: Spring Security Core Plugin". Grails.org. 2012-04-06. Archived from the original on 2013-08-23. Retrieved 2013-08-18. Unknown parameter
|url-status=ignored (help) - ↑ "Grails Plugin: Apache Shiro Integration for Grails". Grails.org. 2012-04-11. Archived from the original on 2013-08-23. Retrieved 2013-08-18. Unknown parameter
|url-status=ignored (help) - ↑ "Installation - 5.x". book.cakephp.org. Retrieved 2026-01-19. Unknown parameter
|url-status=ignored (help) - ↑ "Server Requirements — CodeIgniter 4 documentation". codeigniter.com. Retrieved 2025-02-23.
- ↑ "Language helper included, must activate & set desired language by parsing HTTP headers". Codeigniter.com. Archived from the original on 2012-11-08. Retrieved 2013-08-18. Unknown parameter
|url-status=ignored (help) - ↑ "Change Log : CodeIgniter User Guide". EllisLab, Inc. Archived from the original on 15 May 2015. Retrieved 19 March 2012. Unknown parameter
|url-status=ignored (help) - ↑ "Getting Started - Fat-Free Framework for PHP". fatfreeframework.com. Archived from the original on 2025-02-23. Retrieved 2025-02-23. Unknown parameter
|url-status=ignored (help) - ↑ "Requirements - FuelPHP Documentation". fuelphp.com. Archived from the original on 2020-11-26. Retrieved 2020-12-02. Unknown parameter
|url-status=ignored (help) - ↑ "Replacing nano.js in Gyroscope". antradar.com. 2014-05-20. Archived from the original on 2016-09-28. Retrieved 2015-08-20. Unknown parameter
|url-status=ignored (help) - ↑ "Kajona 6.2 shifts the focus to PHP 7". www.kajona.de. Archived from the original on 2020-01-18. Retrieved 2020-12-02. Unknown parameter
|url-status=ignored (help) - ↑ "Zend/Laminas Drops PHP support prior to 7.3". GitHub. Retrieved 2021-01-06.
- ↑ "Laravel - The PHP Framework For Web Artisans". laravel.com. Archived from the original on 2021-02-07. Retrieved 2022-04-23. Unknown parameter
|url-status=ignored (help) - ↑ UnionOfRAD. "lithium/CHANGELOG.md at 2.0 · UnionOfRAD/lithium". GitHub. Retrieved 2026-01-19.
- ↑ "Phalcon v5.8 supports only PHP 8.0 and above".
- ↑ "PRADO PHP Framework". www.pradoframework.net. Archived from the original on 2022-05-26. Retrieved 2022-04-23. Unknown parameter
|url-status=ignored (help) - ↑ 37.0 37.1 37.2 37.3 "PRADO QuickStart Tutorial". Pradosoft.com. Archived from the original on 2013-09-28. Retrieved 2013-08-18. Unknown parameter
|url-status=ignored (help) - ↑ "Server Requirements". docs.silverstripe.org. Archived from the original on 2022-12-21. Retrieved 2020-12-02. Unknown parameter
|url-status=ignored (help) - ↑ "Smart.Framework: a practical, modern and high performance PHP / JavaScript Framework for Web featuring Middlewares + MVC". GitHub. Archived from the original on 2022-04-23. Retrieved 2026-01-19. Unknown parameter
|url-status=ignored (help) - ↑ "Installing & Setting up the Symfony Framework (Symfony Docs)". symfony.com. Archived from the original on 2022-09-25. Retrieved 2022-09-25. Unknown parameter
|url-status=ignored (help) - ↑ "Download TYPO3 - get.typo3.org". get.typo3.org. Archived from the original on 2019-01-28. Retrieved 2020-12-02. Unknown parameter
|url-status=ignored (help) - ↑ "Getting Started: Installing Yii". Yii Framework. Retrieved 2020-12-02.
- ↑ "Initial Prototyping: Scaffolding | Building a Blog System Using Yii | Yii PHP Framework". Yiiframework.com. Archived from the original on 2013-07-24. Retrieved 2013-08-18. Unknown parameter
|url-status=ignored (help) - ↑ "invalid function (default/images)". Web2py.com. Archived from the original on 2019-03-28. Retrieved 2019-03-21. Unknown parameter
|url-status=ignored (help) - ↑ "URLRequest - Adobe ActionScript 3 (AS3 ) API Reference". Livedocs.adobe.com. 2013-07-01. Archived from the original on 2009-02-12. Retrieved 2013-08-18. Unknown parameter
|url-status=ignored (help) - ↑ "ScalaTest". ScalaTest. Archived from the original on 2013-11-05. Retrieved 2013-08-18. Unknown parameter
|url-status=ignored (help)
This article "Comparison of server-side web frameworks" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Comparison of server-side web frameworks. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.
