Uniform Chat
  • Uniform.Matrix
  • API
Search Results for

    Uniform.Matrix

    .NET 10 libraries and applications for the Matrix chat protocol.

    Project Kind Status
    Uniform.Matrix.Protocol.Core Spec types shared by clients and servers: IDs, events, API records, canonical JSON Client-Server API types
    Uniform.Matrix.Protocol.Client HTTP client of the Client-Server API Login, sync, rooms, messages, media, devices, keys, backup
    Uniform.Matrix.Protocol.Crypto End-to-end encryption in pure .NET Olm, Megolm, cross-signing, secret storage, backup, key requests, SAS
    Uniform.Matrix.Hosting Settings and logging for .NET host applications Settings file layers, option catalog, session logs
    Uniform.Matrix.Gui.Terminal Terminal.Gui components Settings window, log window, dialogs
    Uniform.Matrix.Client Headless client with local SQLite storage Session, sync, outbox, media cache, encryption, room state
    Uniform.Chat.Terminal Terminal client app (Terminal.Gui v2) Rooms, messages, files, encryption, settings and logs
    Uniform.Chat.Avalonia Graphical app shared by desktop and Android (Avalonia) Rooms, messages, files, encryption, verification, notifications on Linux
    Uniform.Chat.Desktop Graphical app for Windows and Linux Entry point, application menu entry
    Uniform.Chat.Android Graphical app for Android Entry point; no store release yet
    Uniform.Matrix.Protocol.Server Homeserver protocol: room versions, event format, signing, auth rules Room versions 10, 11 and 12
    Uniform.Matrix.Server Homeserver engine on ASP.NET Core and SQLite Accounts, rooms, sync and sliding sync, media, encryption relay, directory, push, calls, federation
    Uniform.Chat.Server Homeserver app, with or without the dashboard Dashboard, users and rooms admin, settings and logs
    • Building: build the solution and the apps, and make releases.
    • Testing: the test projects, live tests and the native test oracle.
    • Documentation: these sites and the user guides.
    • API reference: generated from XML doc comments.

    Folder structure

    src/
      Uniform.Matrix.Protocol.Core/          Shared spec types, no dependencies
        Api/                                 Request, response, event and content records; constants
        UserId.cs, MxcUri.cs, MatrixLink.cs  Identifiers and matrix.to links
        CanonicalJson.cs                     Canonical JSON and signatures
        MatrixJson.cs                        Shared JSON settings
        MatrixException.cs                   Matrix error responses
      Uniform.Matrix.Protocol.Client/        HTTP client of the Client-Server API
        MatrixClient*.cs                     Request pipeline and one partial file per spec area
        MatrixSession.cs                     Storable login session
        HomeserverDiscovery.cs               .well-known lookup
        UserInteractiveAuthException.cs      Password challenges
      Uniform.Matrix.Protocol.Crypto/        End-to-end encryption in pure .NET: Olm, Megolm and OlmMachine
        OlmAccount.cs                        Identity, one-time and fallback keys; inbound and outbound sessions
        OlmSession.cs                        Olm double ratchet and message formats
        Megolm.cs                            Megolm ratchet, sessions, session key formats and messages
        OlmKeys.cs                           Ed25519 keys, backup encryption (PkEncryption) and SAS
        OlmCipher.cs                         HKDF, AES-256-CBC and HMAC of Olm, Megolm and pickles
        OlmPrimitives.cs                     X25519 and Ed25519 through BouncyCastle, protobuf, pickle JSON
        Primitives.cs                        AES-CTR, encrypted attachments, secret storage crypto, recovery keys
        EncryptedAttachments.cs              Message content of encrypted files
        SecretStorage.cs                     Secret storage (4S) in account data
        OlmMachine*.cs                       Keys, device lists, Olm, Megolm, cross-signing, backup, key requests, SAS
        Storage.cs                           ICryptoStore, InMemoryCryptoStore, IKeyTransport
      Uniform.Matrix.Hosting/                Settings layers, option catalog and editor, session logging; any .NET host
      Uniform.Matrix.Gui.Terminal/           Terminal.Gui components: settings window, log window, dialogs, text wrapping
      Uniform.Matrix.Audio/                  Voice frames for calls: Opus (Concentus), microphone and speaker (NAudio)
      Uniform.Matrix.WebRtc/                 WebRTC subset for voice: STUN, TURN, ICE, DTLS-SRTP (BouncyCastle), RTP, SDP
      Uniform.Matrix.Client/                 Headless client: AddMatrixClient, services, storage, room state
        Configuration/                       Matrix and storage options, per-account paths
        Services/                            Session, sync, outbox, media cache, encryption, worker
        Storage/                             EF Core SQLite: session, events, outbox, media, encryption state
        Migrations/                          EF Core migrations
        State/                               RoomStore and Room: client-side room state built from sync
        Formatting/                          Markdown to HTML for sending, HTML to text and event descriptions for display
        MatrixKeyTransport.cs,               EncryptedMedia.cs  Encryption over a MatrixClient
      Uniform.Matrix.Calls/                  1:1 voice calls (m.call.*) on the client engine, WebRtc and Audio
      Uniform.Chat.Terminal/        Terminal client app
        Configuration/                       Display options
        Ui/                                  Main window, message log, image previews, client dialogs
      Uniform.Chat.Avalonia/   Avalonia app shared by desktop and Android: views, view models, services
        Services/                            One engine host per sign-in, remembered account, UI dispatcher
        ViewModels/                          Login, chat, room list items, message list
        Views/                               Windows and views in XAML, rich text, styles
      Uniform.Chat.Desktop/         Windows and Linux entry point, Linux menu entry installer
      Uniform.Chat.Android/         Android entry point, manifest and resources
      Uniform.Matrix.Protocol.Server/        Room versions, event format, hashing, signing, redaction, auth rules
      Uniform.Matrix.Server/                 Homeserver engine: AddMatrixServer, endpoints, services, storage
      Uniform.Chat.Server/            Server app, with or without the dashboard
    tests/
      Uniform.Matrix.Protocol.Tests/         API and canonical JSON unit tests, live tests against the test server
      Uniform.Matrix.Protocol.Crypto.Tests/  Olm, Megolm, oracle, protocol and live encryption tests
      Uniform.Matrix.Hosting.Tests/          Settings and log file tests
      Uniform.Matrix.Client.Tests/           Room state, stores, services and rich text tests
      Uniform.Chat.Terminal.Tests/  Option registration, message log and image tests
      Uniform.Chat.Avalonia.Tests/  View models against the in-memory server, headless rendering
      Uniform.Matrix.Protocol.Server.Tests/  Event format and auth rule tests
      Uniform.Matrix.Server.Tests/           Server through our own client, in memory
    docs/                                    This site: the home page and the generated API reference (api/)
      Uniform.Chat/                          Building, testing, documentation, and one folder per project
    theme/                                   Changes to DocFX's statictoc template, for all sites
    user-docs/
      Uniform.Chat.Desktop/         User guide of the desktop app
      Uniform.Chat.Android/         User guide of the Android app, mostly the desktop guide's pages
      Uniform.Chat.Terminal/        User guide of the terminal client
      Uniform.Chat.Server/            User guide of the server
      Uniform.Matrix.Core/                   Text included by more than one guide
    

    Dependencies point down; the protocol libraries know nothing of storage, hosting or UI:

    Uniform.Chat.Terminal ──► Uniform.Matrix.Client ──► Uniform.Matrix.Protocol.Client ──► Uniform.Matrix.Protocol.Core
        │                              │   │
        │                              │   └──► Uniform.Matrix.Protocol.Crypto ──► Uniform.Matrix.Protocol.Core
        │                              └───────┐
        │                                      ▼
        └──► Uniform.Matrix.Gui.Terminal ──► Uniform.Matrix.Hosting
    

    The graphical app uses the same engine, without the terminal components:

    Uniform.Chat.Desktop ──┐
                                  ├──► Uniform.Chat.Avalonia ──► Uniform.Matrix.Client ──► …
    Uniform.Chat.Android ──┘
    

    The server side, which also uses Core through Crypto:

    Uniform.Chat.Server ──► Uniform.Matrix.Server ──► Uniform.Matrix.Protocol.Server ──► Uniform.Matrix.Protocol.Crypto
        │                          │
        │                          └───────────┐
        │                                      ▼
        └──► Uniform.Matrix.Gui.Terminal ──► Uniform.Matrix.Hosting
    

    The server reuses Core, Crypto (to check key signatures), Hosting and Gui.Terminal, so its settings and log windows are the same as the client's. See Uniform.Matrix.Server for how it works.

    • Edit this page
    In this article
    Back to top Uniform Chat