An opinionated Matrix client for gamers.
PikaChat is a Rust-first Matrix client project built for people who treat chat like part of gameplay, not just background noise. The goal is fast, clear communication for squads, guilds, and friend groups, with practical defaults that favor coordination over clutter.
PikaChat is aiming to be the Matrix client you open before a match, not after one.
- Opinionated by default: fewer decisions to make before you can play.
- Gamer-first UX: fast room switching, readable timelines, and low-friction message actions.
- Desktop-first foundation: robust Linux desktop behavior now, portable backend for future mobile/other clients.
- Rust all the way down: predictable performance, safer concurrency, and maintainable architecture.
- Reliable sync under real use: reconnects, retries, and timeline integrity matter.
- Messaging tools that match game flow: fast send/edit/redact and DM support.
- Media support in the core: upload/download already available through backend APIs.
- Future E2EE and trust ergonomics: security that does not feel like a side quest.
PikaChat is now in an early but functional desktop MVP phase:
- Rust Matrix backend runtime is live and integrated into the desktop app.
- Desktop app now has a login pane, remember-session restore, logout with destructive local wipe, room list/timeline rendering, and plain-text message send.
- Timeline updates live from sync events.
- Sidebar is resizable and room selection is wired to backend room open/pagination commands.
- Security menu supports:
Check Backup StatusBack Up Identity...Reset Identity Backup...(creates a fresh recovery key)Restore Identity...(recovery key/passphrase restore flow)
- Recovery dialogs include copy-key UX and restore in-flight protections.
- Matrix Backend Runtime
- Basic Sign In/Out
- Room List/Timeline Rendering
- Room Names/Group Names
- Timeline Pagination
- Timeline Event Rendering
- Plain-Text Message Send
- Back Up/Restore Identity
- E2EE
- Media Upload/Download (Images)
- Media Upload/Download (Video)
- Reactions
- Voice Channels
- Video Channels
- Room Members/Invites
- Room Settings
- Theming (Customizable Pallet/Corner Images)
- Sound Board (Voice/Video Channels)
- Multi-Account Management
crates/backend-core:- frontend-facing protocol (
BackendCommand,BackendEvent, timeline types, errors) - state machine and retry/timeline helpers
- frontend-facing protocol (
crates/backend-matrix:- Matrix SDK-backed runtime and adapter (
spawn_runtime,MatrixFrontendAdapter)
- Matrix SDK-backed runtime and adapter (
crates/backend-platform:- platform integrations (for example keyring abstraction)
apps/backend-smoke:- smoke/integration command-line harness for live testing
apps/pikachat-desktop:- Slint desktop Matrix client shell
git clone git@github.com:TheSameCat2/PikaChat.git
cd PikaChat- Rust toolchain (stable) with
cargoandrustc - Linux desktop session (Wayland or X11) for the Slint desktop shell
cargo check --workspacecargo test --workspaceRun the desktop app:
cargo run -p pikachat-desktopOptional env prefill (does not auto-login):
PIKACHAT_HOMESERVER='https://matrix.example.org' \
PIKACHAT_USER='@your-user:example.org' \
PIKACHAT_PASSWORD='your-password' \
cargo run -p pikachat-desktopExpected behavior:
- Window opens to the login pane unless a remembered session is restored.
- Login homeserver input is host-only (
matrix.example.org); app enforces securehttps://. - Joined rooms appear in the left sidebar.
- Selecting a room loads timeline items in chat bubbles.
- Sending a message posts it to the selected room.
Remember passwordcontrols whether session restore is persisted across relaunches.File -> Logoutasks for confirmation, then clears local chat/cache/keys and returns to login.File -> Quitexits cleanly.Help -> About Slint...opens the About view containing Slint's built-inAboutSlintwidget.Securitymenu exposes backup/reset/restore flows.
If you want to exercise backend flows directly:
cargo run -p backend-smokeYou can pass env vars for live auth/media/recovery smoke (PIKACHAT_HOMESERVER, PIKACHAT_USER, PIKACHAT_PASSWORD, etc.).
Useful flags include:
PIKACHAT_START_SYNC=1PIKACHAT_DM_TARGET='@user:example.org'PIKACHAT_GET_RECOVERY_STATUS=1PIKACHAT_ENABLE_RECOVERY=1PIKACHAT_RESET_RECOVERY=1PIKACHAT_RECOVERY_KEY='...'
Most Matrix clients are general-purpose. PikaChat is intentionally not trying to be everything for everyone. It is trying to be excellent for game-centric groups that need:
- quick context switching,
- sane defaults,
- durable messaging behavior,
- and a clear path from shell to full-featured client.
Current priorities after this MVP slice:
- improve encrypted-history recovery UX (clearer guidance and key lifecycle handling),
- continue timeline decryption quality for older encrypted events,
- add media send/download UI,
- refine login/session management UX and account-switch ergonomics,
- keep backend APIs UI-agnostic for future mobile/client reuse.
PLAN.mdis local-only planning scratch and is intentionally not committed.- Environment credentials are optional prefill only; no password is persisted by the desktop app.
- Do not commit secrets.
