XMPP MUC (0045) implementation in Rust
Find a file
2025-12-06 16:38:53 +01:00
.forgejo/workflows Remove unnecessary .forgejo/.gitea 2025-08-15 12:14:09 +02:00
data README: include nlnet assets to prevent pinging nlnet.nl 2025-11-05 15:08:41 +01:00
specs specs/disco_info: iq@id result is the same as get 2025-12-03 18:04:55 +01:00
src component::test: Add number of remaining elements when failing 2025-12-06 16:38:53 +01:00
.editorconfig Add .editorconfig 2022-12-28 10:32:43 +01:00
.gitea CI: Add forgejo-runner file 2025-08-03 20:33:03 +02:00
.gitignore .gitignore: ignore generated files 2025-10-10 20:14:30 +02:00
.woodpecker.yml CI: try moving clippy in testing stage 2022-12-27 09:19:46 +01:00
build.rs scansion-rs dep was renamed to jasca 2025-11-17 22:53:09 +01:00
Cargo.toml Bump tokio-xmpp dep to 77acd92c62 for 'required version' fix 2025-12-01 12:05:46 +01:00
Changelog.md Add configuration support: domain, password, port 2025-11-18 18:10:59 +01:00
CONTRIBUTING.md CONTRIBUTING: typo 2025-08-13 20:16:20 +02:00
doap.xml Add doap.xml 2025-08-12 16:57:11 +02:00
LICENSE Add README.md and LICENSE 2022-09-12 23:06:15 +02:00
muchrooms.example.toml config: rename 'password' to 'secret' 2025-11-18 20:53:46 +01:00
README.md README: include nlnet assets to prevent pinging nlnet.nl 2025-11-05 15:08:41 +01:00
rustfmt.toml Set hard_tabs = true in rustfmt 2022-12-28 10:13:30 +01:00

Muchrooms

NGI Zero Logo

This is an XMPP group chat component implementation in Rust. Its goal is to implement MUC (XEP-0045) and GC3 (currently being written).

The name is pronounced “mushrooms”.

License

This project is available under the AGPL-3.0-or-later license. See the LICENSE file.

Community

You can find the XMPP chatroom at [email protected] (requires an XMPP client).

We are using the JoinJabber Code of Conduct for the well-being of the community. Please refer to it in case of a conflict in any of the muchrooms venues (channel, forge, etc.).

The mediation team is currently composed of:

Funding

This project is funded through NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program. Learn more at the NLnet project page.

NLnet foundation logo NGI Zero Logo

Contributing

Contributing guidelines are available, please do read them before committing to help on the project.

Checklist

XMPP

  • Join
    • Normal sessions
    • MSN
  • [-] Presence
    • Resync
    • Updates
    • [-] Probes (storing updates to answer probes)
      • Storing presences but not answering when they're being queried, yet.
    • Nick changes
  • [-] Iq
    • [-] Ping answers
      • Ping component (always succeeds)
      • [-] Ping room (always fails. Awaiting affiliation support)
      • Ping participant (0410)
    • Ping probes?
    • Routing Public PEP?
    • Default "service-unavailable"
  • Messages
    • Broadcast
    • History?
    • MAM?
  • [?] Leave
  • Affiliations / roles
  • Configuration
    • Modes
      • Non-anon
      • Semi-anon
      • Full-anon? (with some kind of occupant-id (0421)?)
  • Mediated invites
  • Room state
    • Locked
    • Destroyed / Tombstoned?
  • Private Messages?
  • MUC Eventing Protocol (MEP - 0316)
  • Optimisations
    • Presence versioning (0436)
    • Room Activity Indicator (0437)
    • Affiliation versioning (0463)
    • Caching participant caps

Storage

  • Persistent storage of room data

Component Configuration

  • Interface
    • File?
    • Adhoc?
  • Options?
    • Host
    • Secret
    • Admins?
    • ...?

To Think About

Pseudonimity

https://logs.xmpp.org/xsf/2023-01-05?p=h#2023-01-05-fe0286ff34b3de39

A MUC could pretend to be non-anon and give out burner JIDs at a companion service

Moderation

+mz makes all messages in a channel get redirected to ops only, and other users don't see them it's very useful for e.g. abuse reporting channels

  • Shadowbans