TelnetNegotiationCore 4.2.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package TelnetNegotiationCore --version 4.2.0
                    
NuGet\Install-Package TelnetNegotiationCore -Version 4.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TelnetNegotiationCore" Version="4.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TelnetNegotiationCore" Version="4.2.0" />
                    
Directory.Packages.props
<PackageReference Include="TelnetNegotiationCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TelnetNegotiationCore --version 4.2.0
                    
#r "nuget: TelnetNegotiationCore, 4.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TelnetNegotiationCore@4.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TelnetNegotiationCore&version=4.2.0
                    
Install as a Cake Addin
#tool nuget:?package=TelnetNegotiationCore&version=4.2.0
                    
Install as a Cake Tool

<p align="center"> <img src="https://raw.githubusercontent.com/HarryCordewener/TelnetNegotiationCore/main/docs/images/LargerLogo.png" alt="Telnet Negotiation Core" width="480"> </p>

<p align="center"> <a href="https://www.nuget.org/packages/TelnetNegotiationCore"><img alt="NuGet" src="https://img.shields.io/nuget/v/TelnetNegotiationCore?style=for-the-badge&logo=nuget&logoColor=white&color=blue"></a> <a href="https://www.nuget.org/packages/TelnetNegotiationCore"><img alt="Downloads" src="https://img.shields.io/nuget/dt/TelnetNegotiationCore?style=for-the-badge&color=blue"></a> <a href="https://github.com/HarryCordewener/TelnetNegotiationCore/actions/workflows/dotnet.yml"><img alt="Build" src="https://img.shields.io/github/actions/workflow/status/HarryCordewener/TelnetNegotiationCore/dotnet.yml?branch=main&style=for-the-badge&label=build"></a> <a href="https://scorecard.dev/viewer/?uri=github.com/HarryCordewener/TelnetNegotiationCore"><img alt="OpenSSF Scorecard" src="https://img.shields.io/ossf-scorecard/github.com/HarryCordewener/TelnetNegotiationCore?style=for-the-badge&label=scorecard"></a> <a href="https://github.com/HarryCordewener/TelnetNegotiationCore/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/github/license/HarryCordewener/TelnetNegotiationCore?style=for-the-badge"></a> <a href="https://discord.gg/SK2cWERJF7"><img alt="Discord" src="https://img.shields.io/discord/1193672869104861195?style=for-the-badge&logo=discord&logoColor=white&label=discord"></a> <a href="https://www.bestpractices.dev/projects/14596"><img alt="Best Practices" src="https://www.bestpractices.dev/projects/14596/badge"></a> </p>

Telnet Negotiation Core

A testable implementation of telnet, and as many of its RFCs as are viable, for .NET. Written with MUDs in mind: every telnet option is a plugin you opt into, the interpreter is a state machine over the byte stream, and every outgoing write is serialized for you.

dotnet add package TelnetNegotiationCore

Quick start

BuildAndStartAsync wires the connection and starts the read loop. Pass an IDuplexPipe (Kestrel's connection.Transport), a TcpClient, or a raw Stream:

var (telnet, readTask) = await new TelnetInterpreterBuilder()
    .UseMode(TelnetInterpreter.TelnetMode.Server)
    .UseLogger(logger)
    .OnSubmit(HandleSubmitAsync)
    .AddPlugin<NAWSProtocol>()
        .OnNAWS(HandleWindowSizeAsync)
    .AddPlugin<GMCPProtocol>()
        .OnGMCPMessage(HandleGMCPAsync)
    .AddPlugin<MSSPProtocol>()
        .WithMSSPConfig(() => new MSSPConfig { Name = "My Server", UTF_8 = true })
    .BuildAndStartAsync(connection.Transport);

await readTask;   // completes when the connection closes

AddDefaultMUDProtocols() registers the nine a MUD usually wants in one call, and AddTelnetServer() / AddTelnetClient() register the whole thing with the DI container. See Getting started.

What it speaks

Each row is a plugin you register, and one page in the protocol reference.

Specification Specification
RFC 855 Telnet Option Specification MSSP Mud Server Status Protocol
RFC 857 Echo MSDP Mud Server Data Protocol
RFC 858 Suppress Go-Ahead GMCP Generic Mud Communication Protocol
RFC 885 End Of Record EOR End Of Record
RFC 1073 Window Size (NAWS) MTTS Terminal type capabilities
RFC 1079 Terminal Speed MNES Mud New Environment Standard
RFC 1091 Terminal Type MCCP Compression, 2 and 3
RFC 1096 X-Display Location MXP MUD eXtension Protocol (option 91)
RFC 1184 Line Mode (MODE) MCP 2.1 MUD Client Protocol, with cords
RFC 1372 Flow Control RFC 1950 ZLIB compression
RFC 1408 Environment RFC 2066 Charset, including TTABLE
RFC 1572 New Environment RFC 2941 Authentication
RFC 2946 Encryption
Pueblo Pueblo handshake (in-band, no option)

Being a telnet negotiation library, it does not render the content layers that ride on top: ANSI, Pueblo, and MXP's own tags are the host application's to draw. MXP is negotiated and Pueblo is handshaken; neither's markup is parsed.

State

Stable. The package targets netstandard2.0, net8.0, net10.0 and net11.0. Building from source needs the .NET 11 SDK (RC1 or later), which global.json pins.

Releases are published from GitHub Actions by trusted publishing — no long-lived key exists — and carry an attestation of the workflow and commit that built them:

gh attestation verify TelnetNegotiationCore.3.0.0.nupkg --repo HarryCordewener/TelnetNegotiationCore

Contributing

Issues and pull requests are welcome — see CONTRIBUTING.md for how to build and test, and SECURITY.md for anything that should not be public.

License

Apache-2.0.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed.  net11.0 is compatible. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on TelnetNegotiationCore:

Package Downloads
SharpMUSH.Library

SharpMUSH plugin contract surface (interim). External SharpMUSH plugins reference this package to write [SharpPlugin] : PluginBase entry types with [SharpCommand]/[SharpFunction] members. Aligned to PluginContractVersion 3.0.0.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
4.3.0 615 9/23/2026
4.2.0 696 9/19/2026
4.1.1 555 9/15/2026
4.1.0 100 9/15/2026
4.0.0 137 9/14/2026
3.0.0 114 9/11/2026
2.16.0 1,602 9/7/2026
2.14.0 196 9/6/2026
2.13.0 133 8/30/2026
2.12.0 136 8/27/2026
2.11.0 316 8/20/2026
2.10.0 196 8/19/2026
2.9.1 381 8/18/2026
2.9.0 125 8/18/2026
2.8.3 115 8/18/2026
2.8.2 180 8/18/2026
2.8.1 2,171 7/31/2026
2.8.0 191 7/31/2026
2.7.0 222 7/30/2026
Loading failed