Skip to content

inline-chat/matrix-inline

Repository files navigation

matrix-inline

Matrix bridge for Inline, built with mautrix-go bridgev2 for Beeper and self-hosted Matrix deployments.

The bridge lets Matrix users log in with an existing Inline account, sync Inline chats into Matrix rooms, and send messages between Matrix/Beeper and Inline.

Features

  • Login with Inline email or SMS verification code
  • Session resume after bridge restart
  • Startup chat sync
  • Recent history sync and bridgev2 backfill
  • Text messages
  • Normal message replies
  • Message edits
  • Message deletes/redactions
  • Reactions
  • Read receipts and marked-unread state
  • Permanent per-room mute/unmute
  • Typing notifications
  • Images, videos, files, audio, and voice/audio files
  • Inline member list sync for bridged rooms
  • Matrix ghosts with Inline display names and avatars when available
  • Configurable bridge bot and network profile metadata
  • DM creation with a numeric Inline user ID
  • Basic group/thread creation from Matrix
  • Add/remove Inline thread participants from Matrix membership changes
  • Rename Inline threads from Matrix
  • Explicit Inline thread deletion from Beeper/Matrix
  • Management commands for status and reconnect
  • New Inline account signup or invite-code onboarding
  • Matrix-native thread UI for Inline reply-thread chats
  • Contact search for DM creation
  • Formatted text, rich entities, and Matrix mention mapping
  • Pins and Inline link-preview projection
  • Room avatars
  • Room topic/description editing
  • Presence and richer workspace/space representation
  • Timed mute expiration (permanent mute is supported)
  • Calls

Requirements

  • An existing Inline account
  • A Matrix homeserver or Beeper bridge deployment
  • Docker and Docker Compose, or Go 1.25 plus Rust 1.96 for native builds
  • A published container image from ghcr.io/inline-chat/matrix-inline

Source builds require a local checkout of inline-chat/inline-public next to this repo because the bridge builds against the Rust Inline client crates:

inline-chat/
  inline-public/
  matrix-inline/

For agent-assisted deployment, use PROMPT.md as a concise handoff that points back to the current setup docs.

Docker Setup

Create a data directory:

mkdir -p data

Pull the published image:

docker compose pull

Published images are built for linux/amd64 and linux/arm64.

Beeper

Generate a bridgev2 config with the bridge type assigned by your Beeper deployment:

bbctl c --type bridgev2 <inline-bridge-type> > data/config.yaml

Start the bridge:

docker compose up -d

The container uses the Beeper-issued appservice tokens from data/config.yaml and writes data/registration.yaml on first start.

Self-hosted Matrix

Start once to generate data/config.yaml:

docker compose up

Edit data/config.yaml and set at least:

  • homeserver.address
  • homeserver.domain
  • appservice.address
  • bridge.permissions

Start again to generate data/registration.yaml:

docker compose up

Register data/registration.yaml with your homeserver, restart the homeserver, then run the bridge detached:

docker compose up -d

When the homeserver and bridge are on the same Docker network, appservice.address usually looks like:

http://matrix-inline:29343

The URL must be reachable by the homeserver container or host.

Build from source

Use the build override when developing or testing unreleased code:

docker compose -f docker-compose.yml -f docker-compose.build.yml up --build

Native Build

Build the Rust adapter:

cargo build --release -p matrix-inline-adapter

Build the Go bridge:

go build -tags goolm -o ./matrix-inline ./cmd/matrix-inline

For systemd installation, see deploy/systemd.

Login

Use Beeper Desktop settings or the Matrix bridge bot to add an Inline account. The login flow asks for your Inline email address or phone number, then asks for the verification code sent by Inline.

Bridge bot commands:

login
inline-status
inline-reconnect
inline-settings
inline-hidden-chats <exclude|include|default>
logout <login ID>

Aliases:

istatus
ireconnect
isettings
ihidden

Hidden Inline dialogs are excluded from Matrix by default. These are dialogs whose Inline state has showInChatList: false; excluding them prevents new portal creation, history fill, and inbound event projection. Users can change the behavior for their account with inline-hidden-chats, while operators can set the default in the network configuration:

network:
  hidden_dialogs: exclude # exclude or include

Changing the policy does not delete Matrix rooms that were already created.

Configuration

The Docker entrypoint stores bridge state in /data:

/data/config.yaml
/data/registration.yaml
/data/matrix-inline.db
/data/inline-client/inline-client.sqlite3
/data/inline-client/accounts/<session-namespace>.sqlite3

Useful environment variables:

MATRIX_INLINE_IMAGE=ghcr.io/inline-chat/matrix-inline:latest
INLINE_SIDECAR_BIND=127.0.0.1:29342
INLINE_SIDECAR_URL=http://127.0.0.1:29342
INLINE_CLIENT_STORE=/data/inline-client/inline-client.sqlite3
INLINE_CLIENT_ACCOUNT_STORE_DIR=/data/inline-client/accounts
MATRIX_INLINE_DB_URI=file:/data/matrix-inline.db?_txlock=immediate
MATRIX_INLINE_HOMESERVER_ADDRESS=http://synapse:8008
MATRIX_INLINE_HOMESERVER_DOMAIN=example.com
MATRIX_INLINE_APPSERVICE_ADDRESS=http://matrix-inline:29343
MATRIX_INLINE_APPSERVICE_HOSTNAME=0.0.0.0
MATRIX_INLINE_NETWORK_DISPLAYNAME=Inline
MATRIX_INLINE_NETWORK_URL=https://inline.chat
MATRIX_INLINE_NETWORK_ICON=mxc://matrix.org/ITxccqHQkLCnPQDouWfsPhqs
MATRIX_INLINE_BOT_DISPLAYNAME=Inline bridge bot
MATRIX_INLINE_BOT_AVATAR=
INLINE_API_BASE_URL=https://api.inline.chat/v1
INLINE_REALTIME_URL=wss://api.inline.chat/realtime
RUST_LOG=info

The Inline client store contains session credentials. Keep it private and back it up with the bridge database.

Upgrades from the initial bridge release are in-place. Keep both the bridge database and the existing Inline client store: the adapter imports the legacy session into the per-account store, starts the new durable bucket sync from a safe lookback, and the bridge runs a checkpointed dialog/state reconciliation in bounded, rate-limited passes. Recent history is repaired first and older history continues from per-room Matrix delivery checkpoints. Users should not need to log in again or delete old rooms to recover, and an interrupted recovery continues from its last completed chat.

Bridge Profile

matrix-inline ships with the official Inline display name, URL, and bridge icon. Docker deployments also apply the same icon to the appservice bot profile by default.

appservice:
  bot:
    displayname: Inline bridge bot
    avatar: mxc://matrix.org/ITxccqHQkLCnPQDouWfsPhqs
network:
  displayname: Inline
  network_url: https://inline.chat
  network_icon: mxc://matrix.org/ITxccqHQkLCnPQDouWfsPhqs

For custom branding, set MATRIX_INLINE_NETWORK_ICON. Use MATRIX_INLINE_BOT_AVATAR only when the bot avatar should be different from the bridge icon.

Development

Run local checks:

scripts/check.sh

Run a local adapter smoke test:

scripts/smoke-local.sh --start-adapter

Run the local Matrix/appservice E2E smoke harness:

scripts/e2e-local.sh smoke

Local Go commands use -tags goolm so development builds do not require system libolm headers.

Documentation

License

Apache-2.0. See LICENSE.

About

Matrix/Beeper bridge for Inline

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors