A puppeting Matrix - Zulip bridge
Find a file
dependabot[bot] 66953a9c2e Bump urllib3 from 2.2.2 to 2.5.0 in the pip group across 1 directory
Bumps the pip group with 1 update in the / directory: [urllib3](https://github.com/urllib3/urllib3).


Updates `urllib3` from 2.2.2 to 2.5.0
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.2.2...2.5.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.5.0
  dependency-type: indirect
  dependency-group: pip
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-24 08:52:16 +00:00
.github/workflows Update Docker publish to add tags and sign image 2024-03-14 16:11:51 +02:00
matrixzulipbridge Add a try, except for attempting to parse Matrix replies 2024-03-08 16:30:19 +02:00
tests Rename Private -> Direct room 2024-01-21 11:36:19 +02:00
.dockerignore Create Dockerfile and .dockerignore 2024-02-02 00:26:01 +02:00
.gitignore Run pre-commit on all files 2024-01-20 15:22:54 +02:00
.pre-commit-config.yaml Exclude README from pre-commit 2024-01-20 13:58:06 +02:00
.pylintrc Initial commit 2024-01-19 08:52:49 +02:00
Dockerfile Create Dockerfile and .dockerignore 2024-02-02 00:26:01 +02:00
LICENSE Create LICENSE 2024-01-19 08:56:57 +02:00
poetry.lock Bump urllib3 from 2.2.2 to 2.5.0 in the pip group across 1 directory 2025-06-24 08:52:16 +00:00
pyproject.toml Bump the pip group across 1 directory with 3 updates 2025-04-30 16:32:29 +03:00
README.md Update README.md (replies are formatted corectly-ish now) 2024-03-08 16:52:32 +02:00

MatrixZulipBridge

Tests PyPI version Python versions

A Matrix puppeting appservice bridge for Zulip

Join the Matrix room #MatrixZulipBridge:shema.lv if you have any questions or just want to chat.

Features

  • Streams
  • Zulip topics - Matrix threads
  • Direct messages
  • Formatted text* (not all of Zulip's formatting)
  • Matrix puppets
  • Zulip puppets
  • Message Media* (only translating URIs)
  • Presence
  • Reactions
  • Redactions* (only from Matrix in DMs)
  • Replies
  • Typing indicators

Installation

Prerequisites

  • Python >=3.10
  • Matrix homeserver with ability to add appservices

PyPI

pip install matrixzulipbridge

Docker

docker run ghcr.io/gearkite/matrixzulipbridge:{tag} ...
See packages for possible tags

From source

  1. Clone or download this git repository
    git clone https://github.com/GearKite/MatrixZulipBridge.git
  2. Install Poetry
  3. Install dependencies
    poetry install
  4. Enter the virtual environment
    poetry shell

Running

Example

  1. Generate a registration file
    python3 -m matrixzulipbridge --config config.yaml --generate
  2. Install the appservice on your homeserver
  3. Run the bridge
    python3 -m matrixzulipbridge --config config.yaml https://homeserver.example.com

Usage

usage: python3 -m matrixzulipbridge [-h] [-v] (-c CONFIG | --version) [-l LISTEN_ADDRESS] [-p LISTEN_PORT] [-u UID] [-g GID] [--generate] [--generate-compat] [--reset] [--unsafe-mode] [-o OWNER] [homeserver]

A puppeting Matrix - Zulip appservice bridge (v0.1.1.dev2+g3ed8ed7)

positional arguments:
  homeserver            URL of Matrix homeserver (default: http://localhost:8008)

options:
  -h, --help            show this help message and exit
  -v, --verbose         log debug messages
  -c CONFIG, --config CONFIG
                        registration YAML file path, must be writable if generating (default: None)
  --version             show bridge version
  -l LISTEN_ADDRESS, --listen-address LISTEN_ADDRESS
                        bridge listen address (default: as specified in url in config, 127.0.0.1 otherwise) (default: None)
  -p LISTEN_PORT, --listen-port LISTEN_PORT
                        bridge listen port (default: as specified in url in config, 28464 otherwise) (default: None)
  -u UID, --uid UID     user id to run as (default: None)
  -g GID, --gid GID     group id to run as (default: None)
  --generate            generate registration YAML for Matrix homeserver (Synapse)
  --generate-compat     generate registration YAML for Matrix homeserver (Dendrite and Conduit)
  --reset               reset ALL bridge configuration from homeserver and exit
  --unsafe-mode         allow appservice to leave rooms on error (default: False)
  -o OWNER, --owner OWNER
                        set owner MXID (eg: @user:homeserver) or first talking local user will claim the bridge (default: None)

After registering and launching the bridge, start a chat. You can find the localpart in your registration.yaml
This bridge is mainly configurable through Matrix, send help to get a list of commands

Bridging a stream

In your control room chat with the bridge send:

  1. addorganization {name}
  2. open {name}

In the organization room send:

  1. site example.com
  2. email my-bot@example.com
  3. apikey xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  4. connect
  5. subscribe {zulip stream name}

Credits

This bridge is heavily based on Heisenbridge. Thank you, Heisenbridge contributors!