Skip to content

Quick start

Install the shim and a provider, then run a C# plugin and an out-of-process Node plugin.

This walkthrough takes a server with LeviLamina, Endstone, or the self-hosted Linux carrier from a fresh install to two running plugins.

  • 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 PATH for the out-of-process exception.

Run the install commands in the server root.

The suffix-less package is the self-hosted Linux carrier. Parent-managed servers pick a labeled variant:

Terminal window
lip install github.com/HosihikariFramework/Shim # self-hosted Linux
lip install github.com/HosihikariFramework/Shim#levilamina # LeviLamina
lip install github.com/HosihikariFramework/Shim#endstone # Endstone, Windows
lip install github.com/HosihikariFramework/Shim#endstone_linux # Endstone, Linux

Then install the C# provider:

Terminal window
lip install github.com/HosihikariFramework/CSharpProvider

The 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:

Terminal window
./hosihikari-server

Its 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.

To start a new plugin from a maintained package, see Templates.

Clone the documentation repository and copy the example into the server:

Terminal window
git clone https://github.com/HosihikariFramework/hosihikariframework.github.io
cd 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.conf

Start 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.

Terminal window
lip install github.com/HosihikariFramework/RpcProvider
Copy-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.

<name>.conf inside the package holds the author’s defaults. A server-side override in config/hosihikari/ takes precedence:

Terminal window
New-Item -ItemType Directory -Force "$Server\config\hosihikari" | Out-Null
Copy-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.