# What is Zoraxy Plugin?  

Last Update: 25/05/2025

---

Zoraxy Plugin is a powerful extension feature designed to enhance the functionality of the Zoraxy system. It provides additional features and capabilities that are not part of the core system, allowing users to customize their experience and optimize performance. The plugin is built to be modular and flexible, enabling users to tailor their Zoraxy environment to meet specific needs.  

Zoraxy plugins are distributed as binaries, and developers have the flexibility to choose whether to open source them or not **as the plugin library and interface are open source under the LGPL license**.  

There are two primary types of plugins:  
- **Router plugins**: Involved with connections from HTTP proxy rules.  
- **Utility plugins**: Provide user interfaces for various network features that operate independently of the Zoraxy core.  

---

## How plugins are distributed & installed  
Zoraxy plugins are distributed as platform-dependent binaries, tailored to specific operating systems and CPU architectures. These binaries follow a naming convention that includes the operating system, CPU architecture, and plugin name, such as `linux_amd64_foobar`, `windows_amd64_foobar.exe`, or `linux_arm64_foobar`.  

To manually install a plugin for testing, place the binary file into the `/plugins/{plugin_name}/` folder within your Zoraxy installation directory.  

> **Warning:** The binary name inside the folder must match the plugin folder name. For example, the binary should be named `foobar` (or `foobar.exe` on Windows) if placed in the `/plugins/foobar/` folder. Avoid using names like `foobar_plugin.exe`.  

For distribution, a plugin store system is used. The plugin store architecture is similar to the one built into the Arduino IDE, with a manager URL (a JSON file) listing all the plugins supported by that store. See the documentation section for more details on how to implement your own plugin store.  

---

## Plugin vs Pull Request  
The Zoraxy plugin was introduced to address specific use cases that enhance its functionality. It serves as an extension to the core Zoraxy system, providing additional features and capabilities while maintaining the integrity of the core system.  

- Designed to handle features that are challenging to integrate directly into the Zoraxy core.  
- Caters to scenarios where certain features are only applicable in limited situations, avoiding unnecessary resource consumption for other users.  
- Allows for frequent updates to specific code components without impacting the core's stability or causing downtime.  

---

### When should you add a core PR or a plugin?  
In certain situations, implementing a feature as a plugin is more reasonable than directly integrating it into the Zoraxy core:  

- **Core PR**: If the feature is relevant to most users and enhances Zoraxy's core functionality, consider submitting a core Pull Request (PR).  
- **Plugin**: If the feature is targeted at a smaller user base or requires additional dependencies that not all users need, it should be developed as a plugin.  

The decision depends on the feature's general relevance and its impact on core stability. Plugins offer flexibility without burdening the core.  
