Porting the Peakboard Extension Kit to .NET 8

June 30, 2025 · updated August 19, 2026

Peakboard, ExtensionKit, .NET, Named Pipes, Data Sources

Between April and June I ported the Peakboard Extension Kit to .NET 8. The public interfaces did not change, so an extension still describes a data source the way it always did. Everything underneath changed, because the transport the kit was built on does not exist any more.

.NET Remoting was never ported to .NET Core, and neither was System.AddIn. Both are Framework only, and both were how the runtime talked to an extension host. There is no compatibility shim to fall back on, so the plumbing had to be replaced rather than migrated.

It is a named pipe now, with a message protocol on top. Every message carries an id, a response is matched back to its request by that id, and every call has a timeout. Log entries, errors and commands all travel as messages on the same pipe. Serialization is MessagePack instead of the binary formatter, which is a good outcome in itself: BinaryFormatter is obsolete for exactly the reasons you would expect.

The lifetime lease from the remoting days went with it. What used to be an object that quietly expired is now a call that either answers inside its timeout or does not. Easier to reason about, and far easier to log.

The host process changed too. It ships self-contained, with the .NET runtime inside it. An extension no longer depends on what happens to be installed on the box, and updating Peakboard does not mean updating a shared runtime underneath somebody else’s extension.

The part that took longest was none of the above. It was version handling. Extensions out in the field were built against several kit versions, and all of them had to keep working while the host underneath them was replaced completely. Nobody notices when that goes right, which is the whole point.

That’s it.

If you have questions feel free to contact me.

Extension basics →
Peakboard.ExtensionKit on NuGet →
Sample extensions on GitHub →