# Plugins

Plugins provide optional functionality in rust. For the detailed architecture, see [plugin architecture](./plugin_architecture.md). For a step-by-step guide, see the [Rust plugin tutorial](./rust_plugin_tutorial.md).

There are either external plugins (using [socket communication](./plugin_socket_communication.md)), which are loaded when starting up, or compiled plugins, which can be compiled into the wasot binary.
Compiled plugins are always optional and no other part of the system depends on them.

Plugins implement either an emitter, consumer or transformer (which is an emitter and consumer), as described in the [architecture document](./architecture.md). Plugins can register [actions](./actions.md) that users can invoke.
