Skip to content

Repository files navigation

Uniform.Chat

A pure .NET implementation of the Matrix chat protocol.

There are chat clients for the terminal, the desktop (Windows and Linux) and Android, and a matrix server. They are built from class libraries that can be used independently.

Note

This is version 0.1, an early pre-release. Expect changes, and do not rely on it for important conversations yet.

Terminal client

Uniform.Chat.Terminal is the terminal chat client: rooms, messages, files and image previews, end-to-end encryption with cross-signing, key backup and emoji verification, settings and logs.

 File  Room  View  Help
┌Rooms─────────────────┐┌General — Welcome to the general chat────────────┐┌Members (3)──────┐
│ 1  General (2)       ││12:01 <alice> hi all                             ││alice            │
│ 2 @bob               ││12:02 <bob> hello! this is a long message that   ││bob              │
│ 3 +Secret project    ││            wraps under the text                 ││carol            │
│                      ││12:02 -!- carol joined                           ││                 │
│                      ││12:03  * alice waves                             ││                 │
│                      ││12:04 <you> on my way  [sending…]                ││                 │
└──────────────────────┘└─────────────────────────────────────────────────┘└─────────────────┘
 hello everyone_
 F1 Help │ Ctrl+N Rooms │ Ctrl+O Join │ Ctrl+Q Quit │ Connected as @you:matrix.org   bob typing…

Desktop and Android client

Uniform.Chat.Desktop and Uniform.Chat.Android are the graphical client, built with Avalonia on the same engine: rooms, formatted messages with replies, reactions and edits, files and image previews, invites and direct chats, and end-to-end encryption with recovery and emoji verification. It is newer than the terminal client and has fewer features.

The desktop client

Server

Uniform.Chat.Server is a homeserver with a dashboard in the terminal, or without one as a service: accounts, rooms, sync, profiles, typing and receipts, the room directory, files with thumbnails, and the encryption relay with cross-signing and key backup. Federation with other servers is not there yet.

┌Matrix server localhost───────────────────────────────────────────────────────────┐
│ File  Server                                                                     │
│ Listening:  http://localhost:8008                                                │
│ Uptime:     0:12:31                                                              │
│ Requests:   1520 answered, 3 in progress, 2 failed                               │
│ Accounts:   4 users, 3 rooms                                                     │
│                                                                                  │
│ Data:       /home/alice/.local/share/uniform-chat-server                         │
│ Log:        /home/alice/.local/share/uniform-chat-server/logs/2026-10-26…        │
│                                                                                  │
│ F9 or Alt+F for the menu; Server → Users to create accounts. Ctrl+Q stops it.    │
└──────────────────────────────────────────────────────────────────────────────────┘

STUN and TURN server

uniform-stun-server relays calls between people whose networks block direct connections, with credentials from a homeserver's shared secret. The homeserver has the same server built in: --Turn:Enabled=true.

MatrixRTC authorization server

uniform-livekit-server gives Element X, Element Call and other MatrixRTC apps tokens of a LiveKit server, after checking their users with their homeservers; it replaces lk-jwt-service. The homeserver has the same service built in: --LiveKit:Enabled=true.

Libraries

Package Contents
Uniform.Matrix.Protocol.Core Spec types shared by clients and servers: identifiers, events, API records, canonical JSON
Uniform.Matrix.Protocol.Client HTTP client of the Client-Server API
Uniform.Matrix.Protocol.Crypto End-to-end encryption in pure .NET: Olm, Megolm (a port of vodozemac), cross-signing, secret storage, key backup, SAS
Uniform.Matrix.Protocol.Server Homeserver protocol: room versions, event format, signing, authorization rules
Uniform.Matrix.Server Homeserver engine on ASP.NET Core and SQLite: AddMatrixServer, endpoints, services, storage
Uniform.Matrix.Client Client engine with local SQLite storage: sync, outbox, media cache, encryption, room state
Uniform.Matrix.Hosting Settings and logging for .NET host applications
Uniform.Matrix.Gui.Terminal Terminal.Gui settings window, log window and dialogs
Uniform.Stun.Protocol STUN and TURN messages, channel data and time-limited TURN credentials
Uniform.Stun STUN and TURN clients
Uniform.Turn STUN and TURN server: relaying over UDP, TCP and TLS, credentials, quotas, peer filtering
Uniform.Stun.Hosting The TURN server in a .NET host, with settings
Uniform.LiveKit.Protocol LiveKit access tokens, MatrixRTC room names and identities, and the authorization service's messages
Uniform.LiveKit Clients of LiveKit's room service and of MatrixRTC authorization services
Uniform.LiveKit.Authorization MatrixRTC authorization service like lk-jwt-service: OpenID verification over federation, LiveKit tokens
Uniform.LiveKit.Hosting The authorization service in ASP.NET, with settings and the lk-jwt-service endpoints

Building

Needs the .NET 10 SDK.

dotnet build Uniform.Chat.slnx
dotnet test --solution Uniform.Chat.slnx
dotnet run --project src/Uniform.Chat.Server
dotnet run --project src/Uniform.Chat.Terminal -- --Matrix:UserId=@alice:localhost --Matrix:Homeserver=http://localhost:8008

See Building, Testing and Documentation for the build, the tests and the documentation sites.

License

MIT, except Uniform.Matrix.Protocol.Crypto, which is MIT AND Apache-2.0: its Olm and Megolm code is ported from vodozemac and stays under the Apache License 2.0; see third-party notices.