The bootstrap is located at application/bootstrap.php. It is responsible for setting up the Kohana environment and executing the main response. It is included by index.php (see Request flow)

The bootstrap is responsible for the flow of your application. In previous versions of Kohana the bootstrap was in system and was somewhat of an unseen, uneditible force. In Kohana 3 the bootstrap takes on a much more integral and versatile role. Do not be afraid to edit and change your bootstrap however you see fit.

Environment setup

First the bootstrap sets the timezone and the locale, and adds Kohana's autoloader so the cascading filesystem works. You could add any other settings that all your application needed here.

// Sample excerpt from bootstrap.php with comments trimmed down

// Set the default time zone.

// Set the default locale.
setlocale(LC_ALL, 'en_US.utf-8');

// Enable the Kohana auto-loader.
spl_autoload_register(array('Kohana', 'auto_load'));

// Enable the Kohana auto-loader for unserialization.
ini_set('unserialize_callback_func', 'spl_autoload_call');

Initialization and Configuration

Kohana is then initialized by calling Kohana::init, and the log and config reader/writers are enabled.

// Sample excerpt from bootstrap.php with comments trimmed down

    base_url' => '/kohana/',
    index_file => false,

// Attach the file writer to logging. Multiple writers are supported.
Kohana::$log->attach(new Kohana_Log_File(APPPATH.'logs'));

// Attach a file reader to config. Multiple readers are supported.
Kohana::$config->attach(new Kohana_Config_File);

You can add conditional statements to make the bootstrap have different values based on certain settings. For example, detect whether we are live by checking $_SERVER['HTTP_HOST'] and set caching, profiling, etc. accordingly. This is just an example, there are many different ways to accomplish the same thing.

// Excerpt from
... [trimmed]

 * Set the environment status by the domain.
if (strpos($_SERVER['HTTP_HOST'], '') !== FALSE)
    // We are live!
    Kohana::$environment = Kohana::PRODUCTION;

    // Turn off notices and strict errors
    error_reporting(E_ALL ^ E_NOTICE ^ E_STRICT);

 * Initialize Kohana, setting the default options.
 ... [trimmed]
    'base_url'   => Kohana::$environment === Kohana::PRODUCTION ? '/' : '/',
    'caching'    => Kohana::$environment === Kohana::PRODUCTION,
    'profile'    => Kohana::$environment !== Kohana::PRODUCTION,
    'index_file' => FALSE,

... [trimmed]

Note: The default bootstrap will set Kohana::$environment = $_ENV['KOHANA_ENV'] if set. Docs on how to supply this variable are available in your web server's documentation (e.g. Apache, Lighttpd). This is considered better practice than many alternative methods to set Kohana::$enviroment, as you can change the setting per server, without having to rely on config options or hostnames.


Read the Modules page for a more detailed description.

Modules are then loaded using Kohana::modules(). Including modules is optional.

Each key in the array should be the name of the module, and the value is the path to the module, either relative or absolute.

// Example excerpt from bootstrap.php

    'database'   => MODPATH.'database',
    'orm'        => MODPATH.'orm',
    'userguide'  => MODPATH.'userguide',


Read the Routing page for a more detailed description and more examples.

Routes are then defined via Route::set().

// The default route that comes with Kohana 3
Route::set('default', '(<controller>(/<action>(/<id>)))')
        'controller' => 'welcome',
        'action'     => 'index',