Files
clice/docs/en/dev/server-plugin.md
2026-01-26 01:01:39 +08:00

1.8 KiB

You can implement a clice server plugin to extend clice's functionality.

Use case

When you use clice as lsp backend of LLM agents, e.g. claude code, you can add plugin to provide some extra features.

Writing a plugin

When a plugin is loaded by the server, it will call clice_get_server_plugin_info to obtain information about this plugin and about how to register its customization points.

This function needs to be implemented by the plugin, see the example below:

extern "C" ::clice::PluginInfo LLVM_ATTRIBUTE_WEAK
clice_get_server_plugin_info() {
  return {
    CLICE_PLUGIN_API_VERSION, "MyPlugin", "v0.1", CLICE_PLUGIN_DEF_HASH,
    [](ServerPluginBuilder builder) {  ... }
  };
}

See PluginDef.h for more details.

Getting content of CLICE_PLUGIN_DEF_HASH

There are two values to return in the clice_get_server_plugin_info function.

  • CLICE_PLUGIN_API_VERSION is used to ensure compability of the clice_get_server_plugin_info function between the plugin and the server.
  • CLICE_PLUGIN_DEF_HASH is used to ensure the consistency of the C++ declarations between the plugin and the server.

To debug the content of CLICE_PLUGIN_DEF_HASH, you can run following command:

$ git clone https://github.com/clice-io/clice.git
$ cd clice
$ git checkout `clice --version --git-describe`
$ python scripts/plugin-def.py content

You will get a C source code file, content of which is like this:

#if 0
// begin of config/llvm-manifest.json
[
  {
    "version": "21.1.4+r1",
    "filename": "arm64-macos-clang-debug-asan.tar.xz",
    "sha256": "7da4b7d63edefecaf11773e7e701c575140d1a07329bbbb038673b6ee4516ff5",
    "lto": false,
    "asan": true,
    "platform": "macosx",
    "build_type": "Debug"
  },
  ...
]
...
#endif