Быстрый старт: первый плагин
Как устроен плагин MandaGram
Плагин MandaGram — это нативная динамическая библиотека (.dll на Windows, .so на Linux), помещаемая в папку plugins/. Клиент автоматически отслеживает состояние файлов на диске и перезагружает плагин на лету при перезаписи.
Взаимодействие между ядром клиента и плагином происходит через открытый C ABI, что позволяет писать расширения на любом языке, поддерживающем экспорт C-функций: C++, Rust, Zig, D, Nim, C и других.
Экспортируемые функции
Каждая библиотека плагина обязана экспортировать две функции с соглашением о вызовах C:
C ABI Signature
const PluginMetadata* mandagram_plugin_metadata(void); bool mandagram_plugin_init(const PluginApi* api);
Возврат true из mandagram_plugin_init активирует плагин. Метаданные (название, версия, автор, описание) отображаются напрямую в интерфейсе настроек клиента.
Минимальный пример (C++)
plugin.cpp
#include "mandagram_plugin.h" static PluginMetadata s_meta = { .name = "Hello Plugin", .version = "1.0.0", .author = "Dev", .description = "Мой первый нативный плагин для MandaGram", .api_version = 1 }; extern "C" { MANDAGRAM_EXPORT const PluginMetadata* mandagram_plugin_metadata(void) { return &s_meta; } MANDAGRAM_EXPORT bool mandagram_plugin_init(const PluginApi* api) { api->log_info("Плагин успешно загружен в MandaGram!"); return true; } }
Сборка в одну строку
- C++ (MSVC / Clang):
clang++ -shared -O3 -Iinclude plugin.cpp -o plugins/my_plugin.dll - Zig:
zig build-lib -dynamic plugin.zig -O ReleaseFast - Rust:
cargo build --release(crate-type["cdylib"]) - D:
ldc2 -shared -betterC mandagram_plugin.d