Planet Jabber

November 24, 2020

Peter Saint-Andre

Who Was Aristotle?

Greatness is out of fashion these days -- even suspect because of its seeming elitism. Yet it is an inconvenient truth that talents, opportunities, efforts, and achievements vary greatly. In every field of human endeavor there are only a few people who are remembered even 50 years after their passing; multiply 50 by 50 and we reach 2500 years, nearly the upper limit of recorded history, whose rolls are inhabited by a minuscule percentage of those who have ever lived. Even fewer of those remembered are anything but a name, whose works and deeds are still widely studied to this day. At the very pinnacle of these is Aristotle, whose concepts and insights form the foundation of much of human knowledge, science, art, culture, and society....

November 24, 2020 00:00

November 21, 2020

Peter Saint-Andre

It Was Twenty Years Ago Today

On November 21st, 2000, I posted the first entry in this online journal. Although I had tried my hand at writing a weblog even before then (e.g., using a tool for posting entries through a Jabber messaging app), writing at my own website was more appealing. Given that I'm still posting here twenty years later, I declare my original experiment a success. Here's how I characterized this space in that first entry:...

November 21, 2020 00:00

November 14, 2020

Ignite Realtime Blog

Spark 2.9.4 Released

The Ignite Realtime community is happy to announce the availability of Spark version 2.9.4.

This time our long time Ignite Realtime Foundation member @guus fixed a lot of issues regarding how Spark handles SSL certificates (or rather how it was not handling them). There is also a new option to disable games with Client Control plugin (need version 2.1.6). And improvements to file transfer and handling of passwords.

Full list of changes can be found in the changelog.

We encourage users and developers to get involved with Spark project by providing feedback in the forums or submitting pull requests on our GitHub page.

You can download Spark from the Downloads page. Below are the sha1 checksums:

0a4b04d956c7b9fac96382f4ebaeebb01ba21a12  spark_2_9_4.deb
f0b9e59fded30e99634419dceef99b206434a3f8  spark_2_9_4.dmg
b6f958491af01b0989dc261a08210017c95a9cab  spark_2_9_4.exe
78e1c3fb24d1c032aacc4f601b516b9b004d3059  spark-2.9.4.rpm
b58402e870cc6fccae08b1b4aa4e9909047116ec  spark_2_9_4.tar.gz
29a77ecd572a4f202ffd92931d95dc073dccfd6d  spark_2_9_4-with-jre.dmg
12812da3e9078ebb0bfda1353b81bc89a238365d  spark_2_9_4-with-jre.exe

For other release announcements and news follow us on Twitter

2 posts - 2 participants

Read full topic

by wroot at November 14, 2020 13:05

Client Control plugin 2.1.6 released

The Ignite Realtime community is happy to announce the immediate release of version 2.1.6 of the Client Control plugin for Openfire!

This update adds an option to disable plugins in Spark. Specifically currently it allows to disable Reversi and TicTacToe games. In the future it can be extended to disable more plugins. You need Spark 2.9.4 or newer for this option to work.

Your instance of Openfire should automatically display the availability of the update in the next few hours. Alternatively, you can download the new release of the plugin at the Client Control plugin archive page

For other release announcements and news follow us on Twitter

1 post - 1 participant

Read full topic

by wroot at November 14, 2020 13:01

November 12, 2020

Dino

Dino 0.2 Release

Dino is a secure and open-source messaging application. It uses the XMPP (Jabber) protocol for decentralized communication. We aim to provide an intuitive, clean and modern user interface.

The 0.2 release adds message correction, improves the file upload functionality and provides more information about message encryption. Besides other smaller changes it also fixes a number of bugs.

Message correction

It is now possible to correct the last message you sent. You can access the function by hovering the message that you want to correct and then click the edit button that appears. If you’re a fan of shortcuts, you can also press the UP key. Last message correction has been the most frequently requested feature addition so far. We are happy about how it turned out and hope you are, too!

File sharing

You can now send files via drag and drop! Furthermore, you can now send Images by pasting them from your clipboard. As before, there is also still the option to press the “Send a File”-button.

Especially with those new ways of sending a file it is important to know that you are sending the right file to the right person. That’s why Dino now presents a confirmation dialog with a file preview and some file details.

Encryption

It has already been possible to accept, verify or reject OMEMO keys. Now you can see the relevant information alongside each message: A small lock or seal symbol above a message indicates whether the message was encrypted by an accepted or a verified device, respectively. A red, open lock warns you in case your contact sends unencrypted messages in an encrypted conversation.

Unread, pending and more…

Dino now displays the number of unread messages in the conversation list. The color of the circle tells you whether the new messages triggered a notification (e.g. direct messages, mentions in channels).

Furthermore, Dino lets you know in case your message has not been sent yet by displaying “pending…” alongside the message.

In moderated channels, Dino will inform you if you don’t have the permission to write messages and offer the possibility to request that permission from a moderator.

Coral Reefs

Coral reefs are diverse and important ecosystems. Climate change and local human influences endanger coral reefs around the world. We named this Dino release “Mexican Caribbean Coral Reefs” to help spread the word about what needs to be done to preserve these unique ecosystems.

While coral reefs only occupy 0.1% of the ocean area, they are home to 25% of all marine species. Those reefs are made up of the calcium carbonate skeletons of corals. Corals grow very slowly and thus reefs require thousands of years to form. Many tropical corals live in symbiosis with tiny algae, which provide the corals with nutrients in exchange for shelter.

Climate change harms corals in two ways: First, it raises the ocean temperatures. Corals lose their algae in high water temperatures, which is called “bleaching”. Without the algae the corals starve. Secondly, the ocean absorbs parts of the increasing carbon dioxide amounts from the atmosphere. In water, CO₂ reacts to carbonic acid, which dissolves coral skeletons.

Many coral reefs are located in the shallow water near coasts and are thus highly affected by local human activities: Sediments and nutrients are washed into the ocean and deprive the corals of light; Overfishing can negatively affect the whole ecosystem; Destructive fishing using poisons or explosives harms the corals.

For example, the coral cover in the Mexican Caribbean Coral Reefs decreased by 60% between 1980 and 2016. This was caused by mass bleaching events due to increased water temperature, hurricane impacts, and an increased amount of sediment due to deforestation [1].

Various programs aim to protect individual coral reefs from local dangers. However, the ecosystem coral reef can only be preserved by also eliminating the global threat: Climate change. According to multiple studies, coral reefs only have a chance of survival if the global temperature increase is limited to 1.5°C [2, 3]. Your actions have an impact.

November 12, 2020 18:00

Tigase Blog

BeagleIM 4.1 and SiskinIM 6.1 released

New versions of XMPP clients for Apple’s mobile and desktop platforms have been released. The biggest change is introduction of XEP-0215: External Service Discovery which helps with establishing audio and video calls.

BeagleIM

The stable release of BeagleIM 4.1 contains a lot of changes and stability improvements.

New XEPs:

Major changes:

  • Added shortcut for Last Message Correction with CMD+ARROW UP
  • Added support for automatic scaling/recompression of images and videos to reduce size of shared files. (hold alt when sharing image file)

beagle image compression

  • Added support for sharing multiple files with drag & drop, copy & paste or selection.
  • Improved onboarding process
  • Simplified updating account password

beagle password change

  • Added indication for corrected and retracted messages
  • Added support for /me command
  • Replaced Me with actual nickname user is using on the account on which chat was opened.

beagle message edit retract

  • Redesigned accounts list

beagle accounts

  • Added support for displaying jabber:iq:version

beagle disco version

  • Improved presentation of VCard data

beagle vcard

  • Rewrite of Markdown support to optimize it and fix the crash

Fixes

  • Improved VCard support for MUC group chats
  • Fixed issue with Reply option clearing clipboard
  • Added dropping of errors received on message delivery confirmations not being delivered properly
  • Fixed issue with VCard editing leading to disabled Edit button and improved UX
  • Workaround for crash on BigSur (missing permission)
  • Fixed issues with handling subscription requests
  • Fixed issue with joining password protected MUC rooms
  • Fixed another crash related to movie preview
  • Fixed issue with right part of “new” button not being clickable
  • Fixed issue with marking all MIX messages received while offline as read.
  • Fixed support for domains ending with .local

SiskinIM

The stable release of SiskinIM 6.1 contains changes and stability improvements.

  • Added support for XEP-0215: External Service Discovery
  • Added support for automatic scaling/recompression of images and videos to reduce size of shared files.
  • Added support for /me command
  • Replaced Me with actual nickname user is using on the account on which chat was opened.
  • Fixed issue with marking all MIX messages received while offline as read.
  • Fixed support for domains ending with .local

Downloads

You can download both application from their respective app-stores: Beagle IM from macOS appstore and Siskin IM from iOS appstore and star them on GitHub: Siskin IM on GitHub and Beagle IM on GitHub

Join the discussion

You can discuss all-things-Tigase (including our client apps) on our groupchat: tigase@muc.tigase.org

join-discussion-qr-code

November 12, 2020 00:00

Peter Saint-Andre

Aristotle's Dialectical Pedagogy: A Review of Revaluing Ethics by Thomas W. Smith

In my research toward writing Complete Yourself: Aristotle on Human Fulfillment, I have read dozens and dozens of books about Aristotle's ethics and his philosophy in general. A small number of those books stand out in the crowded field of Aristotelian studies, but only one of them has been a revelation to me: Revaluing Ethics: Aristotle's Dialectical Pedagogy by Thomas W. Smith....

November 12, 2020 00:00

November 09, 2020

Ignite Realtime Blog

First release candidate of Smack 4.4 published

The Smack developers are happy to announce the availability the first release candidate (RC) of Smack 4.4.0. Please consider testing this release in your integration stages and report back any issues you may found. The more people are actively testing pre-releases, the less issues will remain in the actual release.

Smack 4.4.0-rc1 is now available on Maven Central.

1 post - 1 participant

Read full topic

by Flow at November 09, 2020 20:19

November 04, 2020

The XMPP Standards Foundation

The XMPP Newsletter October 2020

Welcome to the XMPP newsletter covering the month of October 2020.

Newsletter translations

Translations of the XMPP Newsletter will be released here:

XSF Announcements

The XSF started the application period for its annual board & council elections. Applicants for the council must be elected XSF members, while board seats are open to everyone. If you are interested in applying for any of these positions please visit the application page.

The Q4 2020 XSF membership application period is open as well. If you are interested to become an XSF member you can apply before 8th November.

Articles

MongooseIM takes advantage of the extensibility of XMPP to allow its users to customise their solution based on their needs. A great example of this is their case study with Pando Health, an award-winning chat system for health care that is now the most used offering in the United Kingdom National Health Service (NHS).

The DBJR (German Federal Youth Council) tries to educate their member organisations about open source and open standards. In our digital tools' blog, Jonah from the Kaidan project wrote an article (German) for less tech-savvy people to explain why they develop Kaidan XMPP client.

When Snikket launched back at FOSDEM 2020 in February its website was rather basic, so the team just added a blog section and the very first two posts expanding on the introduction and announcing the Snikket CIC, a legal company that backs Snikket. The post has the gritty legal details, but one thing stands out, it now allows Snikket to get funded via donations and grants. In good tradition there's also a blog RSS feed so you can stay up to date.

The IETF (yes, the Internet Engineering Task Force) deployed a trial instance of an XMPP service for their operational experience with local registration, guest account access, and provides a web client. These services are available at xmpp-trial1.ietf.org. Great thanks to the XSF members supporting to make this happen! You can read more about the background and configuration of the deployment on the Prosody blog.

Software news

Clients and applications

Gajim Development News: This October brings better message styling, XMPP link handling for Windows, and first improvements to get Voice/Video calls working again (but not yet compatible with Conversations, Siskin or Movim).

The Ignite Realtime Community has released Spark 2.9.3 as a maintenance release.

A new useful feature has been merged into Movim recently. It will also be part of the upcoming 0.19 release. This change relies on the standard XEP-0201: Best Practices for Message Threads and allows you to reply to a chat message using any XMPP account using Movim. On supported messages, click on the reply button and a little preview will appear next to the chat box input, fill in your message, publish, et voilà! There is also ongoing work implementing SIP calling.

Movim

Pix-Art Messenger and blabber.im join together: The messenger will take over the branding and layout from blabber.im (German).

Servers

Prosody had a minor release to version 0.11.7 which also contains a security fix.

The MongooseIM team have released MongooseIM 4.0, the friendly Mongoose. This release makes MongooseIM more accessible and easy-to-use than ever before with a TOML configuration, Kubernetes-ready Helm charts and structured logging. See the full list of new and improved features in the blog post accompanying MongooseIM 4.0 release. To celebrate the release of MongooseIM 4.0 the team put together a guide to the common considerations companies go through when deciding on a chat solution, this includes whether to build their own or buy a product-as-a-service and what features users most commonly want.

Shortly after the release of Openfire 4.5.4 there is also the release of Openfire 4.6.0 already! The new release version contains improvements of Pubsub and PEP, federated multi-user chat for constrained environments (see XEP-0289) as well as 80 closed issues!

Other

The owner of the joinxmpp.org domain is lacking time. They wrote a short description of the original goals and say they are now looking for somebody motivated to take on the project.

Extensions and specifications

Developers and other standards experts from around the world collaborate on these extensions, developing new specifications for emerging practices, and refining existing ways of doing things. Proposed by anybody, the particularly successful ones end up as Final or Active - depending on their type - while others are carefully archived as Deferred. This life cycle is described in XEP-0001, which contains the formal and canonical definitions for the types, states, and processes. Read more about the standards process.

Proposed Extensions

The XEP development process starts by writing up an idea and submitting it to the XMPP Editor. Within two weeks, the Council decides whether to accept this proposal as an Experimental XEP.

  • No Proposed Extensions this month.

New

  • Version 0.1.0 of XEP-0444 (Message Reactions)

    • Accepted by vote of Council on 2020-10-07.
  • Version 0.1.0 of XEP-0443 (XMPP Compliance Suites 2021)

    • Accepted by vote of Council on 2020-09-30.

Deferred

If an experimental XEP is not updated for more than six months, it will be moved off Experimental to Deferred. If there is another update, it will put the XEP back onto Experimental.

Updated

  • Version 0.3 of XEP-0371 (Jingle ICE Transport Method)

    • Replaced RFC 5245 with RFC 8445
    • Introduced ice2 transport attribute for backward compatibility
    • Clarified ICE restart procedure
    • Clarified remote-candidate usage
    • Changed remote-candidate notification procedure (sent all at once now)
    • Replaced wrong reference to RFC 6455 with correct one: RFC 6544
    • Allow sharing element with remaining candidates
  • Version 1.3.0 of XEP-0050 (Ad-Hoc Commands)

    • Clarify illegal uses of 'execute'.
  • Version 0.7.0 of XEP-0384 (OMEMO Encryption)

    • Various fixes, clarifications and general improvements.

Last Call

Last Calls are issued once everyone seems satisfied with the current XEP status. After the Council decides whether the XEP seems ready, the XMPP Editor issues a Last Call for comments. The feedback gathered during the Last Call help improving the XEP before returning it to the Council for advancement to Draft.

  • XEP-0443 (XMPP Compliance Suites 2021)

Draft

  • Version 1.0.0 of XEP-0411 (Bookmarks Conversion)

    • Accepted as Draft by vote of Council on 2020-10-14.
  • Version 1.0.0 of XEP-0352 (Client State Indication)

    • Accepted as Draft as per Council vote from 2020-08-26.
  • Version 1.0.0 of XEP-0393 (Message Styling)

    • Accepted as Draft as per Council vote from 2020-10-07.

Call for Experience

A Call For Experience - like a Last Call, is an explicit call for comments, but in this case it's mostly directed at people who've implemented, and ideally deployed, the specification. The Council then votes to move it to Final.

Thanks all!

This XMPP Newsletter is produced collaboratively by the XMPP community.

Thanks to edhelas, emus, erszcz, guusdk, licaon-kter, mwild1 and wurstsalat3000 for their help in creating it!

Spread the news!

Please share the news on "social networks":

Find and place job offers in the XMPP job board.

Subscribe to the newsletter

We suggest you Subscribe to receive the next editions in your inbox as soon as it is published! Promote this newsletter to whoever may be interested.

Help us to build the newsletter

We started drafting every new issue in the XSF Github repository and we are always happy to welcome contributors. Do not hesitate to join the discussion in our Comm-Team group chat (MUC) and thereby help us sustain this as a community effort.

You have a project and write about it? Please consider sharing your news or events here, and promote it to a large audience! Even if you can only spend a few minutes, these would already be helpful!

Tasks which need to be done on a regular basis are for example:

  • Aggregation of news in the XMPP universe
  • Short formulation of news and events
  • Summary of the monthly communication on extensions (XEP)
  • Review of the newsletter draft
  • Preparation for media images
  • Translations: especially German and Spanish

License

This newsletter is published under CC BY-SA license.

by emus at November 04, 2020 23:00

Prosodical Thoughts

XMPP at the IETF

We recently helped deploy a new XMPP service for the IETF. But before we go any further, some of you are probably asking - “what is the IETF?!” If you’ve been around the XMPP community for a while, or if you’ve been at all involved in internet development discussions, you’ll already have an idea of what the IETF is. But that leaves many people don’t know, so here goes…

The Internet Engineering Task Force is the organisation that has been behind many of the most widespread internet technologies in the past 30+ years. Even if you aren’t familiar with the IETF, there’s a chance you may have stumbled upon one of the documents they publish, known as RFCs (Request for Comments). Contained in the 8000+ RFCs that are currently published is a mass of knowledge about the design of the internet - past, present and future.

As well as XMPP’s own RFCs (RFC 6120 and RFC 6121), there are RFCs that describe the workings of IPv4 (RFC 791) and IPv6 (RFC 8200), email, including SMTP (RFC 5321 and RFC 5322) and IMAP (RFC 3501). Many other internet technologies are also standardized by the IETF - including for example, DNS, HTTP, TLS, LDAP, SSH and SIP.

Unlike many standards organizations, the IETF publishes its standards openly for the benefit of everyone developing internet-based technologies. Likewise, participation in the development work of the IETF is relatively straightforward and happens via mailing lists, online sessions and (usually) in-person meetings.

Standardizing XMPP

XMPP was officially published as an RFC (3920) in 2004 as a result of a lot of hard work performed by the community, and Peter Saint-Andre working as the document’s author. This document also marks “XMPP” taking over as the formal name of the protocol, rather than “Jabber” as it was originally known.

XMPP had a dedicated working group at the IETF, which went on to publish many other documents, including updates to the original RFCs.

Deploying XMPP

As well as standardizing the protocol itself, the IETF have long been users of XMPP to provide options for remote participation at meetings (along with e.g. live audio streams). Their service at jabber.ietf.org hosts chats for the various working groups, and provides a place for collaboration and discussions between meetings as well.

That said, the deployment is starting to show its age, and has not evolved much in its feature set since it was originally launched. Recently there has been some focus on the problems that people face when trying to access it for the first time.

Notably, people reported issues with installing software (e.g. on restricted company laptops), problems with firewalls, and difficulties finding and registering accounts on public XMPP servers.

In search of a more user-friendly solution, the IETF announced a temporary trial of Matrix and Zulip as potential alternatives, so they could gain operational experience and feedback from users.

Improving the XMPP deployment

Comparison between these alternatives and the existing XMPP deployment had a number of problems. For example, while jabber.ietf.org (by intention) didn’t allow account registration, the alternative services did. The other services also prominently feature (or even require) access via the web, yet there was no similar web access for jabber.ietf.org XMPP chats - an option which would solve the vast majority of problems that people face with the current setup.

Building on recent work we’ve done to improve and simplify web-based account sign-up in Prosody, we put together a demo server to show exactly how a user-friendly XMPP setup may be provided. The sign-up processes uses the new client-agnostic mod_invites_page, and the web client is served using mod_conversejs. The IETF infrastructure team were able to replicate the setup and it is now deployed at xmpp-trial1.ietf.org!

The trial of all the new services will be discontinued in January 2021, and the findings will be assessed before a decision is made about the future of real-time communication at the IETF.

by The Prosody Team at November 04, 2020 06:05

November 03, 2020

Erlang Solutions

Scaling a Mongoose: How scalable is the MongooseIM XMPP server?

How does MongooseIM it scale?

When talking about servers, this question is asked over and over again, and, MongooseIM is no exception. How does it scale? It scales well, this we know. We’ve done a lot of load tests in various environments, we’ve set up multiple production clusters, some of them handling a substantial load. But, more specifically, how does it scale?

It is a difficult question and requires a careful insight (never say that in a TV interview, it is the worst answer you can possibly give). But, it really is. It depends on so many factors – underlying hardware, usage pattern, enabled extensions, database backend, integrations… We’d love to have a definite answer to the question, but is that even possible?

215 km/h
This is what my car spec says is its top speed is. Does that mean I can drive it that fast? First of all, no because I’m not going to try. Even if I did, I certainly won’t make it, for a variety of reasons – the car is not brand new, driving conditions are never perfect, I have regular tyres which are designed for security and not for speeding, etc. What the manufacturer is really saying is (a) you won’t go faster than that no matter what you do, and (b) something like 180km/h is absolutely fine (if legal).

So let’s follow this approach and find out what the “top speed” of MongooseIM is. Along the way, we’ll also examine how it behaves when we expand the hardware, both horizontally and vertically, what is limiting its growth, and some other interesting aspects.

Setup

We ran our tests on AWS - it is the most commonly used general-purpose cloud environment. Results from there can serve as a benchmark. A set of ansible scripts provisioned an EC2 instance, installed and configured MongooseIM. Then we launched the “client” EC2 instances one by one, each establishing a number of XMPP connections pretending to be real clients. We proceeded with it until either new connections started failing or the end to end time to delivery shot up, then we terminated the whole test.

The MongooseIM server was “plain vanilla” - the goal was to test just the main functionalities, like handling connections and routing messages. If a cluster of servers were used, clients would connect randomly to any of the nodes available - there was no load balancer to get in the way. Client behaviour was also rudimentary - a single “client” would establish a stream, authenticate and then keep the connections open, sending one short message every minute and receiving whatever came in. Messages contained timestamps, so that we could track end-to-end time-to-delivery.

First results

Instance types

After experimenting with a number of instance types, we found out that the c5 line is a perfect balance. With our assumed usage pattern, this hardware profile provides just the right combination of memory and CPU power. Memory-optimised instances of a similar size offers a similar performance, while being much more expensive - there is not much to gain by adding more memory. Also, results from running memory-optimised instances were unstable, since the CPU usage of MongooseIM had many spikes which may break the tests at any time. Here are some examples:

load testing diagram

Message frequency

Our imaginary average user sends one message per minute - with 137k connections on c5.large instance, this means that MongooseIM is routing about 2.3k messages per second. What if our users become more active, or less active - how does it change the maximum load we can handle?

Less messages means the CPU has less work to do, but memory pressure stays the same. The expectation, therefore, is, that when the traffic is low, the maximum number of connections should not depend on the traffic. This is because, in that scenario, the memory is the limiting factor. On the other hand, if the load increases, at some point, it should overload the CPU and the maximum number of connections should start to fall.

Our tests confirmed this, and also proved that the default usage pattern of one message per minute is just about the breaking point. Below it the limit stays the same. Go slightly above it and the limit begins to fall.

load testing diagram

Testing scalability on two dimensions

Vertical

Now that we know that c5 line provides a perfect balance, how will using a more powerful variant help? Again, is it linear? Does doubling the digit before letter “x” actually double the load we can handle? Is there a limit to it?

This was tricky, because there are many OS-level limits and Erlang VM settings which can stop your node from accepting more connections. For details on how we configured our servers, consult MongooseIM documentation available online.

We ran our test on larger instance types, up to c5.9xlarge. At that level, MongooseIM was able to handle almost 2.5 million connections, passing 45 thousand messages per second. And no issues were found, so there doesn’t seem to be a real hard limit. However, since this was already far more than we were aiming for, and running these tests incurs a considerable expense, in terms of both time and money, we chose to stop here. This is not the end, though, chances are that some day we will try to push it even further.

load testing diagram

Horizontal

How does MongooseIM scale horizontally? Is it linear, and if so, how many users each new node can handle? Can we scale ad infinitum, or is there a limit above which there are diminishing returns or even a failure? We wanted to find out, and it was by far the most time consuming part of the whole research.

We were assembling MongooseIM clusters on c5.large instances and stress-testing them until they failed. We went on and on, and scaling was almost linear, with the slope of the line fluctuating about 51 thousands (meaning each new node increased the cluster’s capability by 51 thousands connections, with intercept being about 80 thousands).

load testing diagram

And so it went, until we reached fifteen nodes, at over 1.2 million users and 22 thousand messages per second, no limit was in sight. At this point we decided to jump ahead and try twenty nodes. This proved to be too much. Connections between the nodes were timing out every now and then, causing netsplits and inconsistencies in the Mnesia database, and the cluster was basically not functional.

The reason for this is the way Mnesia and, more generally, Erlang distribution works. Each clustered Erlang node maintains active connections to all the other nodes, so the number of connections grows at an increasing rate. With twenty nodes, there were already 190 connections to maintain and exchange data over.

User sessions in MongooseIM are kept in the Mnesia database, which is replicated to all the nodes to ensure strict consistency at all times. Every new connection then triggers a replication mechanism spanning all the nodes and possibly all the internode connections. With this number of nodes, traffic can become quite substantial, no wonder it becomes unstable.

Why not both?

Since we didn’t discover any limit in the vertical scalability, and horizontal clustering is linear (up to a reasonable number of nodes), then by combining the two, we could expect to be able to handle really large numbers - from what we know so far, ten million is well within reach. Taking costs into account, we decided to stop the load tests at this point. Exploring this path is one of the options for the future.

Cost

Last but not least, how much does running a MongooseIM cost, and how do the various clustering strategies work cost-wise? Because horizontal scaling is linear with a fixed part, running a smaller cluster is somewhat more cost-efficient than expanding the number of nodes.

load testing diagram

Vertical scaling, in turn, is almost exactly proportional - the AWS price list is designed in such a way that an instance which is twice as expensive can handle almost exactly two times more client connections.

load testing diagram

The rule of thumb for economic clusters would then be: make a cluster of four or five nodes, and scale vertically if needed. And here we have to reiterate that actual results, from a customised server with its particular usage pattern may vary widely. Keep in mind also that in real life, it is not only MongooseIM you have to scale. Database backends or other external services, which are normally shared by all the instances, have their own scaling patterns, and pricing.

Third dimension – federation

If the load is hard to handle for a single cluster, you can also go beyond that – there is no rule saying that all users have to use the same data centre. With federation, you can set up multiple data centres, each under their own domain, thus multiplying the possible load your whole system can handle. It’d also give you the extra benefit of bringing your servers closer to your geographically distributed uses. Federation also has its idiosyncrasies, but it is beyond the scope of this article (chances are we will get back to it in one of the future installments).

You may also like:

MongooseIM

How to add value with Instant Messaging

Online Erlang and Elixir training

MongooseIM for Financial Services

November 03, 2020 13:50

Snikket

Snikket App Update 2.9.0

A new version of the Android app landed in Google Play and F-Droid this week. Snikket for Android 2.9.0 is based on Conversations 2.9.0 and sees a number of new features and improvements:

Audio/video call improvements

Firstly, there is now the option to leave a voice message if the person you are calling does not answer or is busy. Simply press the green voicemail button to record a message!

Snikket voicemail screenshot

There are also many small fixes and improvements, such as the ability to switch back to the chat view during the call, and using the loudspeaker for dial tone and busy tones when making a video call. Finally, a small number of specific devices produced echo during calls, this is now fixed.

As well as searching for messages across all your conversations, you can now also search within just a specific conversation. Simply go to the conversation you want to search in, and choose ‘Search messages’ from the conversation menu.

Notifications

A notification has been added when message delivery fails, so you know if your contact did not receive a message, even if you aren’t actively looking at their conversation. A bug was also fixed that meant notifications sometimes wouldn’t be shown in some circumstances.

Support for GPX files

If you’re a regular trekker, this one will be of interest to you. Although sharing and receiving logs of travels via GPX files was always possible in previous versions, they are now automatically identified and show up with a friendly icon. With a single tap you can easily open them in the app of your choice, such as OSMAnd or Trekarta (both open-source and available on F-Droid!).

Performance and bug fixes

Some other changes in this release include making it much quicker to restore your account from a backup file, and a fix for a bug that made it impossible to log in when your password included certain special characters.

That’s all for now. Grab version 2.9.0 of the Snikket app from F-Droid or Google Play!

As always, the Snikket app requires an invite or account on a Snikket service to get started. If you’re new to Snikket, learn more about the Snikket app to find out how to get started.

by Snikket Team (team@snikket.org) at November 03, 2020 13:14

November 01, 2020

Peter Saint-Andre

Election Survival Guide

Every four years I dread the prospect of yet another election for president of the United States. What a depressing, anxiety-ridden spectacle! It's almost enough to make me a monarchist (if only we could find the right sort of monarch, of course)....

November 01, 2020 00:00

October 30, 2020

Peter Saint-Andre

A Wider Palette

In my most recent post ("Beyond Binary"), I talked about the need to transcend dichotomies and false alternatives. One aspect of doing so is recognizing what I called a wider palette of viewpoints, which is easy to do in philosophy and psychology but not in politics (at least not in American politics with its two-party system)....

October 30, 2020 00:00

October 28, 2020

Snikket

Announcing Snikket CIC

We’re pleased to announce that Snikket is now backed by a legal entity, Snikket Community Interest Company, registered in the UK.

A Community Interest Company (CIC) is a form of organisation that lies somewhere between a traditional limited company and a traditional charity. All CICs are “not for profit”, which means rather than focus on generating profits and increasing value for shareholders, they have other goals - serving a “community” in some way.

The exact “community” differs between CICs, but must be declared when the organisation is registered with the CIC regulator. Snikket’s “community interest statement” declares that the CIC is for the benefit of:

People and organisations in need of safe and private digital communication. This includes in particular family groups, clubs, local interest groups and other organisations that may be non-commercial in nature.

and that it will also:

[…] provide support to open and non-commercial projects that have similar objectives.

The the term social enterprise has been coined to cover this kind of organisation, regardless of the legal structure used (the options for which may vary from country to country). Although there is no strict definition of what a social enterprise is, they generally all have in common a goal of maximizing their “social impact” alongside or above generating profits.

And this is where a social enterprise formed as a CIC or similar structure differs from a traditional non-profit or charitable organisation. Although the laws vary between countries, a non-profit typically receives tax benefits in exchange for compliance with strict regulations about how it receives and spends its money. Such an entity is usually restricted from trading goods and services for example, and must rely 100% on donations to achieve its goals.

A CIC does not receive the same tax breaks as a charity, however it is free to trade in many of the same ways that a normal company would. This allows for more creative and sustainable ways to sustain the organisation financially, while the CIC protections ensure it keeps a focus on its social mission.

The legal structure of a CIC (particularly the variant that we chose for Snikket) means that it is not possible for us to sell shares, or raise money through venture capital. We feel that this is a good thing - VC funding introduces a certain pressure to ensure a good financial return on the investment. That expectation of return is precisely what makes VC money so very different to a donation (where there is no expectation of return) or a simple transaction where a service or product is received directly in exchange for the money. We wanted to take this option off the table.

What does all this mean for the project?

Well, having a dedicated legal entity means we were also able to open a bank account, which means we can finally accept donations and more easily fund various things. For example, we are seeking funding (e.g. through grants or donations) to help finish the iOS client (if you know anyone who may be able to help get this funded, get in touch!) And even the simple day-to-day expenses such as server costs are now able to be paid from the project’s bank account rather than my personal one. Obviously I’ll still be covering these costs for a while, but I hope in the long run that Snikket will become self-sustaining. This is the first step on that journey!

As for the future, don’t be surprised if we explore additional ways to raise an income - for example through offering services to Snikket users, such as hosting Snikket servers for people who are less able to run their own, or possibly services to help make running a Snikket at home easier. Contact us if you have an interest in either of these, or if you have ideas for other things we could look into offering.

As a not-for-profit, all income raised goes into Snikket and its objectives, such as funding development of the project and the projects it depends upon, and the ecosystem it is part of.

Want to contact us? Email team@snikket.org or join our chatroom.

Interested in learning more about starting a CIC or other form of social enterprise? See these resources:

UK

International

by Snikket Team (team@snikket.org) at October 28, 2020 12:05

Gajim

Development News October 2020

This October brings better message styling, XMPP link handling for Windows, and first improvements to get Voice/Video calls working again.

Changes in Gajim

XMPP addresses are not just contacts or group chats. They can also contain query components to instruct clients to do things with them. For example xmpp:chat@example.tld?join would make the client try to join a group chat, and xmpp:contact@example.tld?message;body=Hello would instruct the client to open a chat with contact@example.tld and pre-fill the message input with ‘Hello’. For this to work, it needs to be supported by the client, of course. Some queries from XEP-0147 (XMPP URI Scheme Query Components) are already supported by Gajim. This month, we added XMPP-URI query support for Gajim on Windows. While installing, you can now decide if you want Gajim to open XMPP links when clicking on them in your web browser.

This month brings some changes to Gajim’s implementation of XEP-0393 (Message Styling). In consequence of these changes, the _underline_ style has been removed, and a new ~strikethrough~ style has been added, making Gajim standard compliant and thus compatible with other clients. Note that not all styles defined by this standard are supported yet.

Gajim now features a ‘Mark as Read’ button for notifications. If you receive messages you don’t necessarily need to answer, you can just dismiss them without opening a chat window.

Last but not least, there have been some improvements to Voice/Video calling. Gajim has had support for Voice/Video calls for quite some time, but the code has also been broken for a while now, because it is not getting actively maintained. We took some first steps (friendlier user interface, basic audio/video transmission), but these are highly experimental. Also, this feature is based on older standards, which makes it incompatible with Conversations for the time being (for example missing support for XEP-0320).

What else happened

  • You can now choose whether you want to have a ‘Send Message’ button in the chat window via Gajim > Preferences
  • A Copy button has been added to the group chat info page, which will insert an invite link to the group chat into your clipboard
  • Some regressions with non-english keyboard layouts have been fixed
  • Gajim’s command for opening the Start Chat window (gajim --start-chat) has been fixed
  • Drag and drop for files and contacts in group chats has been fixed

Plugin updates

A bug has been fixed which prevented Gajim’s URL Image Preview plugin from instantly showing previews for voice messages. Also, many plugins have been adapted to changes in python-nbxmpp.

Changes in python-nbxmpp

In an ongoing effort, python-nbxmpp’s XMPP request handling is being converted to Tasks (using Python Generators). This simplifies the flow of many operations and makes code easier to read and understand. A lot of work went into adapting Gajim to these changes while refactoring large parts of the code base.

GSSAPI support in python-nbxmpp has been fixed, which allows Gajim to use various authentication providers for user account credentials.

In preparation of Gajim’s VCard/User Profile rework, support for VCard4 (XEP-0292) has been added. Furthermore, support for Nested Roster Groups (XEP-0083) has been added.

As always, feel free to join gajim@conference.gajim.org to discuss with us.

Gajim

October 28, 2020 00:00

October 26, 2020

Erlang Solutions

The complete guide to Instant Messaging and in-application chat.

What you need to know about Instant Messaging and chat applications

Have you got the message? Chat is a critical feature for almost every business, in virtually every industry. Now, more than ever, digital communication is relied upon to share information and keep our contacts and users in touch. We’ve created bespoke chat applications for use cases as varied as large scale medical or digital health providers, industry-leading financial service providers and modern dating apps. For business-to-consumer uses, chat is a great way to turn your app or business into a community, keeping users engaged and adding a social element to your applications. On the other hand, in the B2B space, chat applications can be used to increase collaboration and productivity. In fact, external research conducted by one of our clients TeleWare found that instant messaging was the most in demand feature for a financial service app.

In this blog, we’ll look at some of the key considerations for an Instant Messaging service as well as the must-have features of the modern chat application and how MongooseIM 4.0 stacks up to deliver what you need.

Build vs buy

One of the first considerations a company needs to make when implementing a chat offering is whether to use an out-of-the-box product-as-a-service or software-as-a-service offering or build your own chat. Below we weigh up the pros and cons of each approach.


load testing diagram

Benefits of buying

The key benefits of an out-the-box purchase solution is that you are able to deploy quickly. The bigger players in this space often offer a comprehensive set of integrations and require little to no development from your team. They also provide users with a familiar user-interface, which means they’re incredibly quick for anyone to learn how to use. All of this means you can be up-and-running quickly with the peace-of-mind that you’re using a tried and tested solution.

Cons of buying

Both product-as-a-service and software-as-a-service options create the ongoing overhead of a subscription fee by their very nature. Over time, this cost inevitably adds up, making it a more expensive offering. Another drawback is that bought options are designed as one-size-fits-all products and seldom offer flexibility for bespoke features and changes. These options offer next to no control and data ownership is often shared. This makes it hard for your users to control their privacy and hard for your chat solution to meet any needs other than the most vanilla offering.The customer service and support can also be variable. All of this creates a huge potential for complication if something stops functioning in what is essentially a blackbox solution.

Benefits of building

Building provides you with the flexibility to create a specific chat solution for your needs and own every step in the functionality. In theory, building can be more affordable over the long-term as it reduces the ongoing costs of a software-as-a-service offering. An owned solution also minimises the risk of major changes in your chat application no longer being compitable with the rest of your application.

Cons of building

When building goes wrong, it is the most costly option, with high upfront and ongoing maintenance costs. Building your own chat application can run into difficulties when the app starts to scale (which is exactly when you want them least). Lastly, building something bespoke means there is no support or community to help you troubleshoot.

The MongooseIM way

MongooseIM is a massively scalable, battle tested, open-source chat server that has been proven to be able to handle 10’s of millions of connections with ease. With MongooseIM you have the freedom and flexibility to use the open-source product and develop it to your needs, or you can engage our experts to build bespoke features for you. Our team also offers the peace-of-mind of support should you ever need it. This gives you the freedom and flexibility to develop and own your chat solution without the cost or risk of starting from scratch.


load testing diagram

The most desired features in a chat application

With over a decade’s experience in building chat applications, we know the features required to ensure a success, taking everyone from the end-user to the DevOps team into consideration. Below is a list of the most used and desired features and how MongooseIM stacks up.

Real-time chat

It goes without saying that a chat application should allow users to reliably send and receive messages in real-time. MongooseIM’s scalability ensures that no matter what the spikes or loads of your user-base is, no important message will be lost in transit.

Push notifications

Push notifications are one of the most valuable parts of a modern chat application. Even if your user is not logged into the application, they’ll still be informed of the message. For B2C applications, that increases the chances of bringing them back to your app and for B2B applications, it ensures no important message goes missed, without requiring your team to be logged into a chat application at all times. MongooseIM has an in-house developed push notification management system, MongoosePush, which is designed to integrate with MongooseIM to easily enable push notifications for your chat app.

External integrations

MongooseIM rarely works alone, usually it is coupled with other microservices. We offer a rest API that these services can call, and an event pusher for MongooseIM to notify them, thus providing a two-way communication with other microservices over the REST API.

API

An easy to use API makes your chat application faster and easier to embed and integrate into your chat. We offer a REST API, which is simple, modern and easily understood by most developers. This can be used for both backend integration and client / service development.

Multi-user Chat

Group chat is one of the most popular features in social settings, and one of the most in-demand features for business collaboration. MongooseIM offers a multi-user chat functionality that is reliable and seamless for users whilst minimising demands on your server. We also provide a light-weight implementation of multi-user chat, tailored for mobile devices.

File Transfer and sharing

For a majority of use cases, allowing users to share and transfer files makes a chat more usable, keeping them engaged on your platform longer. MongooseIM uses an out-of-band transfer method which reduces the workload on the server side whilst still enabling an easier to use experience for users to share files within the chat application.

Batch permission

Batch permissions allow for privacy and control of access to information. MongooseIM uses access control lists to offer this functionality. Our chat applications have been approved by regulatory bodies in the health care and financial services worldwide.

Contact management

As an application built in XMPP, MongooseIM uses the tried and tested mod_roster functionality to allow for users to manage and customise their address books within the chat application.

History and version control

If something goes wrong, history and version control is vital. Having access to previous versions means you always have a proven version to fall back on. MongooseIM has a public history of its source code which you have access to at all times.

Contact sharing

Contact sharing from within a chat application encourages connections between groups of users, helps to grow user bases and increase collaboration.

Four key MongooseIM integrations

Instant Messaging and Kubernetes

Kubernetes has become an extremely popular platform-agnostic deployment tool and has powerful cloud management automation. The MongooseIM Helm Chart makes it easy to install MongooseIM and MongoosePush to Kubernetes.

Structured Log Management for chat solutions

Humio is a modern log management tool that provides complete observability to your team. Our new structured logging allows you to integrate with log management tools just like Humio to identify, prevent and resolve bottlenecks, poor usage patterns in production and other recurring issues in your system.

Instant Messaging metrics

WombatOAM is another tool to help you understand what is going on under-the-hood in your system. WombatOAM specialises in giving you visibility on the metrics of your system so you can identify trends and prevent problems arising. This includes allowing you to create automated alarms based on customisable performance metrics such as CPU usage.

Aysnchrounous message delivery

In complex systems RabbitMQ can be used as an asynchronous message broker. MongooseIM is able to handle the instant messaging between users’ smartphone while RabbitMQ connects these devices to other software systems.

Make sure your users get the message

MongooseIM 4.0 has just been released. In this release, we’ve gone a step further to ensure an easy to use product for developers, users and a DevOps alike. Explore the changes on GitHub

If you need help with the perfect chat solution for your needs, talk to our team of scalability experts. We’re always happy to help.

You may also like:

MongooseIM - page

How to add messaging - webinar

Testing the scalability of MongooseIM - blog

How we can add value to your product with chat - blog

Code Mesh V alternative tech conference 5-6 November

October 26, 2020 09:38

What's new in MongooseIM 4.0 - The friendly Mongoose

Hello from the team at MongooseIM

It’s been busy four months. As most of us were locked in our homes, we decided to put it to use and prepare a really special release. We introduced a new configuration format, structured logging and many new features and extensions that add up to the product we are proud to share with you. MongooseIM has always empowered users to create a customised, owned chat application without the struggle of building one from scratch, now we’ve made these amazing features even more accessible and easy to use.

Friendly to developers with TOML configuration

We want everyone to be able to benefit from MongooseIM, and so it was a rude awakening to hear the configuration described as ‘the trenches of the Somme’ by one of our users. Given we love Erlang, we hadn’t considered that its configuration might be a barrier for some developers. Once we read the feedback we knew that had to change. In the release of 4.0 we are introducing a new configuration format. For that task we’ve decided to go with TOML. Thanks to its merits we managed to get rid of most of the nested lists and tuples that sometimes were followed by a comma and at other times by a dot. We have simplified the syntax and disassembled the trenches while keeping the required configuration capabilities.
If you want to have a closer look at the new configuration format, please have a look at the Configuration section in our docs.

Friendly to Kubernetes with Helm Charts

We all like to have the installation procedure as simple as installing a package. So we’ve made it possible to install MongooseIM and MongoosePush on Kubernetes through the Helm Chart.
You can find the Helm Charts of our organisation at the link below:
https://artifacthub.io/packages/search?page=1&org=mongoose

Friendly to DevOps with structured logging

In MongooseIM 4.0 we’re introducing structured logs. This can help to have more precise and clearer structure when we query events that are logged. This is a tool you may need not often, but when you do need it, you’ll be so glad you have it because it makes it significantly easier to find exactly what you’re looking for.
If you are not yet familiar with the new OTP logger and structured logs we recommend having a look at this https://ferd.ca/erlang-otp-21-s-new-logger.html blogpost.

Friendly for users with video and voice calling

With the new release, we added the implementation for XEP-0215: External Service Discovery which assists in discovering information about services external to the XMPP network. The main use-case is to help discover STUN/TURN servers to allow for negotiating media exchanges.
So if you want to have a video/voice call using MongooseIM and Conversations now you can. You can use MongooseICE as a STUN/TURN relay, configure MongooseIM with mod_extdisco enabled and start having video calls between connected users.
For more details on how to use and setup mod_extdisco and our STUN/TURN server stay tuned to our future blog posts and in the meantime, please see our documentation page: https://mongooseim.readthedocs.io/en/latest/modules/mod_extdisco/

Friendly for everyone with improvements to MongoosePush

We’ve released a new MongoosePush. In the 2.1 release you will find:
OpenAPI Specs
Phoenix as the Web Framework
Structured Logs, logfmt and JSON formatters
Metrics: Exometer to Telemetry, Multidimensional metrics
Many improvements in the testing pipeline

For more information on the new MongoosePush, please have a look at the release notes https://github.com/esl/MongoosePush/releases/tag/2.1.0

Friendly for managers with AMOC 2.1 Load testing

We released AMOC 2.1. This release focuses on the REST API, which is now powered by OpenAPI Specifications generated by openapi-generator. We’ve also significantly reworked the RestAPI so you can upload files with simple put requests. With the newly introduced documentation API for scenarios you can now check what the scenario is about before running it. Finally, the execution API was updated and now you have full control of options such as starting, stopping scenario, adding, removing users. This makes load testing even easier so you can demonstrate the value of MongooseIM to your management team.

Let’s be friends!

So if you ever considered MongooseIM for your product or a project but you didn’t choose it for some reason, it’s time to give it a try. It’s the most robust, scalable and now easiest to configure Instant Messaging solution available on the market. Learn more about how MongooseIM stacks up against the competitors in terms of key considerations like costs and features in our complete guide to choosing a messaging app. Or, explore the MongooseIM page.

One last word from your friends at MongooseIM

load testing diagram

After working hard to get the new release live, we wanted to show off a little creative spirit. Here’s the MongooseIM’s team summary of MongooseIM 4.0 as inspired by the theme song to Friends! https://www.youtube.com/watch?v=sLisEEwYZvw

So no one told your MongooseIM 4.0 was gonna be this way
When your app’s won’t scale, you’re broke
Your XMPP life’s DOA
It’s like you’re always stuck with a single node
When it hasn’t been your day, your week, your month
Or even your year, but
MongooseIM will be there for you
(When the rain of messages starts to pour)
MongooseIM will be there for you
(When you like to configure with TOML)
MongooseIM will be there for you
(‘Cause structured logs are for people too)

You may also like:

Our complete guide to Instant Messaging

MongooseIM - page

How to add messaging - webinar

Testing the scalability of MongooseIM - blog

How we can add value to your product with chat - blog

Code Mesh V alternative tech conference 5-6 November

October 26, 2020 09:36

October 24, 2020

Snikket

Introducing Snikket

The Snikket project was officially unveiled earlier this year at FOSDEM in Brussels. We’re thankful to all the great feedback we received from people who came to see first-hand what we’re building.

What is Snikket?

For people who didn’t make it to the demo at FOSDEM, what is Snikket all about?!

Snikket is actually a collection of open-source components that together form a complete messaging platform that anyone can deploy. You can think of it as a self-hosted open-source alternative to commercial messengers such as WhatsApp, Facebook Messenger, Telegram or Signal.

Snikket provides:

  • A minimal-configuration server component that can be deployed onto your own system, either in the cloud or on your own device, such as a Raspberry Pi. Currently this is provided as a single Docker image, but we plan to add other distribution methods soon.
  • Software for users - currently we have an app for Android users (distributed via Google Play and F-Droid), and an app for iOS will be next to launch.

Who is Snikket for?

The primary audience for Snikket is people who want to set up their own safe, secure, and private realtime communication for small groups, such as families, communities, clubs and small businesses.

The mainstream alternatives to Snikket today are operated by commercial entities that profit from exploiting personal data gathered from their users. We believe that people should have the freedom to communicate on their own terms, rather than being forced to accept unacceptable privacy policies of a service just because their friends are using it.

We believe that everyone should have the choice of using a service run by someone that they trust. That is why we make running a Snikket server as easy as possible, and allow users of different Snikket servers to easily communicate with each other through a feature known as “federation”.

How does it work?

Snikket is based on the open standard messaging protocol XMPP. This means that we’re not inventing any fundamentally new technology (the world definitely has plenty of messaging protocols already!). In fact XMPP is a mature technology that has been in active developed for over 20 years. Because we are using an existing standard, there is a whole ecosystem of software that is compatible with Snikket. It also means that every Snikket server launched can immediately become a part of an existing global network of other XMPP-compatible servers.

The Snikket software itself is based on existing open-source projects. For example, the server component utilizes Prosody, and the Android app is based on Conversations. We are not forking these projects. Instead innovations that we introduce to Snikket are pushed upstream wherever possible. An example of this is the invitation based sign-up that we required to make signing up with a Snikket service as easy as possible. This involved creating a new extension to XMPP, and implementing it in multiple open-source projects, including Prosody and Conversations.

But why?

On hearing about Snikket for the first time, a question people often ask is, “why are you developing Snikket when plenty of XMPP software already exists?”

There are a number of reasons that Snikket’s existence is important.

Snikket aims to be an entrypoint for new users into the XMPP universe. This is something that a project that is just a client, or just a server, can’t do alone. We’re providing a complete package for people to get started easily even with zero knowledge of XMPP and how everything fits together.

Even for experienced users of XMPP, there are benefits to having such a package of integrated XMPP software. Knowing that Snikket client on platform A has the same set of interoperable features, same terminology, and same UX paradigms as the Snikket client on platform B makes for an attractive solution to many use-cases.

The design principles that Snikket adheres to can be found at modernxmpp.org, which is a parallel project aiming to align as many clients as possible in terms of UI/UX and protocol implementations. It is a natural extension to the Compliance Suites published by the XSF (but these only cover protocols, not features, terminology or UX).

Finally, since “Jabber” (the original user-friendly name for XMPP) is now a trademark owned by Cisco, it is unsuitable for use in many contexts and has been declining in recent years. However telling people to “use XMPP” (a protocol standard made for developers) leaves them confused and directionless. It’s a much better option to be able to tell people to “use Snikket”, which leads them to a suite of user-friendly XMPP software.

The future

There is a lot more planned! We have two primary focuses right now: launching an iOS client, and finishing the web interface for the server (so that users can manage their account, and admins can inspect and manage the server).

To keep up to date with developments, follow this blog, or our accounts on Mastodon or Twitter!

by Snikket Team (team@snikket.org) at October 24, 2020 13:05

Ignite Realtime Blog

Spark 2.9.3 Released

The Ignite Realtime community is happy to announce the availability of Spark version 2.9.3.

This is mostly a bugfix release. And all fixes this time were done by Arthur Ostretsov. We are very grateful for his contribution to Spark project. Arthur has fixed various issues with reconnection logic, cleaned up code, also added file transfer events to chat history.

Full list of changes can be found in the changelog.

We encourage users and developers to get involved with Spark project by providing feedback in the forums or submitting pull requests on our GitHub page.

You can download Spark from the Downloads page. Below are the sha1 checksums:

a626e64fc95a7d3909b662c7190787694cf26f3f  spark_2_9_3.deb
e5fe3cd1f9570b2270398e180523304f73deb92d  spark_2_9_3.dmg
fa13fb61d5df43344e09011ba912ba9716619b87  spark_2_9_3.exe
b6f31882230c23f394255b3302828eb3397f1ec6  spark-2.9.3.rpm
1c1bddbe2cd6e01ecb49749299853806d1666886  spark_2_9_3.tar.gz
1d65ce7cf243230596d13fde5c64e457fde226d9  spark_2_9_3-with-jre.dmg
cac5c1dabc0f4f2ace7ca506dab3c8feaae47066  spark_2_9_3-with-jre.exe

For other release announcements and news follow us on Twitter

5 posts - 5 participants

Read full topic

by wroot at October 24, 2020 12:05

October 16, 2020

Ignite Realtime Blog

Openfire 4.6.0 is released

The Ignite Realtime Community is elated to be able to announce the release of Openfire version 4.6.0!

This release is the first non-patch release in 10 months, which brings a healthy amount of new features, as well as bug fixes.

I’d like to explicitly thank the many people in the community that have supported this release: not only were a significant amount of code contributions provided, the feedback that we get in our chatroom and on our community forums is of great value to us!

Highlights of this release include extensively improved XMPP protocol support, particularly around Pubsub and PEP and better compatibility with higher-end encryption parameters out-of-the-box, which should particularly benefit environments that make heavy use of server-to-server federation.

This release includes experimental support for federated multi-user chat for constrained environments (as defined in XEP-0289). This feature aims to reduce the dependency on highly reliable, high volume network connectivity.

The complete changelog contains approximately 80 issues that have been resolved in this release.

We invite you to give this release a try. The process of upgrading from an earlier version is as lightweight as ever. It is outlined in the Openfire upgrade guide. Please note that, if desired, a significant amount of professional partners is available that can provide commercial support for upgrading, customization, or other services.

We’re always happy to hear about your experiences, good or bad! Please consider dropping a note in the community forums or hang out with us in our web support groupchat.

You can find Openfire release artifacts on the download page. These are the the applicable sha1sums:

3747eb30a9c301cb4e169ea58682bffaec928d45  openfire-4.6.0-1.i686.rpm
446dd40b68e89311f4e7de62af4cb1dfe44cff2d  openfire-4.6.0-1.noarch.rpm
74023de1be0211bbc6879173bc9a5875605cd375  openfire-4.6.0-1.x86_64.rpm
0db33511ff833dc904ea7845d6eb3294cf418782  openfire_4.6.0_all.deb
fe7684d7ddf12896d138af64adb2d79f62874c29  openfire_4_6_0_bundledJRE.exe
cb490c5762c2f2f4ccd70a5a09b5faab59dc5e99  openfire_4_6_0_bundledJRE_x64.exe
fb915d112f522860fdd419c8bc0371f7a4a2105a  openfire_4_6_0.dmg
a5fada882ace449df9056205618e86312a08ec6e  openfire_4_6_0.exe
43a5b890e52b4baa7e8096410a7b398c89ad4d33  openfire_4_6_0.tar.gz
d11cfed06901fef69fcac1c3c4e28f60256baf62  openfire_4_6_0_x64.exe
86e150c2cb9b74c63b3907e3c036cc046c78c5ba  openfire_4_6_0.zip
436f9833fe8d7185c800daf3d35c2d5d11d1f6ea  openfire_src_4_6_0.tar.gz
a3a274b2f12d4cf9f15cb981e6c2b18c78ca07c6  openfire_src_4_6_0.zip

As per usual, we have created a 4.6 branch in our source code repository, that will hold follow-up bug fixes for this release, which will be numbered with 4.6.x identifiers. The main branch will over time evolve into release 4.7. We do not expect to perform more releases on the 4.5 branch.

Thank you for using Openfire!

For other release announcements and news follow us on Twitter

3 posts - 2 participants

Read full topic

by guus at October 16, 2020 15:36

October 12, 2020

Monal IM

4.8 for iOS released, new mac beta

4.8 for iOS should be approved soon and should start showing up in the app store soon. Since there weren’t a ton of builds for it, the mac build is being tested still and the beta has been updated. Ideally that doesnt have issues and will be released soon too .

by Anu at October 12, 2020 03:21

October 05, 2020

The XMPP Standards Foundation

XMPP bites into the apple!

Welcome to the XMPP newsletter covering the month of September 2020.

Newsletter translations

Translations of the XMPP Newsletter will be released here:

XSF Announcements

The XSF started the application period for its annual XSF Board and XSF Council elections. Applicants for the council must be elected XSF members, while board seats are open to everyone. If you are interested to apply for any of those positions please visit the application page.

The Q4 2020 XSF membership application period is open as well. If you are interested to become an XSF member you can apply here.

Articles

The German blog kuketz-blog.de published part 6 of its messenger series [German] covering the Android client Conversations.

Tigase published an article on the development of their multiplatform XMPP Library Halcyon written in Kotlin. In another article later this month they wrote on publishing and subscribing via XEP-0060. And to close this article serie, Tigase explains the STUN & TURN setup with their Tigase XMPP server using XEP-0215.

Software news

Clients and applications

A new major version of Movim is out, with improved notifications, new video-conferencing, chat features and some major performance overhaul. A new version for the Android application is also available to integrate all those features in the Android environment. Discover all the improvements of this new release on the official release note Movim 0.18 – Oterma. Have a look at Movim’s improved draw widget:

Movim

Gajim Development News (September): this month's post marks one year of Gajim Development News! The rework of Gajim’s preferences window has been completed. We improved group chat invitations and made group chat settings easier to access. Also, joining a group chat is now much prettier.

MCabber, the venerable old text UI client, has been released in version 1.1.1 and 1.1.2. Apart from bugfixes, support for displaying the number of unread messages and refactorization of carbon message handling has been implemented.

The Python SDK for GE WiFi-enabled kitchen appliances, gekitchen, made its first GitHub release. The primary goal is to use it to power integrations for Home Assistant, though that probably needs to wait for some new entity types. It is using XMPP as a mean to authenticate, since it is what the GE SmartHQ app uses to communicate with devices.

XMPP on iOS and Mac is getting traction after all:

  • Hello BeagleIM 4.0 and SiskinIM 6.0! Their iOS and MacOS clients now speak Mediated Information eXchange (MIX) (XEP-0369, XMPP’s new group chat protocol). VoIP connectivity has been improved with Jingle Message Initiation (XEP-0353), Last Message Correction (XEP-0308) is available for editing messages which were already sent, and other features like Message Retraction (XEP-0424) and quick replies for quoting were introduced. Support for CAPTCHA forms has been added as well: Extended In-Band Registration (XEP-0158) is invoked for additional verification during account registration. Of course there are many more changes and bugfixes!

  • The iOS and MacOS client Monal got a new push server and received improvements for Message Archive Management. This is one of the many changes to arrive in future releases. Be prepared and get a glimpse in the Monal Beta Testflight.

Servers

No chance for SPAM: Openfire presents their new 'Spam blacklist' plugin which enables reporting for users. Everyone, please report potential spammers! Openfire’s monitoring plugin has been released in version 2.1.0, featuring full text search for personal archive messages.

The Prosody XMPP server team has been busy this month with several exciting things. Firstly, the Prosody 0.11.6 release announcement. They also published a suite of new modules to allow simple invite-based account registration which can help guide new users through choosing a suitable client and registering their first XMPP account. Finally, they published a round-up of advice for everyone on how to help address spam on the XMPP network.

Prosody

Libraries

Libstrophe, a lightweight XMPP client library written in C, released version 0.10.0 which, besides bugfixes and a new API, brings new features: SCRAM-SHA-256 and SCRAM-SHA-512 support, c-ares support, LibreSSL support and global timed handlers that fire periodically regardless of connections status

There is a new beta online for Smack 4.4.0 (Smack 4.4.0-beta2), the Ignite RealTime Java XMPP library.

Other

Google Summer of Code 2020: Anmol summarized his three months work on In-Band Real Time Texting (RTT) for Dino (XMPP Desktop Client) in a final blog post.

The owner of the joinxmpp.org domain is lacking time for further development of the project. He wrote a short summary describing the original goals and says he is now looking for somebody motivated to take on the project.

Extensions and specifications

Developers and other standards experts from around the world collaborate on these extensions, developing new specifications for emerging practices, and refining existing ways of doing things. Proposed by anybody, the particularly successful ones end up as Final or Active - depending on their type - while others are carefully archived as Deferred. This life cycle is described in XEP-0001, which contains the formal and canonical definitions for the types, states, and processes. Read more about the standards process.

Updated

  • Version 2.11.0 of XEP-0004 (Data Forms)
    • Further clarify the presence requirements for the type attribute on fields.

Last Call

Last calls are issued once everyone seems satisfied with the current XEP status. After the Council decides whether the XEP seems ready, the XMPP Editor issues a Last Call for comments. The feedbacks gathered during the Last Call help improving the XEP before returning it to the Council for advancement to Draft.

Proposed Extensions

The XEP development process starts by writing up an idea and submitting it to the XMPP Editor. Within two weeks, the Council decides whether or not to accept this proposal as an Experimental XEP.

  • XMPP Compliance Suites 2021
    • This document defines XMPP application categories for different use cases (Core, Web, IM, and Mobile), and specifies the required XEPs that client and server software needs to implement for compliance with the use cases.

Thanks all!

This XMPP Newsletter is produced collaboratively by the community.

Thanks to agnauck, emus, mdosch, mwild1, pep., pmaziere, Seve, wurstsalat3000 and zash for their help in creating it!

Spread the news!

Please share the news on "social networks":

Find and place job offers in the XMPP job board.

Subscribe to the newsletter

We suggest you Subscribe to receive the next editions in your inbox as soon as it is published! Promote this newsletter to whoever may be interested.

Help us to build the newsletter

We started drafting every new issue in the XSF Github repository and we are always happy to welcome contributors. Do not hesitate to join the discussion in our Comm-Team group chat (MUC) and thereby help us sustain this as a community effort.

You have a project and write about it? Please consider sharing your news or events here, and promote it to a large audience! Even if you can only spend a few minutes, these would already be helpful!

Tasks which need to be done on a regular basis are for example:

  • Aggregation of news in the XMPP universe
  • Short formulation of news and events
  • Summary of the monthly communication on extensions (XEP)
  • Review of the newsletter draft
  • Preparation for media images
  • Translations: especially German and Spanish

License

This newsletter is published under CC BY-SA license.

by emus at October 05, 2020 22:00

XMPP bites into the apple!

Welcome to the XMPP newsletter covering the month of September 2020.

Newsletter translations

Translations of the XMPP Newsletter will be released here:

XSF Announcements

The XSF started the application period for its annual XSF Board and XSF Council elections. Applicants for the council must be elected XSF members, while board seats are open to everyone. If you are interested to apply for any of those positions please visit the application page.

The Q4 2020 XSF membership application period is open as well. If you are interested to become an XSF member you can apply here.

Articles

The German blog kuketz-blog.de published part 6 of its messenger series [German] covering the Android client Conversations.

Tigase published an article on the development of their multiplatform XMPP Library Halcyon written in Kotlin. In another article later this month they wrote on publishing and subscribing via XEP-0060. And to close this article serie, Tigase explains the STUN & TURN setup with their Tigase XMPP server using XEP-0215.

Software news

Clients and applications

A new major version of Movim is out, with improved notifications, new video-conferencing, chat features and some major performance overhaul. A new version for the Android application is also available to integrate all those features in the Android environment. Discover all the improvements of this new release on the official release note Movim 0.18 – Oterma. Have a look at Movim’s improved draw widget:

Movim

Gajim Development News (September): this month's post marks one year of Gajim Development News! The rework of Gajim’s preferences window has been completed. We improved group chat invitations and made group chat settings easier to access. Also, joining a group chat is now much prettier.

MCabber, the venerable old text UI client, has been released in version 1.1.1 and 1.1.2. Apart from bugfixes, support for displaying the number of unread messages and refactorization of carbon message handling has been implemented.

The Python SDK for GE WiFi-enabled kitchen appliances, gekitchen, made its first GitHub release. The primary goal is to use it to power integrations for Home Assistant, though that probably needs to wait for some new entity types. It is using XMPP as a mean to authenticate, since it is what the GE SmartHQ app uses to communicate with devices.

XMPP on iOS and Mac is getting traction after all:

  • Hello BeagleIM 4.0 and SiskinIM 6.0! Their iOS and MacOS clients now speak Mediated Information eXchange (MIX) (XEP-0369, XMPP’s new group chat protocol). VoIP connectivity has been improved with Jingle Message Initiation (XEP-0353), Last Message Correction (XEP-0308) is available for editing messages which were already sent, and other features like Message Retraction (XEP-0424) and quick replies for quoting were introduced. Support for CAPTCHA forms has been added as well: Extended In-Band Registration (XEP-0158) is invoked for additional verification during account registration. Of course there are many more changes and bugfixes!

  • The iOS and MacOS client Monal got a new push server and received improvements for Message Archive Management. This is one of the many changes to arrive in future releases. Be prepared and get a glimpse in the Monal Beta Testflight.

Servers

No chance for SPAM: Openfire presents their new 'Spam blacklist' plugin which enables reporting for users. Everyone, please report potential spammers! Openfire’s monitoring plugin has been released in version 2.1.0, featuring full text search for personal archive messages.

The Prosody XMPP server team has been busy this month with several exciting things. Firstly, the Prosody 0.11.6 release announcement. They also published a suite of new modules to allow simple invite-based account registration which can help guide new users through choosing a suitable client and registering their first XMPP account. Finally, they published a round-up of advices for everyone on how to help address spam on the XMPP network.

Prosody

Libraries

Libstrophe, a lightweight XMPP client library written in C, released version 0.10.0 which, besides bugfixes and a new API, brings new features: SCRAM-SHA-256 and SCRAM-SHA-512 support, c-ares support, LibreSSL support and global timed handlers that fire periodically regardless of connections status

There is a new beta online for Smack 4.4.0 (Smack 4.4.0-beta2), the Ignite RealTime Java XMPP library.

Other

Google Summer of Code 2020: Anmol summarized his three months work on In-Band Real Time Texting (RTT) for Dino (XMPP Desktop Client) in a final blog post.

The owner of the joinxmpp.org domain is lacking time for further development of the project. He wrote a short summary describing the original goals and says he is now looking for somebody motivated to take on the project.

Extensions and specifications

Developers and other standards experts from around the world collaborate on these extensions, developing new specifications for emerging practices, and refining existing ways of doing things. Proposed by anybody, the particularly successful ones end up as Final or Active - depending on their type - while others are carefully archived as Deferred. This life cycle is described in XEP-0001, which contains the formal and canonical definitions for the types, states, and processes. Read more about the standards process.

Updated

  • Version 2.11.0 of XEP-0004 (Data Forms)
    • Further clarify the presence requirements for the type attribute on fields.

Last Call

Last calls are issued once everyone seems satisfied with the current XEP status. After the Council decides whether the XEP seems ready, the XMPP Editor issues a Last Call for comments. The feedbacks gathered during the Last Call help improving the XEP before returning it to the Council for advancement to Draft.

Proposed Extensions

The XEP development process starts by writing up an idea and submitting it to the XMPP Editor. Within two weeks, the Council decides whether or not to accept this proposal as an Experimental XEP.

  • XMPP Compliance Suites 2021
    • This document defines XMPP application categories for different use cases (Core, Web, IM, and Mobile), and specifies the required XEPs that client and server software needs to implement for compliance with the use cases.

Thanks all!

This XMPP Newsletter is produced collaboratively by the community.

Thanks to agnauck, emus, mdosch, mwild1, pep., pmaziere, Seve, wurstsalat3000 and zash for their help in creating it!

Spread the news!

Please share the news on "social networks":

Find and place job offers in the XMPP job board.

Subscribe to the newsletter

We suggest you Subscribe to receive the next editions in your inbox as soon as it is published! Promote this newsletter to whoever may be interested.

Help us to build the newsletter

We started drafting every new issue in the XSF Github repository and we are always happy to welcome contributors. Do not hesitate to join the discussion in our Comm-Team group chat (MUC) and thereby help us sustain this as a community effort.

You have a project and write about it? Please consider sharing your news or events here, and promote it to a large audience! Even if you can only spend a few minutes, these would already be helpful!

Tasks which need to be done on a regular basis are for example:

  • Aggregation of news in the XMPP universe
  • Short formulation of news and events
  • Summary of the monthly communication on extensions (XEP)
  • Review of the newsletter draft
  • Preparation for media images
  • Translations: especially German and Spanish

License

This newsletter is published under CC BY-SA license.

by emus at October 05, 2020 22:00

Ignite Realtime Blog

Openfire 4.5.4 is released

The Ignite Realtime Community is pleased to announce the availability of Openfire version 4.5.4. This release is hopefully the last in the 4.5.x series as version 4.6.0 is near imminent. You can find a changelog denoting 12 issues resolved since 4.5.3.

Download artifacts are available here with the following sha1sum values:

50aaf8dff71162ef34f3485857b56cfe13b95894  openfire-4.5.4-1.i686.rpm
c41002922fe64eaacd19ad1f36e020e2a4f67651  openfire-4.5.4-1.noarch.rpm
a9680aac2589b86f26136a0db0b646636c260271  openfire-4.5.4-1.x86_64.rpm
b02cb4b94ca7c534a8cdc903363568f41308d6db  openfire_4.5.4_all.deb
6f146bd83cf2234561818c584148afcade104fe2  openfire_4_5_4_bundledJRE.exe
027c0d4f01446375de9f949b3a41a25727f84290  openfire_4_5_4_bundledJRE_x64.exe
e96a108ad70e0a9c6569594d822290ec505dff6d  openfire_4_5_4.dmg
7948ef87b242fc818240910dd6b37acacb7ab9ae  openfire_4_5_4.exe
dd5a50bea54f41226985e7116045f8811a62bf85  openfire_4_5_4.tar.gz
efa97aa9f66116adb210b3c9a0187d401a298f7b  openfire_4_5_4_x64.exe
4c7f81188bc447315cceb4625828990ae32163a7  openfire_4_5_4.zip
ba7ff821dbc2de81d0f094e128c1d1a5369d494c  openfire_src_4_5_4.tar.gz
75f40bf35f2af0e3a0279d556d097f30766e887f  openfire_src_4_5_4.zip

Thanks for your interest in Openfire.

For other release announcements and news follow us on Twitter

1 post - 1 participant

Read full topic

by akrherz at October 05, 2020 14:39