ExpressionEngine (often abbreviated EE) is a free and open-source content management system written in object-oriented PHP and using MySQL or MariaDB for data storage. It is developed and maintained by Packet Tide, LLC, and distributed under the Apache License 2.0.
Unlike systems that ship with a fixed content model built around posts and pages, ExpressionEngine provides no predefined content types. Creators define their own structures using channels composed of custom fields, then render that content through a tag-based template language. This design has made the system a long-running favorite among agencies and developers building bespoke sites with great extensibility, while contributing to a reputation for a steeper initial learning curve than mass-market alternatives.
ExpressionEngine began as pMachine, a weblog application released by Rick Ellis in 2001. The first version of ExpressionEngine was released in 2004 as commercial, closed-source software, and it remained a paid product for roughly fourteen years. In 2018 it was relicensed under the Apache License 2.0. Ownership changed twice in rapid succession between 2018 and 2019 before settling with Packet Tide, which continues to develop the platform.
History
Origins: pMachine (2001 to 2003) ExpressionEngine's lineage begins with pMachine, weblog software written by Rick Ellis and first released to the public in 2001, with commercial distribution following in early 2002. pMachine competed in the same category as Movable Type, Geeklog, and other early publishing tools, and was offered in both a free edition and a paid edition called pMachine Pro. Ellis incorporated the company that would become EllisLab, Inc. in January 2002.
pMachine's core design decisions carried forward. It separated content storage from presentation through a template system that emitted no markup of its own, an approach that appealed to designers who wanted complete control over output HTML. That principle became the defining characteristic of its successor.
ExpressionEngine 1 (2004 to 2009) ExpressionEngine 1.0 was released in 2004 as a rewrite and substantial expansion of pMachine Pro. Where pMachine was a weblog tool, ExpressionEngine was positioned as a general-purpose content management system. The pivotal addition was the "weblog" (later renamed "channel"), a user-defined content container to which arbitrary custom fields could be attached. A single installation could host a news section, a product catalog, a staff directory, and an event calendar, each with its own field structure, all queried through the same template tags.
Version 1 shipped as commercial software under a restrictive license. Users were prohibited from redistributing or modifying the software in various ways, from using the free Core edition for client or contract work, and from building hosted services on top of it. Licensing was per-site rather than per-developer, which meant that agencies managing many client installations tracked a corresponding number of separate licenses and renewal dates. This model later became a significant source of friction as competing open-source systems gained ground.
The 1.x series also introduced bundled modules that extended the system well beyond publishing, including a discussion forum, a wiki, a membership system, a mailing list manager, and a simple commerce module. Support for version 1 continued for years after its successor shipped, in part because the upgrade path proved difficult for heavily customized sites.
ExpressionEngine 2 (2010 to 2014) ExpressionEngine 2.0 was released in January 2010. The most consequential change was architectural: the system was rebuilt on top of CodeIgniter, the PHP framework EllisLab had released as open-source software in 2006. This gave ExpressionEngine a conventional MVC foundation, a documented database abstraction layer, and a more approachable structure for third-party developers.
Version 2 also renamed "weblogs" to "channels," reflecting the system's positioning as a general content platform rather than a blogging tool, and rebuilt the control panel with a new interface and a theming layer.
The 2.x era coincided with the peak of ExpressionEngine's third-party ecosystem. Commercial add-ons such as Matrix, Playa, Structure, Low Search, and Low Variables became near-universal fixtures of professional builds, to the point that many agencies treated them as de facto core functionality. This was a strength in capability and a structural weakness in dependency, a tension that surfaced sharply at the next major version.
ExpressionEngine 3, 4, and 5 (2015 to 2019) ExpressionEngine 3.0 arrived in 2015 with a completely rewritten control panel and a new internal model layer, dropping the CodeIgniter-derived control panel architecture in favor of EllisLab's own service and model layers. Native Grid and Relationship field types absorbed functionality that had previously required the commercial Matrix and Playa add-ons.
The transition was contentious. The add-on API changed substantially, requiring third-party developers to port their work, and some widely deployed commercial add-ons were never updated. Several developers who had built businesses on the 2.x ecosystem exited. Agencies with large portfolios of 2.x sites faced upgrade projects that were expensive relative to the visible benefit to clients, and a portion of the installed base migrated to other systems instead, notably Craft CMS, a system created by former EllisLab employee Brandon Kelly that drew heavily on ExpressionEngine's content modeling ideas.
Versions 4.0 (2017) and 5.0 (2018) were more incremental, adding the Fluid field type, improved file management, entry cloning, and a Dock for front-end editing conveniences, along with continued modernization of the control panel.
Open sourcing and ownership changes (2018 to 2019) In November 2018, EllisLab relicensed ExpressionEngine under the Apache License 2.0, ending roughly sixteen years of commercial licensing across pMachine and ExpressionEngine. In an announcement titled "Open Source Has Won," Ellis argued that the dominance of open-source software on the web had become undeniable and that the licensing model was no longer defensible, noting that he had wanted to make the change earlier but had lacked the right strategic and financial partner to do so.
That partner was Digital Locations, Inc., which acquired EllisLab in a deal announced in December 2018 to facilitate the transition. The arrangement did not last. In October 2019, Ellis announced that ExpressionEngine had been acquired by Packet Tide, LLC, the parent company of EEHarbor, then the most prolific commercial add-on developer in the ExpressionEngine ecosystem with a catalog exceeding fifty add-ons. Ellis stated that Digital Locations had proven not to be a good fit for the platform's future, as the company was seeking to build a business in artificial intelligence. EllisLab itself was sold back to Ellis, who closed the company after seventeen years of operation. Packet Tide acquired only the ExpressionEngine platform, support plans, partner network, and directly related brand assets.
Community reaction was broadly positive, on the reasoning that the platform had passed to a team with years of demonstrated investment in it. Some observers noted the structural question raised by a major add-on vendor owning the core product, and Packet Tide stated at the time that merging EEHarbor add-ons into core was not part of its plan, a position it later reversed for several products.
Packet Tide era (2021 to present) ExpressionEngine 6.0 was released in 2021 as the first major version under Packet Tide. It introduced a redesigned control panel with a dark theme, a jump menu for keyboard navigation, dashboard widgets, roles and role groups replacing the older member group system, and conditional fields. Version 6 was designated a Long Term Support release with a five-year support window and a commitment to avoid breaking changes within that period, consistent with the project's adoption of semantic versioning.
Alongside version 6, Packet Tide introduced ExpressionEngine Pro, a paid commercial layer sold separately from the free core and offering front-end editing, control panel branding, and related features aimed at agencies.
ExpressionEngine 7.0 followed in 2022 and reversed that split. Pro was folded directly into the main product, eliminating the separate upgrade, and two long-standing commercial add-ons acquired from developer Low were absorbed into core as Pro Search and Pro Variables. Under the revised model the software remains free, with a paid Pro license (initially priced at 199 US dollars per year) required for installations serving multiple control panel users. Version 7 also brought substantial performance work, expanded caching options, and a command-line interface with generators for add-ons, models, widgets, and migrations.
Development has continued on the 7.x line through the mid-2020s with regular maintenance releases, ongoing PHP compatibility work extending through PHP 8.5, expanded automated test coverage, and periodic security updates. The current stable release is 7.5.26, published on 22 July 2026.
A notable addition of this period is Coilpack, an integration layer that allows an ExpressionEngine installation to be consumed from a Laravel application, exposing channel data through Laravel's routing, Blade templates, and GraphQL rather than the native template engine. This positions ExpressionEngine as a content back end for developers who prefer a modern PHP framework for the front end.
Architecture
Content model ExpressionEngine ships with no predefined content types. The primary structural unit is the channel, a container that holds entries. Each channel is assigned one or more field groups, which contain custom fields of a chosen field type. A site's content architecture is therefore designed rather than adapted, which is the system's central selling point and the main source of its learning curve.
Available field types include text and textarea inputs, rich text, files and file grids, dates, relationships to other entries, member selectors, toggles, selects, checkboxes, color pickers, sliders, and two compound types: Grid, which produces a repeatable table of subfields, and Fluid, which allows an editor to assemble an arbitrary sequence of fields within a single field, supporting modular page-building patterns.
Entries carry a title, URL title, author, status, publication and expiration dates, and optional category assignments drawn from category groups. Categories support hierarchy and their own custom fields.
Template language Templates are organized into template groups and rendered through a tag parser that recognizes constructs delimited by curly braces. Content is retrieved with tag pairs such as {exp:channel:entries}, which accepts parameters controlling channel, category, status, sort order, limit, and pagination, and exposes entry data as single variables within the loop.
The template language deliberately outputs no markup of its own. Every element of the rendered HTML is authored by the developer, in contrast to systems that emit generated wrappers, classes, or widget markup. The language also supports conditionals, embedded templates, layouts, partials, snippets, global variables, variable modifiers for formatting and image manipulation, and template routes for custom URL patterns.
Templates may be edited in the control panel and stored in the database, or synchronized to files on disk for version control, which is the standard practice on professional projects.
Add-on system