Your website may include different kinds of content. You might have blog posts, products, legal pages and staff profiles. Each of those types of content is known as a channel.


An entry is a post within a channel. For example each product becomes an entry within a product's channel. A blog post is an entry within the blog channel.

Think of it like this: ExpressionEngine is a filing cabinet, channels are folders, and entries are pages.


When adding an entry you will want to have some boxes to write your content into. Perhaps you have a body text box, and a gallery. In ExpressionEngine these are known as fields.

Field Types

Different fields require different capabilities. You might want your body text to have a Word like interface (WYSIWYG, or What You See Is What You Get) but the gallery should allow you to drag and drop images in a particular order. ExpressionEngine calls these different ways of doing fields, field types. There’s many field types built in, and more can be added through add-ons (see below).

Field Group

The different channels of your website will probably have different fields. For example, the content that you add on a blog post is going to be different than on a product page. Field groups are collections of fields.

ExpressionEngine’s approach to fields is layered. You add fields within a field group, and then you associate the channel with a particular field group.

You can associate with one field group per channel, but the field group itself could be used on multiple channels. It’s a one-to-many relationship.


As part of managing your content you will have a publishing workflow. The most basic of these is that content is either shown or hidden. With ExpressionEngine you use statuses for this. All websites start with two statuses; open (shown) or closed (hidden).

But you can add more to suit the business logic or publishing workflow. For example many sites add a “Draft” status that lets administrators see content before it’s ready. Some larger International websites might have a status “Awaiting translation”.

A website can have multiple sets of statuses, but each channel can only be associated with one.


Categories allow you to further organise your entries. For blog posts a category may be a topic. For eCommerce it may be a department name.

An entry can be in multiple categories at once and a channel can have multiple categories associated with it. It’s one of the more flexible elements of ExpressionEngine.


Templates are the HTML pages that a visitor to the website will see. They’re a mixture of traditional HTML which is supplemented with ExpressionEngine template code. This is a simple syntax allows you to make the content within a template dynamic without having to worry about PHP or databases.

Templates can embed other templates within them, and also include a layout template (see below).


Layouts are a special kind of template. You can use a layout to set up the structure of your page, and then put “layout variables” in blocks you want to fill in later. For example you might have a header and a footer within a single layout template, and in between those you would leave the space in the middle as a layout variable called “content”.

Then any template that uses that layout call fill in that variable with it’s own content.

Template Groups

You’ll want to organise related templates together to make it easier to manage your website. For example you might put both the blog category and the blog post template within a “blog” template group.

Template Partials

Sometimes you’ll find yourself using the exact same bit of template code in a bunch of different places. Embedding templates is quite intensive - the lightweight alternative is to use template partials. These allow you to write a bit of code once and use within multiple templates.

For example you might have a newsletter signup widget that you want to put in various places around your site. You can make that a template partial and use it in multiple templates.

This works towards a goal in web design called “DRY”, or “Don’t Repeat Yourself”.

Before ExpressionEngine 3 these were called “snippets”.

Template Variables

You’ll occasionally want to use the same small bit of information multiple times. Perhaps your website has a particular date format that you’d like to follow. You can write that format within a template variable and use it in multiple templates. We call these template variables.

In that sense they are a lot like template partials. The biggest difference is that where template partials can run ExpressionEngine code, these can’t. In that sense they’re dumber - but lighter and faster!

Before ExpressionEngine 3 these were called “Global Variables”.

Template Routes

ExpressionEngine has a concept called template routes. This is a pretty advanced tool that can be left alone for most websites. But in short, it allows you to decide on the format of URLs the website produces.

The default template route is a bit like... /template-group/template/entry-url-title. So for example /blog/read/example-post. With template routes you can override that to have a completely custom URL. For example you might wish to make it /blog/author-name/example-post.

System Templates

The templates we’ve described so far are ones that you would make yourself for a particular website. There’s also a few system templates in ExpressionEngine that handle more generic things like site offline messages and member profile pages.


Every account on an ExpressionEngine is referred to as a member - even website administrators are members.

Member Groups

You might want to give different types of members different access to the website. For example you might want to give paid subscribers more access to your website. You can also give certain members access to the control panel - with member groups you could provide different departments the ability to add to some channels, but not others (for example).

Upload Directories

Upload directories are simply the folders for which people can upload files to the website. You might have an upload directory for “product pictures”, another for “brochures”. With upload directories you can define which types of files are allowed to be uploaded to them, and even which member groups are allowed to upload into them.


Add-ons allow additional functionality to be added to ExpressionEngine. These are often produced by third parties. You might install add-ons to add eCommerce functionality, advanced search engines, social networking tools and so on to ExpressionEngine.

Note: ExpressionEngine 3 has greatly simplified the add-on structure. The concept of “modules”, “extensions”, “custom field types” and “plugins” all still exist, but these are now concepts only add-on developers need to understand. Accessories have been removed.

Site Manager

ExpressionEngine allows you to run multiple websites through a single control panel. Site manager (previously called “Multiple Site Manager”) powers this ability.

Examples for site manager include international variations of the website, or sub-brands owned by the same company.