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.
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…
- User guide: Getting started, Interface, Settings
- Developer guide: Overview, Using the protocol 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.
- User guide: Getting started, Rooms, Messages and files
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. │ └──────────────────────────────────────────────────────────────────────────────────┘
- User guide: Installing, Settings
- Developer guide: Server, Overview
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.
- User guide: Running, Calls through firewalls
- Developer guide: Uniform.Turn
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.
- User guide: Running, Video calls in Element X
- Developer guide: Uniform.LiveKit.Authorization
| 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 |
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:8008See Building, Testing and Documentation for the build, the tests and the documentation sites.
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.
