Metronome is a XMPP instant messaging server, based on the latest approved RFC standards.
The software began as a fork of Prosody IM, which I discovered in 2009 and got appealed by given it’s rather low resource footprint, speed, modularity.. and is also the main reason I started learning Lua. While I’m (expecially with the 0.9 branch) still rather in “love” with Prosody itself, I slowly found myself at an impasse with how the project progressed and that I constantly needed to patch the code for it to meet my needs for LW.Org IM.
Perhaps when a rather large portion of the codebase diverged, and keeping backward compatibility to upstream became a problem I decided it was better to fork and keep a private control-versioned stub for LW.Org IM which I “codenamed” Metronome (While Prosody refers to the Metrics in Poetry, Metronomes are used to evaluate and keep Metrics in Music…).
As I said above, originally Metronome was solely aimed for use on the LW.Org IM service, but after the interest shown by some other projects like Jappix, I decided to release the code. The reason to not contribute directly to the project is that (as also explained previously) I found difficult to cope with how the codebase was mantained, and that the community modules had to bent to an API that was more than once not up for the task and that to it was more than once necessary to deal with “core code” and that code was difficult to get modified upstream (the usual problem with community driven projects).
Several years passed and Metronome diverges pretty much everywhere from Prosody code wise, but here’s a list of the differences in coding / feature principles compared to Prosody:
- Metronome is more aimed torward, protocol completeness / compliance, microblogging, ease of deployment
- Instead of relying on community modules, it will have all functionality directly shipped in the codebase
- While Metronome could be more feature complete then Prosody in some regards, it might be not or even stripped of certain features in others, where I see it fit to keep things light enough or “mantain space for other weight”.
- While Prosody is MIT (Expat) licensed, Metronome is ISC/MIT dual licensed.
- Possibly Metronome will only ever be distributed in Source Form.
- Prosody is bluish, Metronome is hazeish… never mind :P…
Metronome currently has Advanced Server compliance for Core, Web, IM and Mobile in XMPP Compliance Suites 2020 (XEP-0423).
As you will be able to read from the README file or even the source code itself, differences span from everything above the inner stack (formally the stream parser, the stanza router, the server backend and util.stanza), mainly but not limited to:
- The Pubsub API and wrapped modules, mod_pubsub and mod_pep
- The MUC API and wrapper plugins
- Pluggable MUC configuration
- Pluggable Routing API
- Core stack: Modulemanager, Usermanager, Hostmanager, Module API, etc…
- More aggressive memory usage optimisations
- Bidirectional S2S Streams
- Direct TLS S2S Streams and XEP-0368 resolution
- Dialback errors handling and “DB without DB” (XEP-0344)
- The anonymous auth backend (mod_auth_anonymous & sasl.lua ineherent part)
- Included plugins, utils
- SPIM prevention system
- Hits/blacklist/whitelist based host filtering (mod_gate_guard)
- In-Band Registration verification and account locking mechanism
- The HTTP API
- XEP-0252 support for BOSH’s JSON Padding
- Extensive Microblogging over XMPP support
- Daemon Control Utility
- It does have only one server backend being libevent and has a hard dep. on lua-event
Notable Deployments & Mentions
Metronome was adopted as XMPP Server by the following sites / projects:
- It’s the server which always powered the LW.Org Instant Messaging public platform.
- It’s the default Instant Messaging server application in the YunoHost Linux server distribution.
- It was the server of Jappix.com and the main suggested daemon for the web app.
- It was the suggested daemon for the Movim web app, and the server used for their main pod at movim.eu.
Repository & Development
You can obtain Metronome’s code through our repositories:
The support & development talk (xmpp multi-user chat) room is email@example.com
The project also has a mailing list usable for support/talk should you prefer that subscribe to firstname.lastname@example.org
If you would like to see any feature added or want to discuss the merging of a patch, report a bug or request a particular feature feel free to submit an issue on the Project’s GitHub repository issue tracker.
Contributions and Donations
While Metronome is free, mantaining and developing it is not and takes a considerable amount of time and effort on my behalf. So if you would like to contribute feel free to contact me or you may just tip via PayPal.