ExpressionEngine 3 Is Here

by: Derek Jones on: 10/13/2015

ExpressionEngine 3 has landed, get it now! Here’s what’s new:

Brand New Control Panel

The control panel is redesigned and rewritten from the ground up with a consistent visual language and smart interactions that deliver a great experience. The useful dashboard is the first thing you notice when you log in to the fully responsive and mobile-friendly control panel.

mobile-friendly responsive control panel

James has shared his goals and process of building the new control panel in previous blog posts. The importance of consistency in a tool the size of a content management system cannot be understated. ExpressionEngine 3 achieves this with the publication and adherence to the official style guide. Users always know where something should be, and how to take a certain action. Third parties who follow it will automatically receive all the benefits of consistency and modularity. This allows their add-ons to feel like fully integrated solutions and not bolted on components.

Some of the smart interactions include small things that anticipate your needs. The Create menu always refers to content, but what if you don’t have any Channels yet? The Create menu will offer to let you create a Channel instead of an entry. Another example are bulk actions, which only consume UI space when needed, like after selecting items in a table.

Add-ons are consolidated onto a single page, regardless of their add-on type. And non-optional first-party add-ons (such as the Channel module) are filtered so they never clutter your view. Add-ons now have the ability to have in-app documentation, using simple Markdown readme files like GitHub.

From a technical perspective, the new control panel is lean and fast. In addition to looking beautiful at any screen size, it is 100% image-free. The resulting page weight is typically measured in kilobytes, not megabytes, making it bandwidth friendly to boot.

Multiple Site Manager

Multiple Site Manager is no longer unlocked by buying a separate product. ExpressionEngine includes the functionality in each installation; for those that need MSM, you can add sites to it. One download, one license.

Discussion Forums

The web has changed a lot in just a few years. Discussion forums are not as ubiquitous as they once were, and they have trended towards simplicity. This works to the advantage of the Discussion Forum module, since it was never conceived as something that would engage in a blow for blow feature war with dedicated forum solutions like vBulletin. But if you have a content-first site that also needs discussion forums for your community or customers, it’s incredibly advantageous for your CMS to handle it.

We’ve decided to include Discussion Forums with ExpressionEngine. This accomplishes two things:

  • Simplifies releases for us and customers. Since they are intertwined, updates had to occur in lock step anyway. Having only one set of files to deal with and one update makes it easier for everyone.
  • Increases adoption. Optional features can be nice for additional revenue streams. But it also means that many of your customers may never try a feature, limiting its adoption and thus the attention it receives.

Both points help justify continuing development of the forums, such as improving the experience of building and maintaining a theme.

Spam Module

Spam is an unending plague of the internet. If your site attracts visitors, it attracts spammers. We are thrilled to be one of the first CMSes to incorporate a comprehensive solution for dealing with spam. ExpressionEngine 3 brings a unified Spam service that we use for all front-end submitted content. It’s also available and easy for third parties to use as well.

$is_spam = ee('Spam')->isSpam($submitted_content);

if ($is_spam)
    // register a callback when this content is moderated
    ee()->spam->moderate(__FILE__, 'my_class', 'callback_method', $my_params, $submitted_content);

When you install the Spam module, you first upload training data that we’ve built for you from actual ham1/spam collected over many years. When ExpressionEngine flags user-submitted content as spam, it goes to a unified moderation queue. You can either approve it (mark it as ham) and publish the content, or disallow it (mark it as spam) and delete it. You do not have to subscribe to an external service, and your data never leaves your site. The result is a fantastic solution for dealing with spam with high regard for your privacy.

By marking ham or spam, you are training the Spam module about your site’s content. Musicians, pro athletes, cooking, and pharmaceutical sites get different types of spam (and ham!). Once you have a well-trained system, you can export and import it for use on other sites that you build, tailored to that content.

User Serviceable Folders

Your stuff, our stuff. Folders that contain things that are yours are separated for clarity and ease of maintenance. One user folder is for themes and web-accessible files and the other user folder is for system files (config, add-ons, etc.). You don’t have to use configuration overrides to keep these folders outside of ExpressionEngine’s file structure anymore.

This also means you never have to reach into the application folder, and will always know where to look for things. If you jump into another developer’s installation (even if that was you from a few months ago), you don’t have to remember names and locations of folders that you changed for add-ons, templates, and so on. Updates are also simplified, which I’ll get to in a moment.

Geekout: Models

ExpressionEngine 3’s models add an improved data interaction layer for PHP developers. Working with content from the database is simple and fun. Developers don’t have to worry about the database schema. Manipulations like adding and deleting content that may touch many tables are far more reliable.

This also lets us make database changes for functional and performance reasons without breaking anyone’s code. It’s hidden and seamless.

Installer / Updater

Installation of ExpressionEngine is a clean and pleasant single-page experience. Since your download comes with its license key (more on that later), you only need to supply minimal details.

Updates are simpler, faster, and less error-prone. As many users became more and more dependent on add-ons, what was once a quick and simple update became a bit of a chicken and egg scenario, especially before we adopted Semantic Versioning. Two basic changes prevent a world of problems: user-servicable folders, and not trying update All The Things™ at once.

With the new user-serviceable folders, you have two folders to replace when updating: system/ee and themes/ee. That’s it. You don’t have to pull any files out to save for later, and you don’t have to remember to put things back when you’re done.

The intended convenience of updating add-ons at the same time as the application turned out to be less than ideal. As the last step of an ExpressionEngine 2 update, we ran code provided by all your installed add-ons. This is all code out of our control that we were handing to PHP and MySQL. Executing arbitrary code is not a good idea, even from trusted sources. What worked for one developer in their own environment might cause a cataclysmic failure when running with others. It’s impossible for us to guarantee that all third-party code will play nice together, and it’s impossible for third parties to ensure that as well.

So we have isolated updates from each other. The application updates itself, and add-ons will only update when you tell them to, individually. If there’s an issue, it won’t cascade and cause problems for your whole installation. You only have to deal with what’s actually broken, and not things that were messed up as a consequence.

We aren’t stopping there, though. One-click updating is one of the first things we want to tackle for the next version. This first step was a necessary and major change to make that a possibility.

Profiling & Debugging

The brand new profiler helps you understand where and how your implementation of ExpressionEngine is using resources.

brand new profiler

The presentation is dramatically improved, focusing on the information you want to see. We’ve also taken some steps to highlight areas that might need your attention, making it easier to use for debugging.

License Keys

Your license key is now included in your download. You no longer have to find, copy, and paste an obtuse-looking software license number. With the one-page installer and included license keys, performing an installation for each project is no sweat. If for some reason you still want a “base install” workflow—though we encourage you not to—you can download just your license key and upload it directly in your control panel.

The end result is a better experience for site builders, and greater reliability for clients to end up with a properly licensed site. One that isn’t shared with thirty other people because the developer forgot to buy a license or never updated their base config.

Added a few things

We’ve also added many small things, too many to list, but here are a few examples:

  • Customizable “Title” field label for Channel entries
  • Increased the limit on title and url_title fields to 200 characters
  • CAPTCHA preference is now site-wide
  • Template Routes can now live in user/config/config.php and thus be under source control
  • Passwords can be up to 72 characters (more than one googol years to crack)
  • {if no_results} added to the Channel entries {categories} tag pair
  • {if no_results} added to the Categories tag
  • Screen names are no longer unique. You’re welcome, Tom Jones!
  • Updated Markdown Extra to 1.5.0
    • Adds the ability start ordered lists with a number different from 1 and and have that reflected in the HTML output
    • Adds the ability to insert custom HTML attributes with simple values everywhere an extra attribute block is allowed
  • Control Panel landing pages are customizable per member group, or even per member
  • In-app links to the documentation, support, and bug tracker are visible to member groups of your choice
  • Many application defaults have been modified to reflect how people most often use ExpressionEngine

And took some away

Improvement isn’t always additive. For ExpressionEngine 3, we have removed some modules that are no longer necessary, or rarely used, distracting development from more important endeavors:

  • Referrer module removed
  • Mailinglist module removed. If you are using the Mailinglist module, the update will export your list for you so you can take it to a SaaS solution for mass emailing, like Campaign Monitor, MailChimp, Constant Contact, or SendGrid.
  • Wiki module removed. Unlike the two modules above, there are not options readily available for this type of content that can integrate with ExpressionEngine. So we have updated it for compatibility, and will open-source it in the next few days.

For Developers

Developers have been working with ExpressionEngine 3 for a few months now, and have loved the improvements. There is an official Style Guide for UI/UX, and under the hood are models, services, and a modern object-oriented API to build their tools with. Version 2 arguably made ExpressionEngine the easiest platform for PHP developers to extend. ExpressionEngine 3 improves on that formula with more modern and maintainable architecture.

What’s Next?

Fast iteration. We’ve previously thought of major versions as monolithic releases that need to completely change the software. The result is a product that is too long in the tooth by the time the next version is released, and too many new bugs because so much code has changed. Our mantra for ExpressionEngine’s future is iterate, iterate, iterate. Releases for 3 will come steadily, and it will not have a six year life cycle like version 2. We will go to 4, 5, and beyond at a much faster pace as we ship and deliver our ideas for what makes a great content management system.

We’re thrilled to release ExpressionEngine 3 and to double down on our manifesto, focusing on making software that enables you to do great things. Enjoy!

  1. Tech Talk: Spam or Ham ↩︎

.(JavaScript must be enabled to view this email address) or share your feedback on this entry with @ellislab on Twitter.

ExpressionEngine News

#eecms, #events, #releases