CI

Cinny

Simple, elegant and secure Matrix client

Matrix & XMPP ★ 3.9k stars Easy setup AGPL-3.0

Cinny is a Matrix client focused on a clean, simple and modern user interface. It can be self-hosted as a static web app to connect to any Matrix homeserver.

Key features

  • Clean and minimal UI
  • End-to-end encryption
  • Static web app deployment
  • Desktop builds available

Pros & cons

Strengths

  • Lightweight to host
  • Attractive interface

Trade-offs

  • Fewer features than Element
  • Matrix-only

Cinny replaces

Last reviewed Sep 13, 2026 · 767 words

Cinny is a Matrix client, not a Matrix server, and the whole hosting job is serving about 10 MB of static files. There is no database, no background process, no upgrade migration. If you already run a homeserver, adding Cinny costs one container and 64 MB of RAM, and the payoff is a chat UI that people who dislike Element's density will actually use. If you do not run a homeserver yet, stop here and pick one first; the client is the last 5 percent of the work.

What you are hosting is a folder of files

The build output is HTML, JavaScript and a config.json. That has consequences. Any web server works, the official Docker image is nginx with the files copied in, and a broken deploy is fixed by re-copying the folder. The only file you edit is the config, which pins the homeserver list:

{
  "defaultHomeserver": 0,
  "homeserverList": ["matrix.example.com"],
  "allowCustomHomeservers": false
}

Setting allowCustomHomeservers to false turns your Cinny into a branded front door for one server, which is the setup that makes sense for a family or a small team. Leave it true if you want a general-purpose client that friends on other servers can also use.

services:
  cinny:
    image: ajbura/cinny:latest
    ports:
      - "8085:80"
    volumes:
      - ./config.json:/app/config.json:ro
    restart: unless-stopped

Put Caddy or whatever proxy you already run in front for HTTPS. Because Cinny runs entirely in the browser, the homeserver's CORS settings and well-known delegation matter more than anything on the Cinny side; if login fails, that is where to look, not in the container logs.

The homeserver choice matters more than the client

Cinny talks the standard client-server API, so it works against Synapse, Conduit and the Conduit forks like conduwuit. For a household, Conduit on a Pi-class box is fine and Cinny in front of it is a pleasant pairing: both are lightweight and neither wants a Postgres server. For anything with federation to large public rooms, Synapse is still the safer choice because it has the longest track record with edge cases. The client will not save you from a homeserver that falls over.

Where Cinny is honestly behind Element

End-to-end encryption, device verification, spaces, threads and reactions are all present, and the interface is cleaner than Element Web by a wide margin. The gaps are real, though. Voice and video calls are not a Cinny feature at last check, so a group that wants calls needs Element or Element Call alongside. Room administration for larger communities (moderation tooling, complex permission editing) is thinner. Widgets and integrations that Element exposes are mostly absent. And it is Matrix-only, so the "Slack replacement" framing in the tagline is true only for text chat.

I run both. Cinny is the default I send in the invite email; the same accounts open in Element when someone needs a call or an admin panel. Nothing about that is awkward, since Matrix sessions are per-device and encryption keys can be shared between verified sessions.

Mobile is a separate decision

Cinny ships desktop builds, and the web app is usable on a phone browser, but there is no native mobile app. For phones, FluffyChat is the friendliest match in spirit, and Element X is the most capable. Tell users this before they ask, because "the chat app has no app" is the first complaint you will otherwise hear.

Updating is copy-and-restart

Static files mean updates are risk-free in a way most self-hosted software is not: pull the new image, restart, and if something breaks, roll back the tag. Cinny releases tend to come every few months. The one thing to watch is that your config.json format still matches; the project documents changes in release notes and a mismatch shows up as a blank page rather than a crash.

What I'd do

Host Cinny as the default client for a small homeserver, pinned to that server with custom homeservers disabled, behind the same proxy as the homeserver. Keep Element Web available at a second path for calls and admin work, and point phone users at FluffyChat or Element X. For a large community server the case is weaker: the moderation and calling gaps will bite, and Element as the primary client is the safer pick. Browse the rest of the Matrix and XMPP category if you have not yet picked the server, which is the decision that actually carries the risk.

Compare Cinny

26 head-to-head comparisons.

Similar matrix & xmpp apps