# Part I. Overview

The Thunar Extension Framework (`thunarx`) provides developers with an easy way to extend the basic functionality provided by the Thunar File Manager. The `thunarx` library includes interfaces that can be implemented by extensions for various purposes.

It is based on the GLib Dynamic Type System and loads the extensions on demand to reduce the system resources allocated for the file manager process.

## Goals

The Thunar Extension Framework was developed with the following goals in mind:

1. It should be easy to extend the functionality of the file manager in certain ways.
2. The internals of the file manager should be hidden from the extensions to be able to maintain API/ABI compatibility for extensions over various major releases of the file manager.
3. Provide basic compatibility with the Nautilus Extension Framework, so vendors don't need to write several versions of their extensions for the various file managers. With the current implementation it should be easy to write a small wrapper library for generic extensions that can be loaded into both Thunar and Nautilus.
4. Extensions should not be loaded into memory until they are actually required to save system resources. This differs from the way Nautilus handles extensions and therefore people that already know how to write Nautilus extensions must be careful when writing extensions for Thunar, because Thunar actually unloads the extension when it's no longer needed. The GTypePlugin and GTypeModule sections in the GObject Reference Manual provide details about the handling of dynamic type plugins.
5. Permit developers to write extensions in languages other than C.