Elgg 3.0.0-rc.1 has been released

Finaly after nearly 3 years of development (since 2.0) Elgg 3.0 is almost ready for public release. You can find the v3.0.0-rc.1 download in the download section.

Please keep in mind this is a Release Candidate, it's not yet ready for production without extensive testing.

If you find any bugs please report them on GitHub.

We'd like to thank everybody who contributed to making Elgg 3.0 happen, notable contributors are:

  • Jeroen Dalsem with 446 commits
  • Ismayil Khayredinov with 317 commits
  • Steve Clay with 123 commits
  • Jerome Bakker with 93 commits

Thanks to Ismayil for increasing the testability of Elgg. The unit tests now cover around 61% of the code base.

Support

When v3.0 gets released as a stable release the Long Term Support (LTS) will change from v1.12 to v2.3. This means no more patches on v1.12 and a limited amount of time for support on v2.3

For more information about the support scheme, please check out the documentation.

Major changes

Listing the complete changelog here wouldn't make for a readable blog post, if you're interested in the changelog check it out on GitHub.

  • Improved theme

The theme was rewritten with modern browsers in mind. The new theme is fully responsive thanks to the flex-driven approach we have taken. We have formalized some of the theming conventions to make collaboration between plugins easier.

Thanks to CSS Crush plugins can now share variables in stylesheets, which will hopefully create an ecosystem of plugins that don’t look like brothers from different mothers.

A different approach to page layouts makes them less of a pain to deal with. Plugins no longer have to decide, which layout to use, instead all layouts use the default grid, and adapt based on presence of various layout elements. Additionally, it is now much easier to alter and extend layout (filter) tabs, so plugins can easily group related pages into coherent UX.

A number of UI elements have been updated, including the entity menu, user hover card and entity listings. We have tried to reduce the boilerplate and create a solid foundation for plugins to built upon.

  • Improved caching

There are a lot of different caching strategies, now Elgg unifies some of the commonly used options (Memcached, Redis, etc) into one handler. This means that if the settings for the strategy are enabled it's used throughout the system.

It takes away a lot of effort from developers and helps improve performance throughout the system with just a few settings.

  • Improved search

With all the database schema changes and the QueryBuilder the search is now able to provide better results and it's easier to replace the MySQL search with another search engine (SOLR, Elasticsearch, etc)

  • CLI tool for administrative actions

Certain actions can now be executed by using a command line tool provided by Elgg. This is mainly useful for administrative tasks, like installing an Elgg website, executing the Cron, etc.

For developers

In order to know what has changed, so you know what to update in your plugins please check out the documentation on learn.elgg.org.

  • Removed a lot of database normalization

Several tables in the database have been dropped (object, group, user and site subtables) and others have been merged (metadata and metastrings). This will help reduce the SQL complexity overload.

  • Introduced a QueryBuilder to help with database layer abstraction

With unifying a lot of the database actions in a QueryBuilder which takes over the creation of SQL queries it should be easier to (eventually) replace the database backend with a database server of your choice and no longer rely on only MySQL

  • Easier routing

Changes to the routing system (which translate an URL into a resource which generates the page) it's now easier to extend and/or overrule routes with more features.

  • public Dependency Injection service

This is mainly for developers, but it is now easier to get access to the DI services of Elgg and inject your own services for other developers to use. The advantage of DI services is that it's easier to test and to replace with an improved version.