Intro to Customizing Discourse
There are two main systems for building Discourse customizations:
Themes and Theme Components can by used to modify the look & feel of the site, and modify behaviours in the frontend (JavaScript) applications. Multiple themes and theme components can be installed on a site, combined in different ways, and made available for users to choose from.
Plugins have similar capabilities for modifying the frontend, plus the ability to modify backend (Ruby) behaviour. They can modify existing Discourse features, or create totally new features.