# Elements, Plugins, and Filters

In the &GStreamer; framework, a plugin is a specific sort of code module that gets loaded when a program requests the functionality that the plugin provides. A plugin is essentially a shared code library. Filters are an important subset of plugins that process data, as opposed to producing or consuming data. (Producers and consumers of data are called source and sink plugins, respectively.)

Elements are at the core of &GStreamer;. Without elements, &GStreamer; is just a bunch of pipe fittings with nothing to link. A large number of elements (filters, sources, and sinks) ship with &GStreamer;, but extra elements can also be written. The purpose of this guide is to help you learn to create new elements.

An element may be constructed in several different ways, but all must conform to the same basic rules. This guide presents one basic way to build a filter elementA simple filter may be built with the FilterFactory, where the only code that need be written is the actual filter code. A more complex filter, or a source or sink, will need to be written out fully for complete access to the features and performance possible with &GStreamer;.

The implementation of a new element will be contained in a plugin: a single plugin may contain the implementation of several elements, or just a single one.