-
Notifications
You must be signed in to change notification settings - Fork 1
FAQ
Q: Who is PlugHub for?
A: PlugHub is designed for professional developers and advanced hobbyists who want to build robust, extensible, and cross-platform desktop applications in C#. It prioritizes type safety, maintainability, and foundational stability.
Q: What platforms does PlugHub support?
A: PlugHub currently runs on Windows, Linux, and macOS, leveraging Avalonia UI and FluentAvalonia for a consistent desktop experience. .NET 8.0 LTS is required.
Q: Why only C# for plugins?
A: PlugHub requires plugins to be presented as C#-style CLR DLLs, ensuring type safety, reliability, and seamless integration with the host. Technically, any DLL that exposes compatible CLR interfaces can be used, regardless of the underlying language. If your plugin includes bindings to other languages—such as Lua or Python, which are both popular for scripting and rapid development—that’s fully supported. The framework simply interacts with the CLR-facing interfaces and does not communicate directly with non-CLR components. This approach minimizes tech debt and compatibility issues while allowing flexibility in plugin internals.
Q: How can I contribute to PlugHub or get involved with the community?
A: PlugHub welcomes contributions from developers, designers, testers, writers, and community advocates.
- Read the CONTRIBUTING guide for roles and contribution steps.
- Check the issue tracker for open tasks, bugs, and feature requests.
- Join discussions on GitHub or our Discord server.
- Follow the Code of Conduct to ensure a welcoming environment.
- No experience required—testing, documentation, design, and community advocacy are all valuable.
Q: How do I get help, ask questions, or report bugs for PlugHub?
A:
-
Documentation & Community Resources:
- Start with our Project Docs, GitHub Pages, Wiki, and Discussions.
- For real-time support, join our Discord community.
-
Support Questions:
- Search Support discussions to see if your question has already been answered.
- If not, create a new discussion with a clear, descriptive title and detailed context.
- Follow up for responses. Use the Support category, not GitHub Issues, for general questions.
-
Bug Reports:
- Search open bug reports before submitting a new one.
- Use the Bug Report template, prefixing your title with
[BUG], and provide detailed steps to reproduce and environment info. - Monitor and respond to follow-up questions or clarification requests.
Quality bug reports are highly valued and essential to improving PlugHub. Thank you for your detailed feedback and participation!
Q: How are plugins discovered and loaded?
A: Place your compiled plugins in the designated plugins folder. PlugHub uses static IL metadata to discover and inspect plugins securely, without instantiating code.
Q: Can plugins be hot-reloaded or updated at runtime?
A: PlugHub does not support ad-hoc hot-reloading of plugins to ensure system stability and deterministic behavior. Plugins are loaded once at application startup, and updates require a restart. This avoids issues like partial state corruption, dangling references, or unpredictable UI/UX outcomes.
Future updates may introduce profile-based reloading—allowing curated plugin sets to be swapped via soft restarts—but runtime code replacement of individual plugins is not planned.
Q: How does PlugHub handle plugin dependencies and conflicts?
A: Plugins declare static metadata for load order (using GUIDs and versioning) and runtime dependencies/conflicts. The framework validates these at both compile and runtime to prevent incompatible combinations.
In the future, PlugHub plans to evolve this system into a global repository inspired by LOOT (Load Order Optimisation Tool), enabling automated, community-driven optimization of plugin load order, conflict resolution, and compatibility.
Q: Can I use third-party libraries in my plugins?
A: Yes, as long as your plugin compiles to a .NET assembly discoverable by PlugHub and adheres to the defined interfaces.
Q: How does PlugHub ensure plugin security and isolation?
A: Plugins are inspected via static metadata, minimizing the risk of tampering or runtime instability. Aspirationally, PlugHub aims for enterprise-grade isolation and security features.
Q: What happens if a plugin fails validation?
A: PlugHub will prevent incompatible or invalid plugins from loading and provide clear error messages detailing the issue.
Q: Can I change the look and feel of the host application?
A: Yes. Using interfaces like IPluginBranded, plugins can fully customize branding and UI, enabling tailored experiences for different applications.
Q: Is it possible to share a curated set of plugins or a “profile”?
A: This is a planned feature. Users will be able to define and share profiles (collections of plugins and branding) for rapid deployment of tailored environments.
Q: Is there a plugin marketplace or registry?
A: Not yet, but PlugHub aspires to provide a curated ecosystem and marketplace for sharing, discovering, and composing plugins and profiles.
Q: What license does PlugHub use, and how does it affect my project?
A: PlugHub uses a dual licensing model:
| Component | License | Key Requirement |
|---|---|---|
| Host/Shared Code | LGPL-3.0 | Modifications must be LGPL |
| Official Plugins | GPL-3.0 | Derivatives must be GPL |
-
Host Application & Shared Libraries:
Licensed under LGPL-3.0, allowing use in proprietary or commercial software. Modifications to LGPL-covered code must also be released under LGPL. -
Official Plugins:
Licensed under GPL-3.0 (see each plugin’s LICENSE file). Derivative works must also be GPL-licensed. -
Plugin-Specific Licenses:
If a plugin subfolder contains its own LICENSE file, that license takes precedence for that plugin’s code. Always check the LICENSE in each plugin directory for specific terms.
This approach enables both open-source and commercial use. Review the LICENSE files to ensure compliance with your intended use case.
If you have more questions, please consult the Wiki, Discussions, or join our Discord community for real-time help.