Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


High performance, full-stack PHP framework delivered as a C extension.

Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402 (5 ratings)
Rated 5.0 out of 5
Subscribe to updates I use cphalcon

Statistics on cphalcon

Number of watchers on Github 8755
Number of open issues 645
Average time to close an issue 2 days
Main language PHP
Average time to merge a PR 1 day
Open pull requests 159+
Closed pull requests 139+
Last commit over 1 year ago
Repo Created almost 8 years ago
Repo Last Updated over 1 year ago
Size 142 MB
Homepage https://phalconph...
Organization / Authorphalcon
Latest Releasev3.3.2
Page Updated
Do you use cphalcon? Leave a review!
View open issues (645)
View cphalcon activity
View on github
Fresh, new opensource launches πŸš€πŸš€πŸš€
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating cphalcon for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)
What people are saying about cphalcon Leave a review
Well-designed framework and features. Low memory consumption and CPU compared to traditional frameworks.
Best framework for hight load
Performance and wealth of features. You can achieve way more with less hardware and it also serves as a glue framework if you need it to be (i.e. not using all of its features if you don't want to).
No other PHP framework can match the performance of Phalcon with the same features. Phalcon is allowing you to do more with less resources. It is also designed to serve as a glue framework, so developers can use whatever they need in their application without deploying the full framework.

Phalcon Framework

Build Status Windows Build Phalcon Backers OpenCollective OpenCollective

Phalcon is an open source web framework delivered as a C extension for the PHP language providing high performance and lower resource consumption.

A big thank you to our Backers; you rock!


Get Started

Phalcon is written in Zephir/C with platform independence in mind. As a result, Phalcon is available on Microsoft Windows, GNU/Linux, FreeBSD and MacOS. You can either download a binary package for the system of your choice or build it from source.


To install Phalcon on Windows:

  1. Download Phalcon for Windows
  2. Extract the DLL file and copy it to your PHP extensions directory
  3. Edit your php.ini file and add this line: ini extension=php_phalcon.dll
  4. Finally, restart your web server

Hint: To ensure that your Phalcon installation was successful, debug with

<?php phpinfo(); ?>

and search for a section mentioning the Phalcon extension.


On a Unix-based platform you can easily compile and install the extension from sources.


Prerequisite packages are:

  • PHP 5.5.x/5.6.x/7.0.x/7.1.x/7.2.x development resources (PHP 5.3 and 5.4 are no longer supported)
  • g++ >= 4.4 | clang++ >= 3.x | vc++ >= 11
  • GNU make >= 3.81
  • re2c >= 0.13
# Use actual PHP development headers and tools here
sudo apt-get install php5-dev libpcre3-dev gcc make re2c
# Use actual PHP development headers and tools here
sudo zypper install php5-devel gcc make re2c
# Use actual PHP development headers and tools here
sudo yum install php-devel pcre-devel gcc make re2c
macOS(Sierra / El Capitan / Yosemite)

Using Homebrew

# brew install php<version>-phalcon
# available versions 56, 70, 71

brew install php71-phalcon

OSX MAMP ready extensions


There is Gentoo ebuilds maintained for the Phalcon Framework:


Follow these instructions to generate a binary extension for your platform:

git clone git://
cd cphalcon/build
sudo ./install

If you have specific php versions running

git clone
cd cphalcon/build
sudo ./install --phpize /usr/bin/phpize5.6 --php-config /usr/bin/php-config5.6

Add the extension to your php.ini:

Finally, restart the web server.


See for details.

External Links

Meet the Incubator

Our community is developing amazing extra features for Phalcon every day via Incubator. There are resources to enhance your experience with the framework and that enlarge the main features.

Just give it a try and help us improve Phalcon even more!


Become a sponsor and get your logo on our README on Github with a link to your site. [Become a sponsor]


Support us with a monthly donation and help us continue our activities. [Become a backer]


Phalcon is open source software licensed under the New BSD License. See the LICENSE.txt file for more.

cphalcon open issues Ask a question     (View All Issues)
  • almost 3 years [BUG] Phalcon Redis Backend is duplicating the prefix for writing but not for reading
  • almost 3 years Libmemcached and Memcached γ€Œget」 operation return the result is not consistent
  • almost 3 years Segfaults on user level (syntax) errors
  • almost 3 years Form element message not filled during form validation.
  • almost 3 years \Phalcon\Mvc\Model overrides change to field in belongsTo relation
  • almost 3 years Security tokens error
  • almost 3 years the variables in partials globalize after upgrade to 3.0.1 (volt)
  • almost 3 years [BUG] Assets Collection does not join when no filter is set.
  • almost 3 years Phalcon\Cache\Backend\File lifetime problem
  • almost 3 years Volt "include with" can be improved
  • almost 3 years [3.0.1] Returning string value in a Controller causes error when a dispatch cycle was modified/canceled.
  • almost 3 years Multi Checkbox
  • almost 3 years $model->save() is false when use setter/getter
  • almost 3 years Special characters("&", "?") in url
  • almost 3 years [BUG] Phalcon\Mvc\Model - serialize
  • about 3 years Non-expiring cache keys
  • about 3 years session use redis Adapter can't to destroy the data in php7
  • about 3 years [3.1.x]Model binding for micro, current state of it
  • about 3 years Tag: Checkbox cannot have value 0 and be checked
  • about 3 years Autodetect URL params
  • about 3 years Phalcon\Dispatcher::dispatcher() method's wasFresh variable
  • about 3 years About the route short paths
  • about 3 years Connection reset when DI has more than 10 arguments
  • about 3 years [NFR] Container Interface
  • about 3 years [NFR][PHP 7]beforeThrowable, beforeError in dispatcher
  • about 3 years [4.0.0]Change catch Exception to Throwable, drop PHP 5 support
  • about 3 years Add generated files /ext to .gitignore
  • about 3 years [NFR]Callback validator
  • about 3 years Flash\Direct to render on layout
  • about 3 years [BUG] \Phalcon\Mvc\View - setLayout and pick
cphalcon open pull requests (View All Pulls)
  • Refactored tests
  • Update postgresql.zep
  • #11372 Added methods andHaving(), orHaving(), betweenHaving(), notBetweenHaving(), inHaving(), notInHaving() in `Phalcon\Mvc\Model\Query\Builder`
  • Fix issue #11395 #11390
  • Use is_callable instead of method_exists on Dispatcher
  • Removed pointless property from Volt compiler
  • adding TYPE_ENUM to Phalcon\Db\Column
  • cleanup Phalcon\Session
  • Add metaDataFileMode option to Phalcon\Mvc\Model\Metadata\Files
  • Improves the logic of `Model`
  • Added @Annotation Model and Router classes for supporting IDE Stubs with PHP Annotation Plugin for PHPStorm
  • Run tests on php 7.0
  • 2.1.x
  • Fixes #11215
  • Fixed issue #11033
  • Amended PHPDoc to correctly generate documentation
  • Modify Redis Backend
  • Throw exception when calling appendMessage outside of validators
  • 2.0.x. Fix for queryKeys() ignoring prefix.
  • When http method is POST, getPut() should get an empty array
  • [2.1.x] Added new feature for pagination and also optional sets the aliases
  • Close cursor on $fetch function
  • Adding beforeException on Application. implement _handleException on getModule
  • Add 'index' option for Redis
  • [2.1.x] Avoid duplication of resources when adding a new one with existing name
  • Bugfix #10912 (Micro Middleware (before) does not stop operation)
  • Fix for incorrect page counts when using group by with the query builder pagination
  • [2.1.x] [NFR] Added events response:beforeSendHeaders, response:afterSendHeaders
  • [2.1.x] [NFR] Improving adapter session
  • Added UUID validator.
  • Fixed License
  • Phalcon\Tag::getTitle() shows a title depending on prependTitle and appendTitle
  • Added support for sql relay
  • Mcrypt is replaced with openssl
  • Phalcon\Tag::getTitle() shows a title depending on prependTitle and appendTitle
  • Fix view selection when multiple view directories have been set
  • ModelsManager::getHasOneAndHasMany() always returns an array.
  • Fix di array access
  • Modify cache redis backend
  • Redis now flushes properly
  • Queue beanstalk patch 1
  • Query Builder's GROUP BY field is now always an array
  • [WIP] Fixes sub-namespaces in annotation router
  • Criteria::FromInput functionality added
  • Added ability to call afterFetch method in Simple::toArray()
  • Modify cache redis backend
  • Firewall component, afterBinding in dispatcher
  • Added previousNamespaceName property to Dispatcher.
  • Fix segfault on PHP 7
  • fetch form elements after "bind" and "beforeValidation" are called
  • clear logger queue at commit
  • Removed converting the action name to lowercase in `Phalcon\Mvc\Route…
  • clear queue
  • Add ability to globally disable PHQL implicit joining
  • Fixes #11759 and deletes expired keys
  • modify phalcon/mvc/model/metadata/redis.zep, __construct, add share r…
  • Update micro.zep in order to fix 'after' Middleware not stopping execution flow..
  • refs #11709 - Add static closure
  • Amended Phalcon\Security
  • Changes to validation
  • Updates the prerequisite packages to compile the extension from sources
  • ORM: Case-insensitive column map option
  • FIX #11862 oracle lastinsertid should return int instead of array
  • Update ini.zep
  • PHP7 support
  • New Mailer Class
  • Fixes #11759 and deletes expired keys
  • Update ini.zep
  • Update all missing this->_lastKey update for backend cache
  • Fixed virtual foreign key check
  • Added totalCount config to Phalcon\Paginator\Adapter\QueryBuilder
  • Enable View test for PHP 7
  • Certain properties in Loader/Validation are now definitely always arrays
  • Compound relation fix #10368
  • The Events Manager now only uses Spl Priority Queues internally (no arrays)
  • MySQL dialect has missing schema check on some describe methods.
  • filter sanitize before compiling volt
  • 3.0.1
  • Prepend Class Auto Loader
  • if no header defined should return null
  • Install instructions for Gentoo with smoke-phalcon overlay
  • Update build/install-gentoo instructions with updates from build/install
  • handles "options" arg on Collection aggregate
  • Clarified that model validators should only be used with Collections
  • Mvc\Model\Manager::executeQuery() is now more succinct
  • Added Column::TYPE_TIME
  • 3.0.2
  • Amended Phalcon\Mvc\Model\Query\BuilderInterface::join() to specify type join
  • Renamed notSave event to notSaved in Collection.
  • Add DiTest::testPropertyAccess()
  • Added two new filters for use in the Filter->sanitization() method. …
  • Added "DISTINCT" type for Text::random()
  • Adding getOption method to the cli dispatcher. Adding options into the task handler.
  • Update cookie.zep
  • Fixed segfault in PHP5.6 dispatching, prevented double dispatch
  • [WIP] Moved some more unit tests to Codeception
  • Added ability to set custom Resultset class returned by find()
  • [WIP]Added Phalcon\Mvc\Model\Binder
  • [RFC] Converting Active Record to the Data Mapper pattern
  • 3.0.x Additional DI test
  • [4.0.0] [WIP] Strengthened parameter/return types
  • [4.0.0] MVC Application and Router now must have a URI to process
  • [4.0.0] Tag no longer uses static methods
  • [4.0.0] Response headers and cookies are no longer prematurely sent
  • [4.0.0] Removed deprecated methods
  • [4.0.0] Collections now use the Validation component
  • [4.0.0] CLI parameters now work like MVC parameters
  • Refactored ACL funcAccess
  • Cache\Backend\Redis::get method bugfix
  • Cache\Backend\Redis::exists method bugfix
  • Fixed call functions to null variable in Phalcon\Forms\Form
  • Fixed array_merge_recursive issue in Phalcon\Config\Adapter\Ini.zep
  • Removed Db\Column::_schemaName as its not used or accessible
  • added transaction parameter for Model::find()
  • Added smallint support in Phalcon\Db
  • Added retainer for current session token in order to not break checkToken functionality if getToken is called before.
  • Added DI services loading from php/yaml file for readability
  • Changed unset for array_splice to fix unsetting messages from validat…
  • IP generic validator.
  • Phalcon\Crypt safe base64 padding
  • Type time
  • [NFR] Micro: Response handler
  • [WIP] Added Phalcon\Validation for Phalcon\Mvc\Collection
  • refactor the phalcon/config.zep for issue #12613
  • refactor the phalcon/config.zep for issue #12613
  • Phalcon\Session\Bag: add of initialization for remove()
  • Added assets versioning
  • 3.0.4
  • Added way to get active key and active function from Phalcon\Acl\Adapter\Memory
  • Add service provider interface to configure services by context
  • Give different result from Resultset::delete() depending on success
  • [NFR] Add the ability to use FrontendInterface to serialize Model and ResultSet
  • if auth is null ignore them
  • Factory load for di
  • Method to check if relationship was loaded
  • beforeException event on Application getModule
  • 3.2.x Model hasChanged array
  • PostgreSQL. Duplicate table: 7 ERROR: relation" PRIMARY "already exists"
  • Fix getReservedAttributes
  • Update Travis build
  • Cleaned validators
  • Volt Compiler: Remove exception when stat option is true, and when fi…
  • Adding hasFunction/Auto Include PHP Functions Method To Volt Compiler
  • Fix session adapters
  • Update requirement
  • Add method `count` for Phalcon\Mvc\Model\Criteria
  • [NFR] Added json dataType support for MySQL dialect.
  • Service class changed and ServiceRegistry
  • Added arrayIterator class
  • Explicitly define nullable columns
  • Model::setSnapshotData() now properly sets the old snapshot.
  • Moved Model methods save(), create(), update(), delete(), and refresh() to Models Manager
  • Rewritten Phalcon\Logger\Multiple to make it consistent with Phalcon\Logger\AdapterInterface
  • Fix unit test for issue #12648 - Incorrect scope of view variables
  • Add method `count` for Phalcon\Mvc\Model\Criteria
  • Make shared instances removable.
  • Fix Dynamic update soft delete for renamed model does not work as exp…
  • Delete detailed mode for Class `Phalcon\\Debug\\Dump` , because the protected and private vars of the object should not be obtained outside.
  • Response reason phrase
cphalcon list of languages used
cphalcon latest release notes
v3.3.2 v3.3.2
  • Fixed Phalcon\Db\Dialect\Mysql::modifyColumn to produce valid SQL for renaming the column #13012
  • Fixed Phalcon\Forms\Form::getMessages to return back previous behaviour: return array of messages with element name as key #13294
  • Fixed Phalcon\Mvc\Model\Behavior\SoftDelete::notify to solve the exception that soft deletion renamed model #13302, #13306
  • Fixed E_DEPRECATED error for each() in Phalcon\Debug\Dump #13253
v3.3.1 v3.3.1
  • Fixed a boolean logic error in the CSS minifier and a corresponding unit test so that whitespace is stripped #13200
  • Fixed default Volt filter #13242, #13244
  • Fixed Phalcon\Validation\Validator\Date to return code in validation message
v3.3.0 v3.3.0
  • Added support of PHP 7.2 and initial support of PHP 7.3
  • Added support for switch/case syntax to the Volt Engine #13107
  • Added Phalcon\Logger\Adapter\Blackhole #13074
  • Added Phalcon\Http\Request::hasHeader to check if certain header exists
  • Added support of 103 (Early Hint) HTTP status code
  • Added router:beforeMount event to Router::mount #13158
  • Added Phalcon\Mvc\Application::sendHeadersOnHandleRequest to enable or disable sending headers by each request handling #13101
  • Added Phalcon\Mvc\Application::sendCookiesOnHandleRequest to enable or disable sending cookies by each request handling #13101
  • Added ability to use PDO option aliases on database connect #13010
  • Added Phalcon\Mvc\Model\MetaData\Apcu #13078
  • Added ability to use string(file path) as a argument in Phalcon\Config\Factory::load()
  • Added Phalcon\Mvc\Mico\Collection::mapVia to map routes via methods
  • Added Phalcon\Mvc\Model::setOldSnapshotData to set old snapshot data separately to current snapshot data
  • Added Phalcon\Http\Response::removeHeader to remove specific header from response
  • Added Phalcon\Mvc\Query::setTransaction to enable an override transaction #13226
  • Fixed Phalcon\Mvc\Model\Query\Builder::getPhql to correct generate PHQL in argument's array when using order DESC or ASC #11827
  • Fixed Phalcon\Db\Dialect\Postgresql::createTable to produce valid SQL for table definition with BOOLEAN types #13132
  • Fixed Phalcon\Db\Dialect\Postgresql::_castDefault to return correct value for BOOLEAN type #13132, phalcon/phalcon-devtools#1118
  • Fixed Phalcon\Mvc\Model::_doLowInsert to correct save snapshot on creation/save identityless models #13166
  • Fixed Phalcon\Mvc\Model::_doLowUpdate to correctly work with Phalcon\Db\RawValue #13170
  • Fixed Phalcon\Mvc\Model::allowEmptyStringValues to correct works with saving empty string values when DEFAULT not set in SQL
  • Fixed Phalcon\Mvc\Model\Behavior\SoftDelete to correctly update snapshots after deleting item
  • Fixed Phalcon\Mvc\Model to set old snapshot when no fields are changed when dynamic update is enabled
  • Fixed Phalcon\Acl\Adapter\Memory::isAllowed to properly pass role and resource objects to custom function if they are objects of the same class
  • Changed Phalcon\Mvc\Model to allow to pass a transaction within the query context #13226
Other projects in PHP