First of all this is only a short description of extensions; For a more detailed description of extension, please see the Extension API section in "TYPO3 Core API".
An "extension" in relation to TYPO3 is a set of files/scripts which can integrate themselves with TYPO3s core through an API an thus seemlessly extend the capabilities of TYPO3.
These are the basic properties of extensions:
All files contained within a single directory
Easily installed/removed/exchanged
Has a unique key (extension key) used for naming of all elements (variables, database tables, fields, classes etc.).
Can interact with any part of the system. If not through the available APIs, ultimately (almost) any class in TYPO3 can be extended with full backwards compatibility maintained.
Extensions can be installed in three locations:
typo3/ext/: Global extensions. A part of the source code directory. Available to all TYPO3 installations sharing the same sourcecode. Is not necessarily available! You can remove or add extensions here and some source distributions will not contain the ext/ directory with global extensions (in which case you will have to add them yourself from TER).
typo3/sysext/: System extensions. Just like global extensions: A part of the source code directory. But the system extensions are always distributed with the source code so you can depend on them being there. Further you generally don't need to upgrade system extensions manually as they are upgraded with new source code releases. System extensions carry a special status of being officially endorsed by the TYPO3 system and they are required to match the quality of the core code regarding the standards set out in the TYPO3 Coding Guidelines.
typo3conf/ext/: Local extensions: Only available to the local TYPO3 installation. This is the typical location for most extensions which are installed on a per-project basis since the extension is used in only this one case. Also the position for user defined extensions.
Extensions can change practically anything in TYPO3. The concept is very capable since it was created to add limitless power to TYPO3 without having to directly change the core. As such extensions will make it possible for TYPO3 to be a true framework for just any application you can imagine. Installing one set of extensions will make TYPO3 one application - installing another set of extension will make TYPO3 another application. And the core is thus a basic set of modules, an Extension Manager and an API provided for the extensions so they can use core features right away.
Although the basic rule is "anything is possible" this is at least a partial list of features provided by extensions:
Addition of database tables and fields to existing tables.
Addition of tables with static information
Addition of TypoScript static template files or adhoc snippets
Addition of backend skins
Addition of frontend plugins of any kind
Addition of backend modules of any kind
Addition of click-menu items (context sensitive menus)
Addition of Page and User TSconfig
Addition of configuration values
Extension of any class in the system
... and of course all kinds of combinations.
Extensions available to a TYPO3 installation can be installed by the Extension Manager which is a core module:
Here three extensions are installed and as you can see they are apparently adding backend modules to the menu. Basically installing/de-installing an extension is a matter of clicking the +/- button next to the extension. In some cases additional accept of for example database tables/field additions are necessary but the process itself is as simple as that!
If an extension is not available on the server you can import it from the TYPO3 Extension Repository (TER) or manually upload it from a file (if you have a T3X file available):
Connecting to the online repository will show a list like this:
You can easily see which extensions are not locally available on your server and with a single click on the import icon the extension is downloaded from the repository and installed on your server!
Bottom-line is: In less than 30 seconds you can import and install an extensions with all database tables and fields automatically created for you, ready for use!
This was just a short introduction so you could grasp the potential of extensions. Since this document is about the TYPO3 core you can read more about the Extension API in the document "TYPO3 Core API". You can also find tutorials about extension programming on TYPO3.org. If you wish to investigate publicly available extensions go to typo3.org where the TYPO3 Extensions Repository has a frontend for just that: