Developer Overview

This is a quick developer introduction to Elgg. It covers the basic approach to working with Elgg as a framework, and mentions some of the terms and technologies used.

See the Developer Guides for tutorials or the Design Docs for in-depth discussion on design.

Database and Persistence

Elgg uses MySQL for data persistence, and maps database values into Entities (a representation of an atomic unit of information) and Extenders (additional information and descriptions about Entities). Elgg supports additional information such as relationships between Entities, activity streams, and various types of settings.


Plugins change the behavior or appearance of Elgg by overriding views, or by handling events. All changes to an Elgg site should be implemented through plugins to ensure upgrading core is easy.


Actions are the primary way users interact with an Elgg site. Actions are registered by plugins.


Events are used in Elgg Plugins to interact with the Elgg engine under certain circumstances. Events are triggered at strategic times throughout Elgg’s boot and execution process, and allows plugins to modify or cancel the default behavior.


Views are the primary presentation layer for Elgg. Views can be overridden or extended by Plugins. Views are categories into a Viewtype, which hints at what sort of output should be expected by the view.


Elgg uses native ES modules. Plugins can register their own modules or load their own JS libs.


Elgg’s interface supports multiple languages, and uses Transifex for translation.


Elgg uses two caches to improve performance: a system cache and SimpleCache.

3rd party libraries

The use of 3rd party libraries in Elgg is managed by using Composer dependencies. Examples of 3rd party libraries are jQuery, CSS Crush or Laminas mail.

To get a list of all the Elgg dependencies check out the Packagist page for Elgg.

Database Seeding

Elgg provides some base database seeds to populate the database with entities for testing purposes.

You can run the following commands to seed and unseed the database.

# seed the database
vendor/bin/elgg-cli database:seed

# unseed the database
vendor/bin/elgg-cli database:unseed

Plugins can register their own seeds via 'seeds', 'database' event. The handler must return the class name of the seed, which must extend \Elgg\Database\Seeder\Seed class.