selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

mautrix-meta logo

Self-host mautrix-meta

v0.2610.0

Matrix puppeting bridge for Messenger and Instagram DMs

ReleaseOpen SourceAGPL-3.0
Updated4 days ago
LanguageGo
Setup difficultyAdvanced
Stars
460
Port
29319 (The appservice HTTP listener (appservice -> hostname/port in the config).)
Requires
Matrix homeserver with appservice support (e.g. Synapse), PostgreSQL
Install with Docker

What is mautrix-meta?

mautrix-meta is a Matrix puppeting bridge for Meta's chat networks, and the repository actually produces two of them: one for Facebook Messenger and one for Instagram DMs. It registers as an application service against a homeserver such as Synapse, and syncs messages, media, replies, reactions, edits, read receipts, typing indicators and group membership in both directions, with configurable backfill of older history and optional end-to-bridge encryption. Accounts are logged in by chatting with the bridge bot, pasting browser cookies or using username/password flows for Messenger Lite and Instagram. Operators can run it from a prebuilt binary or systemd service, or pull its image from dock.mau.dev; the bridge keeps its data in a PostgreSQL (or SQLite) database of its own. Presence and polls are not bridged, and Meta sometimes flags bridged logins as suspicious activity, so the docs recommend enabling two-factor authentication on the account. A fully hosted version of these bridges exists on Beeper, but mautrix-meta itself is AGPL-licensed open-source software written for self-hosters.

Should you self-host mautrix-meta?

mautrix-meta scores 52/100 on selfhost.directory (how scoring works) and ranks #9 of 13 in Instant Messaging. It has 460 GitHub stars.

It shipped 10 stable releases in the past year. The latest, v0.2610.0, came out on 16 October 2026. New versions land roughly every 4 weeks.

Setup is advanced: plan for several services and some ongoing maintenance. It is AGPL-3.0-licensed and written mostly in Go.

Its closest alternative on selfhost.directory is Rocket.Chat (82/100, 46 347 stars). It scores higher overall, so compare the two before you pick. See mautrix-meta vs Rocket.Chat side by side.

Features

  • Cookie or username/password login
  • Encrypted Messenger chat supportListed as incomplete in the roadmap (chat-backup writing and presence unchecked).
  • End-to-bridge encryption
  • Facebook Messenger and Instagram DM bridging
  • Group chat membership bridging
  • History backfill
  • Media and message content bridging
  • Message edit and redaction bridging
  • Personal filtering spaces
  • Polls
  • Presence bridging
  • Proxy Support
  • Reactions bridging
  • Read receipts and typing notifications
  • Relay modeDisabled by default (relay.enabled: false).

mautrix-meta README

How to install mautrix-meta

Install mautrix-meta with Docker

Docker

mkdir mautrix-$bridge && cd mautrix-$bridge

docker pull dock.mau.dev/mautrix/$bridgerepo:

docker run --rm -v pwd:/data:z dock.mau.dev/mautrix/$bridgerepo:

docker run --restart unless-stopped -v pwd:/data:z dock.mau.dev/mautrix/$bridgerepo:

The Instagram bridge has an ig- prefix in the Docker tags, e.g. ig-latest or ig-v26.08.

How to configure mautrix-meta

  • addresshomeserver section: address the appservice uses to connect to the homeserver; a mandatory field to change during setup.

    homeserver section: address the appservice uses to connect to the homeserver; a mandatory field to change during setup.

  • allowfalseencryption section: whether end-to-bridge encryption is enabled at all; if false the bridge will not function in encrypted rooms.

    encryption section: whether end-to-bridge encryption is enabled at all; if false the bridge will not function in encrypted rooms.

    values: true / false

  • command_prefix'!fb'Bridge option: the prefix for commands, only required in non-management rooms.

    Bridge option: the prefix for commands, only required in non-management rooms.

  • disable_view_oncefalseNetwork option: should view-once messages be disabled entirely?

    Network option: should view-once messages be disabled entirely?

    values: true / false

  • domainhomeserver section: domain of the homeserver (server_name, used for MXIDs); a mandatory field to change during setup.

    homeserver section: domain of the homeserver (server_name, used for MXIDs); a mandatory field to change during setup.

  • e2ee_backfillfalseNetwork option: should the bridge prompt for the encrypted backup PIN on login?

    Network option: should the bridge prompt for the encrypted backup PIN on login?

    values: true / false

  • env_config_prefixPrefix for environment variables that map to config fields (dots or __ for nesting, _FILE suffix to read from a path); null disables env config.

    Prefix for environment variables that map to config fields (dots or __ for nesting, _FILE suffix to read from a path); null disables env config.

  • homeserver -> addressAddress the appservice uses to connect to the homeserver; mandatory to set during setup.

    Address the appservice uses to connect to the homeserver; mandatory to set during setup.

  • homeserver -> domainHomeserver domain (server_name, used for MXIDs); mandatory to set during setup.

    Homeserver domain (server_name, used for MXIDs); mandatory to set during setup.

  • marketplace_spacetrueNetwork option: should Facebook marketplace chats get a separate space inside the main Facebook space?

    Network option: should Facebook marketplace chats get a separate space inside the main Facebook space?

    values: true / false

  • max_initial_messages50backfill section: maximum number of messages to backfill in empty rooms; zero or negative disables backfill in new rooms.

    backfill section: maximum number of messages to backfill in empty rooms; zero or negative disables backfill in new rooms.

  • permissions"*": relayPermission map controlling bridge access; permitted values are relay, commands, user and admin, keyed by *, a domain, or an MXID.

    Permission map controlling bridge access; permitted values are relay, commands, user and admin, keyed by *, a domain, or an MXID.

    values: relay, commands, user, admin

  • personal_filtering_spacestrueBridge option: create a Matrix space for each login containing the rooms that account is in.

    Bridge option: create a Matrix space for each login containing the rooms that account is in.

    values: true / false

  • pickle_keygeneratePickle key used to encrypt encryption keys in the bridge database; when set to generate a random key is created.

    Pickle key used to encrypt encryption keys in the bridge database; when set to generate a random key is created.

  • port29319appservice section: port where the appservice listens (with hostname, default 127.0.0.1; use 0.0.0.0 under Docker).

    appservice section: port where the appservice listens (with hostname, default 127.0.0.1; use 0.0.0.0 under Docker).

  • private_chat_portal_metatrueBridge option: explicitly set names and avatars for DM portals (needed for clients without MSC4171 support).

    Bridge option: explicitly set names and avatars for DM portals (needed for clients without MSC4171 support).

    values: true / false

  • proxyNetwork option: static HTTP/SOCKS5 proxy address used when connecting to Meta.

    Network option: static HTTP/SOCKS5 proxy address used when connecting to Meta.

  • proxy_mediafalseNetwork option: should media be proxied too?

    Network option: should media be proxied too?

    values: true / false

  • split_portalsfalseBridge option: give every user their own portals instead of shared ones. Setting this is irreversible and potentially destructive if portals already exist.

    Bridge option: give every user their own portals instead of shared ones. Setting this is irreversible and potentially destructive if portals already exist.

    values: true / false

  • torfalseNetwork option: connect to the Facebook .onion address instead of facebook.com (requires a Tor proxy set in proxy).

    Network option: connect to the Facebook .onion address instead of facebook.com (requires a Tor proxy set in proxy).

    values: true / false

  • typepostgresdatabase section: the database type for the bridge's own database.

    database section: the database type for the bridge's own database.

    values: sqlite3-fk-wal, postgres

  • uridatabase section: connection URI (raw file path for SQLite, connection string for Postgres). Do not share one database between unrelated programs.

    database section: connection URI (raw file path for SQLite, connection string for Postgres). Do not share one database between unrelated programs.

  • usernamefacebookbotbot section: username of the appservice bot users message to log in.

    bot section: username of the appservice bot users message to log in.

  • username_templatefacebook_{{.}}Localpart template of Matrix IDs for remote users; {{.}} is replaced with the remote user's internal ID.

    Localpart template of Matrix IDs for remote users; {{.}} is replaced with the remote user's internal ID.

mautrix-meta releases & version history

More in Instant Messaging

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…