Plugins
=======

Cutter supports writing plugins in both C++ and Python.
If you are unsure of which language to choose, starting with Python is strongly suggested as
it provides a faster and simpler workflow. You can find example plugins `here <https://github.com/rizinorg/cutter/tree/dev/src/plugins>`__.

If you plan to implement support for a new file format or architecture, Cutter plugins are not the correct approach.
Instead, you will want to implement a Rizin plugin, which is documented `here <https://book.rizin.re/src/plugins/intro.html>`__.


Loading and Overview
----------------------

Plugins are loaded from an OS-dependent user-level directory.
To get the location of this directory and a list of currently loaded plugins, navigate to Edit -> Preferences -> Plugins.

.. image:: contributing/plugins/preferences-plugins.png

The plugins directory contains two subdirectories, ``native`` and ``python`` for C++ and Python plugins respectively,
which will be created automatically by Cutter.

.. note::
   The support for Python plugins is only available if Cutter was built with the options ``CUTTER_ENABLE_PYTHON``
   and ``CUTTER_ENABLE_PYTHON_BINDINGS`` enabled.
   This is the case for all official builds from GitHub Releases starting with version 1.8.0.


Creating Plugins
------------------

.. toctree::
   :glob:

   contributing/plugins/*
