← ConnectKit
CK

5-Minute Quickstart

두 개의 .NET 엔드포인트를 종단간 암호화로 연결하기 — 5분.
Get an end-to-end-encrypted connection between two .NET endpoints, across NAT, in five minutes.

1 설치 · Install ~30s

In your project directory:

dotnet add package RemoteViewer.ConnectKit

2 계정 발급 · Get credentials ~1m

Sign up at ck.remote-viewer.com → enter a company id + email → confirm the emailed link. You'll get your Company and TenantKey. The coordination host is sig.ck.remote-viewer.com:1618.

지금 가입 · Sign up

3 장치 코드 · The device (waits to be reached) ~1m

A console app that accepts a peer and echoes every message back, uppercased:

using ConnectKit;
using System.Text;

await using var ck = new ConnectKitClient(new ConnectKitOptions {
    Secret     = "our-shared-secret",              // you choose this; both sides must match
    Signaling  = "sig.ck.remote-viewer.com:1618",
    Company    = "your-company",                    // from step 2
    TenantKey  = "ck_...",                          // from step 2
    DeviceName = "my-device",                       // the name the client dials
});

Console.WriteLine("Waiting for a peer…");
await using var channel = await ck.AcceptAsync();
Console.WriteLine($"Connected! encrypted={channel.IsEncrypted}");

channel.OnData += bytes => {
    var msg = Encoding.UTF8.GetString(bytes);
    channel.Send(Encoding.UTF8.GetBytes(msg.ToUpperInvariant()));   // echo back
};
Console.ReadLine();   // keep the app alive

4 클라이언트 코드 · The client (dials the device) ~1m

Same Secret, Company, TenantKey — it dials the device by name:

using ConnectKit;
using System.Text;

await using var ck = new ConnectKitClient(new ConnectKitOptions {
    Secret    = "our-shared-secret",               // must match the device
    Signaling = "sig.ck.remote-viewer.com:1618",
    Company   = "your-company",
    TenantKey = "ck_...",
});

await using var channel = await ck.ConnectAsync("my-device");
Console.WriteLine($"Connected! encrypted={channel.IsEncrypted}");

channel.OnData += bytes => Console.WriteLine("Echo: " + Encoding.UTF8.GetString(bytes));
channel.Send(Encoding.UTF8.GetBytes("hello"));
await Task.Delay(1000);

5 실행 · Run both ~1m

Run the device on one machine and the client on another (or two terminals). The client prints:

Connected! encrypted=True
Echo: HELLO
🎉 That's it. You just ran an end-to-end-encrypted round trip between two endpoints — over a direct hole-punch if possible, an encrypted relay or WSS gateway if not — with the server never seeing your data.

Key concepts

Full reference & all transports: NuGet package page · Questions: jhhan@yu.ac.kr

ConnectKit is commercial software licensed under its EULA. © 2026 Joo-Hwan Han.