Plugins are independent components of the application that create and consume events. Plugins can be either
internal, meaning they are written in Rust and run within the main application process as a child thread, or
external, meaning they run in a separate process from the main application. Internal plugins use an inprocess
communication mechanism to publish ans subscribe to events, while external plugins communicate with the main
application over TCP.