PHP compatibility and project lifecycle
Unknown. The supplied introduction page names no supported PHP versions, so PHP 8.4 or 8.5 support is unverified. Check the official Server Requirements page before relying on this example.
Official sources checked 2026-10-22. Browser lessons on this site run PHP 8.5.
Sources and evidence limits
The only evidence is the official CodeIgniter4 user guide introduction page. That page is mostly a navigation tree plus a short description, so many details are marked unknown below.
What CodeIgniter is
The introduction page describes CodeIgniter as a PHP full-stack web framework that is light, fast, flexible and secure. These are the project's own words, and this guide has not measured them. It also calls CodeIgniter an Application Development Framework, meaning a toolkit for people who build web sites with PHP. It provides libraries for commonly needed tasks and a simple interface and logical structure for using them.
The page says CodeIgniter fits you if you want a small footprint, easy security practices, a non-magical codebase whose source is easy to find and read, nearly zero configuration, no restrictive coding rules, easy test code, and no mandatory templating language. A template parser is optionally available.
Classification
CodeIgniter is a framework. Be clear about what it is not:
- It is not PHP core. PHP is the language and engine, and CodeIgniter is code that runs on top of it.
- It is not a CMS. Drupal is a CMS product, while CodeIgniter is a toolkit you use to write your own application. Nothing in the source describes it as content-management software.
- It is not a standalone runtime, server or alternative interpreter.
- It is not Swoole or Open Swoole. Those are separate projects and are not covered by this source.
Architecture
The documentation tree shows the pieces you will meet. The overview section covers application structure, Models, Views and Controllers, autoloading, Services, Factories, HTTP requests, security guidelines, and design and architectural goals. Other sections cover:
- URI routing, controllers, controller filters, controller attributes and improved auto routing
- Request and response classes, content negotiation, RESTful resource handling, API responses and API resources
- Views, layouts, cells, the optional parser and decorators
- A database layer with a query builder, transactions, migrations, seeding and a Model with Entity classes
- Libraries for caching, cookies, CORS, email, encryption, sessions, validation, pagination and more
- Testing support and the Spark command-line tool
- Events and Composer packages for extending the framework
In MVC terms, controllers receive routed requests, models handle data access, and views produce output. The sections on services, factories and events show how the core can be extended or replaced, which fits the page's claim that core parts can be extended or completely replaced.
Execution model
In the classic PHP model, each web request starts a fresh PHP execution, builds the application, sends a response and discards memory. A framework used this way cannot leak in-process state between requests, because the process state disappears.
The documentation tree also lists a Worker Mode page under installation. The supplied page does not explain it, so how it works, its requirements and its maturity are unknown here. Read that official page before using it.
In general, a persistent worker keeps the process alive and handles many requests in one memory space. That brings a risk of state leakage: static properties, singletons, service instances, caches, open connections, the current user, request data or session data can survive into the next request. One visitor could then see another visitor's data. Cleanup means resetting or recreating anything request-specific after each response, closing or validating long-lived connections, and testing with several different consecutive requests. Do not assume that code written for classic requests is safe in a worker.
Practical use cases
Based on the source's description, CodeIgniter suits server-rendered web sites, REST-style APIs (the tree lists a REST APIs guide), and applications that need ready-made libraries without a heavy convention set. Because it is a toolkit, it is a fit when you want to own the application design rather than adopt a CMS data model.
Installation approach
The documentation lists Composer Installation, Manual Installation, Running Your App, Troubleshooting and Deployment pages, but the supplied packet does not include their contents. The example below uses the Composer route. Its package name and Spark command come from outside the supplied packet, so check them against the official installation pages. Server Requirements and PSR Compliance pages also exist. This guide does not state a PHP version range, so confirm PHP 8.4 support there before targeting it. The learning track stays on PHP 8.4, with PHP 8.5 planned.
The example
The example creates a new project, then adds a route, a controller and a view for a /hello page. It binds the development server to 127.0.0.1 only. It needs Composer, network access and a terminal, so it is not a browser exercise.
Strengths
- Clear self-description: small footprint, readable source, little required configuration
- A broad documented library set and a Spark CLI
- Testing support is documented
- Extensibility through services, events, filters and Composer packages
Limitations and unknowns
- Current support status, security-fix policy, deprecations and PHP compatibility are not established by the supplied page, so the lifecycle is recorded as unknown. The page title mentions a documentation version, but this guide does not treat that as a verified current release.
- The license text is not in the packet. A License Agreement page exists, but its terms are unknown here.
- Performance claims are the project's own and are unmeasured.
- Worker Mode details are unknown.
- It is an application framework, so it gives you no CMS editing interface or content model.
Deployment
A Deployment page exists in the official guide, but its contents are not in the supplied source. Plan to read it before going live. In general, never expose a development server publicly, never expose FastCGI to the public internet, keep secrets out of version control, and run integration checks on the exact PHP version you deploy. Treat any use of worker mode as a separate deployment decision that needs leakage tests.
Links
Use the official introduction page listed below as the starting point and follow its navigation to the installation, requirements and deployment pages.
Practical examples
These examples have not been run in a live environment yet. Commands and versions follow the official documentation linked on this page; check them before relying on them, and report a problem if one does not work.
Hello page in a new CodeIgniter project via Composer
Create a project with Composer, then add a route, controller and view for a /hello page, and serve it on 127.0.0.1 only. The create-project package name and the spark serve command are not in the supplied packet and must be verified against the official installation pages. Requires Composer, network access and a PHP version that the official requirements allow. Run the create-project and cd commands first, then add the files at the listed paths, then start the server. Not a browser exercise.
ci-guide/app/Config/Routes.php
use CodeIgniter\Router\RouteCollection;
/**
* @var RouteCollection $routes
*/
$routes->get('/', 'Home::index');
$routes->get('hello', 'Hello::index');
ci-guide/app/Controllers/Hello.php
namespace App\Controllers;
class Hello extends BaseController
{
public function index(): string
{
return view('hello', ['name' => 'CodeIgniter learner']);
}
}
ci-guide/app/Views/hello.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<h1>Hello, esc($name) !</h1>
</body>
</html>
Install and run
composer create-project codeigniter4/appstarter ci-guide
cd ci-guide
php spark serve --host 127.0.0.1 --port 8080
curl http://127.0.0.1:8080/helloExpected behavior
After the files are added and the server starts, requesting /hello on 127.0.0.1 port 8080 should return an HTML page with the heading Hello, CodeIgniter learner!.
Commands and package name come from outside the supplied packet and need human verification. The routes file replaces the starter's file, so it may drop other default routes. Development server only, with no production deployment, worker mode or database. PHP 8.4 support is unconfirmed.