Home

Metronome IM

Metronome is the XMPPd which runs on LW.Org IM and from recently also on Jappix's official service.

Origins


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...).

 

Aims


Originally I didn't intend to release this at all, it was meant as I mentioned above to be a private fork which I would use for my needs, I didn't also want to drag the attention off the main project which is also what did hold me for all this time.

But it slowly became also evident how my views and the Prosody Team's differ, and how often we're unable to communicate (to the point of almost, figurately, "getting at each other's throat"... more then once).

Also considering the recent interest to my little project (thanks also to Jappix and Valérian), and that I believe in free software, but differently to most of the OS Community... in which it's not the software itself which should be freely shared and remain free at all costs, but the inherent knowledge.

It's finally time to break the seals, and have people take their own conclusions.

Although this is not just "Prosody with a different name" as someone sarcastically told me today, it has different aims and different politics on how the codebase is mantained:

  1. This is a PAWG or Progress As We Go project, code is versioned on a per-commit basis, each 30 "useful" changes (as long as the release frenzy doesn't affect me around change 27-28 then that may become 40+...) concludes a minor release cycle, each 300 concludes a major one.
  2. Code is mostly stable but might even be not.
  3. 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".
  4. While Prosody is MIT (Expat) licensed, Metronome is ISC/MIT dual licensed.
  5. Possibly Metronome will only ever be distributed in Source Form.
  6. Prosody is bluish, Metronome is hazeish... never mind :P...

 

Differences


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;
  • Core stack: Modulemanager, Usermanager, Hostmanager, Module API, etc... ;
  • How s2s streams are treated;
  • The anonymous auth backend (mod_auth_anonymous & sasl.lua ineherent part);
  • Included plugins, utils;
  • The HTTP API;
  • BOSH's JSON Padding and XEP-252 support.
  • 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 currently is adopted as XMPP Server by the following sites / projects:

  • It is the server of Jappix.com and the main suggested daemon for the web app.
  • It is the suggested daemon for the Movim web app, and the server used for their main pod at movim.eu.
  • Lastly, it is the default daemon in the YunoHost Linux server distribution.
  • More to add... :)

 

Repository & Development


You can obtain Metronome's code through our repositories:

The support & development talk (xmpp multi-user chat) room is grimoire@muc.metronome.im, you can access it via our Jappix instance also.

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.

Comments

MySQL Storage

Two questions on mysql storage:

How do I migrate the data from a running metronome server into the MySQL database?

If the friendlist of users get manipulated in database - e.g. conncting two users on a community website - how can the chance be populated to signed in clients?

Basically,

To migrate flat files data to SQL storage you need to use some migration script, currently Prosody Migration tools are compatible with Metronome and can be used for this task.

For the second, you can manipulate a user roster directly in the database, but the user won't see the change until he or she reconnects. So to achieve what you want you need to create a plugin that get signaled when the database gets updated and triggers a roster push on the affected accounts.

Install tutorial (wiki Devosi)

Yo !

You can also use this tutorial in French : https://wiki.devosi.org/doku.php?id=auto-hebergement:metronome

Good luck!

Install tutorial

Hi!

Thanks a lot for your work and this good software. For information, I have written an install tutorial for Debian GNU/Linux, in french, at this URL : www.cypouz.com/article/130919/installation-serveur-xmpp-metronome.

Best wishes,

Cypouz (www.cypouz.com)

:)

Thanks for your support, and posted ^^.

Adap the module mod_man

Hello,

It's possible to adapt to Metronome IM the mod_man ( https://code.google.com/p/prosody-modules/wiki/mod_mam ) to work in sql mod ?

How configure Metronome IM to work with multi-store ?

Thank you !

Well,

The storage configuration format for multi-storage isn't different from Prosody, e.g.

default_storage = "internal"
storage = { roster = "sql" }

For what regards MAM, I'm waiting a few changes to be adopted in the XEP. But at the moment I'm headed torward re-implementing the module for Metronome rather then adapting.

Can't get some features working

I really like the features in your setup like the muc logs and pastebin.
But I can't get it working.
Can you provide a kinda full-feature config-file where it can be seen how muc logs, pastebin, anon-access and vjud should be configured?

Documentation section..

Added examples here.

MUC logging

Hello,

The mod_muc_log + mod_muc_log_http plugins for Prosody are not working with Prosody latest release. They seem available on the Metronome git though. Are they functionnal?

Thanks in advance!

Erwan

Well...

The ones provided on prosody-modules should work with Prosody 0.9, the only issue which you may incurr is that the datastore folder (e.g. muc_log) probably has to be created manually, that's solved in Metronome but not in Prosody afair.

Beside the ones in the Mercurial Repository (Git??), are tailored to work with Metronome's API and won't work in Prosody.