#### Architecture of Libproxy

# Architecture

Starting with release 0.5.0 Libproxy is making use of glib. glib has many advantages and helps to get rid of one of the major issues we have had with previous versions of Libproxy. To name a few advantages:

- Testing Framework
- Make use of existing plugin loader
- Automatic documentation out of code
- Gobject Introspection bindings for almost every programming language

## Plugin types

Libproxy is using internal plugins to extend it’s knowledge about different configuration options and handling of PAC files. Most of those plugins are configuration plugins:

- config-env
- config-gnome
- config-kde
- config-osx
- config-sysconfig
- config-windows

Then there is only one pacrunner plugin which handles parsing of JS PAC files:

- pacrunner-duktape

## Configuration plugin priority

Configuration plugins are executed in a specific priority:

- PX_CONFIG_PRIORITY_FIRST (highest)
- PX_CONFIG_PRIORITY_DEFAULT
- PX_CONFIG_PRIORITY_LAST (lowest)

Highest priority is used in `config-env` and lowest priority in `config-sysconfig`. All the other plugins are running on default priority.

### Configuration plugin enforcement

In case you want to use a specific configuration plugin for a given application, you are able to overwrite the priority. Therefore set a environment variable `PX_FORCE_CONFIG=config-name` and libproxy will just use this configuration plugin.