This walkthrough takes a server with LeviLamina, Endstone, or the self-hosted Linux carrier from a fresh install to two running plugins.
Prerequisites
Section titled “Prerequisites”- Windows x64 for LeviLamina and Endstone on Windows; Linux x64 for Endstone on Linux and the self-hosted carrier.
- Minecraft Bedrock Dedicated Server: BDS 1.26.51+ with LeviLamina 26.51+, BDS 1.26.52+ with Endstone 0.11+, or BDS 1.21.3 for the self-hosted carrier.
- .NET 10 runtime (
Microsoft.NETCore.App). - lip.
- Node.js 20+ on
PATHfor the out-of-process exception.
Run the install commands in the server root.
Install the shim and providers
Section titled “Install the shim and providers”The suffix-less package is the self-hosted Linux carrier. Parent-managed servers pick a labeled variant:
lip install github.com/HosihikariFramework/Shim # self-hosted Linuxlip install github.com/HosihikariFramework/Shim#levilamina # LeviLaminalip install github.com/HosihikariFramework/Shim#endstone # Endstone, Windowslip install github.com/HosihikariFramework/Shim#endstone_linux # Endstone, LinuxThen install the C# provider:
lip install github.com/HosihikariFramework/CSharpProviderThe order is shim → provider → plugin package. Provider manifests do not declare a lip dependency on the shim: the shim has one package per carrier, and lip cannot express that choice in a dependency.
The self-hosted carrier installs hosihikari-server at the server root and the core under
plugins/hosihikari/. Start the server through the launcher, which preloads the shim:
./hosihikari-serverIts target is BDS 1.21.3; the launcher needs the .NET 10 runtime. The plugin packages live under
plugins/ exactly as they do under a parent, and they are precompiled assembly packages.
Run a C# plugin
Section titled “Run a C# plugin”To start a new plugin from a maintained package, see Templates.
Clone the documentation repository and copy the example into the server:
git clone https://github.com/HosihikariFramework/hosihikariframework.github.iocd hosihikariframework.github.io$Server = 'C:\bedrock-server'Copy-Item -Recurse .\examples\hello-csharp "$Server\plugins\hello-csharp"The package contains:
hello-csharp/ manifest.json main.cs hello-csharp.confStart the server. The log should show loaded, package and enabled, greeting=你好,星光. The plugin also writes loaded.txt and enabled.txt under:
<server>/data/hosihikari/hello-csharp/Exception first-class provider: out-of-process bridge
Section titled “Exception first-class provider: out-of-process bridge”RpcProvider is the exception first-class provider: an official provider that runs the plugin in a child process over line-delimited JSON-RPC 2.0, instead of compiling source AOT to IL.
lip install github.com/HosihikariFramework/RpcProviderCopy-Item -Recurse .\examples\hello-node "$Server\plugins\hello-node"Copy-Item "$Server\plugins\hosihikari-rpc\bindings\node\hosihikari.mjs" "$Server\plugins\hello-node\hosihikari.mjs"hosihikari.mjs is the Node binding shipped with the RpcProvider. Keep it next to the entry so the manifest command can find it. The log should show hello-node loading and enabling.
If the target directory already exists, remove it before copying.
Override configuration
Section titled “Override configuration”<name>.conf inside the package holds the author’s defaults. A server-side override in config/hosihikari/ takes precedence:
New-Item -ItemType Directory -Force "$Server\config\hosihikari" | Out-NullCopy-Item .\examples\hello-csharp\hello-csharp.conf "$Server\config\hosihikari\hello-csharp.conf"Restart the server; the log shows the overridden greeting. Environment variables override the same keys.
