osmaczko 1d4afa4c2a chore: pin delivery_module to v0.1.2
chat_module now targets delivery_module v0.1.2's binary send/
messageReceived API. chat-ui loads the delivery_module plugin at
runtime, so its pin must match v0.1.2 or the two disagree on the wire
format. chat-ui talks only to chat_module (never delivery_module
directly), so this is a flake input + lock bump with no code change.
2026-06-02 22:07:46 +02:00
2026-03-20 23:12:54 +00:00
2026-01-28 18:34:47 +02:00
2026-06-02 22:07:46 +02:00
2026-02-17 21:30:39 +00:00
2026-02-17 21:30:39 +00:00

logos-chat-ui

A QML + C++ backend UI module for the Logos platform that provides a private messaging interface built on top of Logos Chat.

The UI connects to logos-chat-module via the Logos Core module system for all chat operations — identity, conversations, and message exchange happen over the Logos network.

Built with logos-module-builder using the mkLogosQmlModule pattern (QML frontend + C++ backend with Qt Remote Objects).

What It Does

The application provides a two-panel chat interface with a dark, terminal-inspired theme:

  • Conversation list (left panel) — shows active conversations with timestamps and unread indicators
  • Chat panel (right panel) — displays messages and a text input for the selected conversation

Core functionality:

  • Identity — on startup, initializes a chat identity and displays the user's ID in the status bar
  • Intro bundles — generate your intro bundle ("My Bundle" button) and share it with others to let them start a conversation with you
  • New conversations — paste another user's intro bundle and an initial message to open a private conversation
  • Messaging — send and receive messages in real-time over the Logos network
  • Chat lifecycle — auto-initializes and starts on launch; status shown in the bottom bar

Conversations are ephemeral — messages and identity exist only while the app is running.

How to Run

# Run directly
nix run

# With local workspace overrides (if testing local changes)
nix run --override-input chat_module path:../logos-chat-module \
        --override-input chat_module/logos-module-builder path:../logos-module-builder

The standalone app starts Logos Core, loads capability_module and chat_module, then launches the QML UI via an isolated ui-host process.

In Basecamp

Build the .lgx package and install it:

# Build LGX
nix build .#lgx

# Install into Basecamp's plugin directory
lgpm --ui-plugins-dir ~/Library/Application\ Support/Logos/LogosBasecampDev/plugins \
     install --file result/*.lgx

Or from the workspace:

ws bundle logos-chat-ui --auto-local

Build Targets

nix build            # default — combined plugin + QML output
nix build .#lgx      # .lgx package for distribution
nix build .#install  # lgpm-installed output (modules/ + plugins/)
nix run              # standalone app with chat_module
nix develop          # enter development shell

Module Structure

logos-chat-ui/
├── flake.nix                  # mkLogosQmlModule (3-line flake)
├── metadata.json              # Module config (ui_qml type)
├── CMakeLists.txt             # logos_module() macro
└── src/
    ├── ChatBackend.rep        # RemoteObject interface (properties, slots, signals)
    ├── ChatBackend.h/cpp      # Business logic (extends ChatBackendSimpleSource)
    ├── chat_ui_plugin.h/cpp   # Thin plugin entry point
    ├── chat_ui_interface.h    # Plugin interface marker
    ├── ChatConfig.h           # Chat/Waku configuration builder
    ├── ConversationListModel.h/cpp  # QAbstractListModel for conversations
    ├── MessageListModel.h/cpp       # QAbstractListModel for messages
    └── qml/
        └── ChatView.qml      # QML frontend

Key Components

File Role
ChatBackend.rep Defines the C++/QML boundary — ChatStatus enum, state props, lifecycle slots, signals
ChatBackend Extends auto-generated ChatBackendSimpleSource. Manages chat lifecycle, conversations, messages via chat_module events
chat_ui_plugin Thin wrapper — creates ChatBackend in initLogos(), calls setBackend()
ConversationListModel Roles: conversationId, displayName, peerId, lastActivity, unreadCount
MessageListModel Roles: sender, content, timestamp, isMe

Requirements

Tip

When using Nix, all requirements are acquired automatically.

Dependencies

Dependency Purpose
Qt6 Core, RemoteObjects, Declarative UI framework + IPC
logos-module-builder Build system (mkLogosQmlModule)
logos-chat-module Chat backend module
Repository Role
logos-chat-module Chat backend — this UI's required dependency
logos-chat Logos Chat library (provides liblogoschat)
logos-module-builder Module build system
logos-liblogos Logos Core platform
S
Description
UI App for Logos ChatSDK POC
Readme
16 MiB
Languages
QML 56.7%
C++ 25.5%
JavaScript 9.5%
Shell 5.6%
CMake 1.3%
Other 1.4%