Article

Zend Framework History: ZF1, ZF2, ZF3, and Laminas

A maintainer-focused timeline of Zend Framework major generations and why Laminas is the official open-source continuation after ZF was archived.

Zend Framework is not one codebase that aged gracefully—it is a sequence of major architectures that share a brand. Teams that inherit “a Zend Framework app” must identify which generation they hold before choosing PHP upgrades, Composer strategies, or Laminas tooling. This history page exists so you stop applying ZF3/Laminas advice to ZF1 trees (and vice versa).

ZF1: include-path MVC before Composer norms

ZF1 centered on Zend_Application, a front controller, action controllers, and a large Zend_* class library often copied into library/Zend/. Autoloading and include paths were frequently IDE- or PEAR-driven. Many enterprise apps of that era were edited in Zend Studio with workspace include paths that never became Composer autoload rules.

// LEGACY (ZF1 bootstrap pattern)
require_once 'Zend/Application.php';
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()->run();

ZF2: modules, ServiceManager, Composer

ZF2 rebuilt the stack around modules, event-driven MVC, and the ServiceManager. Composer became the supported install path. Namespaces shifted to Zend\Mvc, Zend\ServiceManager, and per-module module.config.php files. An app that “looks modern” because it has composer.json can still be ZF2 with abandoned zendframework/* packages.

ZF3: componentization and a shorter metapackage story

ZF3 emphasized thinner application skeletons and explicit component dependencies instead of a monolithic require. Many “ZF3” repositories already sit one mechanical rename away from Laminas package names—verify composer.lock before assuming you still need a full framework rewrite.

Laminas: official open-source continuation

According to the Laminas Project migration documentation, Laminas and its subprojects are an open-source continuation of Zend Framework and its subprojects, and are the official fork of the project now that it has been archived and abandoned. Package namespaces moved to Laminas\, and the recommended mechanical migration for ZF2/ZF3-era code is the global laminas/laminas-migration tool—not a weekend of hand edits. See the flagship guides: Zend Framework to Laminas and Laminas migration tooling.

// MODERN (Laminas MVC entry after migration)
use Laminas\Mvc\Application;
chdir(dirname(__DIR__));
require 'vendor/autoload.php';
Application::init(require 'config/application.config.php')->run();

What this history means for upgrades

  • ZF1 modernization is a separate problem from laminas-migration (see ZF1 center).
  • ZF2/ZF3 apps with Composer are candidates for the official migrate command after backup.
  • Apigility and Expressive stable apps are also in the Laminas migration document’s supported set.
  • Editor migration (Zend Studio → PhpStorm/VS Code) is orthogonal—pair with PhpStorm or VS Code guides.

Official reference: docs.laminas.dev/migration/.

Related reading