There's a newer version available. You should consider upgrading your project to Mako 8.1.


This guide takes you through the steps needed to migrate from Mako 7.3.x to 8.0.x.

Mako 8.0 drops support for PHP version 7.3 and requires PHP version 7.4 or higher so make sure that your environment is up to date.


The deprecated CacheManager::instance() method has been removed. Use the CacheManager::getInstance() or CacheManager::getStore() methods instead.

// Before

$cache = $this->cache->instance();

// Now

$cache = $this->cache->getInstance();

// Or

$cache = $this->cache->getStore();


The following reactor commands have been renamed:

Before Now
app.generate_preloader app:generate-preloader
app.generate_secret app.generate_secret
app.generate-key app:generate-key
app.routes app:routes
cache.clear cache:clear
cache.remove cache:remove
migrate.create migration:create
migrate.down migration:down
migrate.reset migration:reset
migrate.status migration:status
migrate.up migration:up
server app:server


The deprecated CryptoManager::instance() method has been removed. Use the CryptoManager::getInstance() or CryptoManager::getEncrypter() methods instead.

// Before

$cache = $this->crypto->instance();

// Now

$cache = $this->crypto->getInstance();

// Or

$cache = $this->crypto->getEncrypter();



The deprecated Connection::builder() method has been removed. Use the Connection::getQuery() method instead.

// Before

$query = $connection->builder();

// Now

$query = $connection->getQuery();

The deprecated Connection::table() method has been removed. It does not have direct replacement.

// Before

$query = $connection->table('foobar');

// Now

$query = $connection->getQuery()->table('foobar');


The deprecated ORM::builder() method has been removed. Use the ORM::getQuery() method instead.

// Before

$query = (new ORM)->builder();

// Now

$query = (new ORM)->getQuery();

Error handling

The mako\http\exceptions\HttpException exception has been renamed to mako\http\exceptions\HttpStatusException. Make sure to update your list of ignored exceptions in the application.php configuration file.


The deprecated Route::namespace() has been removed along with the deprecated namespace route group option. Route class method actions should now be registered as arrays instead of strings.


// Before

$routes->group(['namespace' => 'app\controllers'], function($routes)
    $routes->get('/', 'Index::welcome');

// Now

use app\controllers\Index;

$routes->get('/', [Index::class, 'welcome']);

Access Control middleware

The deprecated AccessControlAllowOrigin middleware has been removed and replaced by the new and improved AccessControl middleware.


Custom rules

The RuleInterface::validate() method now has 3 parameters instead of 2.

// Before

public function validate($value, array $input): bool;

// Now

public function validate($value, string $field, array $input): bool;

Renamed rules

The following input validation rules have been renamed:

Before Now
float numeric:float
integer numeric:int
natural_non_zero numeric:natural_non_zero
natural numeric:natural