Welcome to the new site

The blogspot blog the served as the home for Monal will continue to exist for historical reasons and also because the article I wrote about the security weaknesses of Facebook chats XMPP implementation still draws a lot of traffic.

Monal has grown significantly since it’s release. I think this site will better serve the needs of the everyone using it.  In particular, I think the help section will answer the most common questions.


Monal 2.0.3 Submitted

Monal 2.0.3 is a major update that fixes bugs and adds important updates.


This is a major update that improves the application significantly.

1. Proper multi tasking. It will run in the background until you logout or close the app. No more 10 minute limit.|
2. Manually set XMPP priority
3. Shows offline contacts
4. Added gtalk extensions for google apps
5. fixed an issue with Digest-Md5 servers and connectivity
6. Fixed a bug with some non english messages not arriving
7. improved auto recovery in the event of a network error
8. when swiping to close an active chat it says “close” instead of delete. When clearing a chat log it says “clear” and not delete
9. improved UI for adding new contact
10. shows a badge with a count of messages received on app icon
11. status is not overwritten when setting away
12. fixed misc crashing bugs with the UI
13. new buddy details screen
14  optimized and switched from GCC to LLVM+Clang compiler
15. Added Multi user chat (MUC) menus.
16. Removed browser tab from iPad UI


Group chat (MUC)

Monal supports XMPP MUC (Multi user chat)

Using Group Chat

If  a group chat room is entered, Monal will join it  and it will show up in both the  active chats list and as an online “user” in the contacts list.  Talking in a group chat is the exact same as talking in a normal one. When entering a room, Monal requests the server send the last 5 messages  of the conversation if it is available.


If invited to a room, Monal will ask to accept the invitation and join the room if accepted.


Joining a Room

A room is joined by going to In the More-> Group chat.

If the server supports it, Monal will discover at login what the address of the group chat service is.    The server field on this page  will be  filled with the correct information if it is discovered.

After entering the room name  and a password if necessary, tap join to enter the chat. Monal will either connect or return an error.

Leaving a Room

To leave a room, swipe the item in active chats and  press the close button.

Setting Nickname

Not available in the current build but will be available in the future.

Searching Rooms

Not available in the current build but will be available in the future.

Searching  Users

Not available in the current build but will be available in the future.

XMPP Feature list

This page contains the XMPP features of Monal ( currently 2.0.7).


  • Direct connection
  • Connection over VPN
  • Connection with new style SSL (using start TLS ).  This works on any port.
  • Connection with old style SSL.  Force this by setting port to 5223. A future release will have old style allowed on any port.
  • Connection without SSL
  • SSL with self signed certificates (this is automatic)
  • DNS SRV record  discovery

Authentication Mechanisms:

  • SASL Plain
  • SASL Digest-MD5
  • Legacy  Authentication (XEP-0078)
  • Download contact’s icon
  • Download contact’s full name
  • Retrieve  messages sent while user was offline
  • Update contact’s status
  • Set own status message
  • Invisible mode
  • Set away
  • Update status message with currently playing iPod song
Contact list:
  • View currently online contacts
  • View offline contacts
  • Add a new contact
  • Remove a contact
  • Authorize others adding you to their contact list
  • Search for users on server and add to contact list (XEP-0055)

  • landscape and all orientations  for all windows
  • Full log of past conversations
  • Sound,vibrate on new message. Sound cannot be changed in this version
  • Emoticons
  • Links are detected and open in safari when clicked
  • Join multiple user chat (MUC)
  • 2 pane iPad view

Multi tasking:

  • Multi tasking until app is closed or user logs out (3GS and up normally, 3G and up when jailbroken)
  • Notification of new message when phone is locked ( all iOS devices)
  • Notification of new messages when running in the background in iOS4
  • Jingle VOIP requires real IP. Does not have STUN and NAT traversal yet.
  • iTunes file transfer


About Monal

Monal is developed and maintained by Anurodh Pokharel  in Boston. He can be reached at info@monal.im. Monal is written completely from scratch in Cocoa and does not use any libraries for the XMPP protocol implementation.  The wonderful Monal icon was created  by Ayush Pokharel.

Many icons are  from Joseph Wain‘s excellent Glyphish Pro set. Free icons  are used under the creative commons attribution license

The Jingle VOIP functions use JRTPlib by Jori Liesenborgs for RTP. VOIP wouldn’t have been possible without it.

Special thanks also goes to members of  the WebEx Developer Program at Cisco, who were incredibly helpful setting up accounts to test compatibility. The WebEx support would not have been possible without them.

Adium was the inspiration for this program and it’s debug output  log was used very heavily when initially studying XMPP.

Monal is more secure

Monal is more secure than other iOS instant messaging programs.  Since it is a direct client, it connects directly to the server you have entered without going through a middle man. The lack of a middle man is important for the following reasons.

Protect your password

We all know that you should never give your work or personal IM username and password to any website that asks for it. This is even more important when you use the same username and password for email or corporate login systems. Similarly, this information  should never given  any random app that asks for it.

Many iOS apps that support push messaging make a copy of login information and store it in a database on their own server.  These apps are never directly connected to the IM service but to a middle man.  The middle man keeps the  username and password of all users. If and when you stop using the IM client, the middle man will still have all of this information.

This is an incredibly dangerous practice. The safety of a user’s personal information is entirely dependent on the security and trustworthiness of individuals who have access to these databases on a daily basis.

Protect your conversations

The middle man services also often have copies of all instant messages sent using the service. They send push notifications by logging into your account from their servers, reading IMs and forwarding them to you.  For anything out of the most casual conversation this is unacceptable.

Protect your privacy

As the developer of Monal I have decided to keep it free and not include ads and tracking software.  How many people use Monal? A lot. Thousands and thousands of people all over the world  (Hello, Antarctica!). However, all I know is what the Apple download/upgrade  counter shows and what people tell me in emails.  Much the same way I have objections to ads in my software, I do not like the “metrics” software and libraries. Unlike many other iOS apps, Monal does not contain and will never contain user tracking software.

Submitting Bugs & Feature Requests

The current list of bugs and feature requests is in the issue tracker:


There are two ways you can report a bug or request a feature. The preferred way is by  going directly to the reporting system:

For Monal: http://redmine.monal.im/projects/monal/issues/new

For Sleeptrack: http://redmine.monal.im/projects/sleeptrack/issues/new

You do not have to create an account to submit something. However, if you would like to stay  notified on the issue or expect to submit more in the future, I would recommend creating an account.

Alternatively,  you can send an email to bugs@monal.im or on Twitter, @monalxmpp




Openfire, Jabberd and any other XMPP/Jabber server

Openfire, Jabberd, ejabberd,prosody etc are all standard XMPP (Jabber) servers.

When setting up a standard XMPP/Jabber account, select XMPP in the Accounts tab.

In the account set up screen first try entering your username under Jabber ID. The username  is almost always  like an email address and would look something like user@domain.com. Enter the password and enable the account.  After saving and returning to the accounts page Monal will try to connect. For simple configurations with one server and domain this will automatically work.

If this does not work, edit the saved account by tapping on it in the Accounts tab.  Scroll down and look at the Advanced Settings.  It is highly recommended that you check with the XMPP server administrator to determine what the server,  port and SSL  settings should be. The resource does not matter.   Manually enter the new server name and port  and enable/disable SSL.  Save by returning back to Accounts.  Monal should now correctly connect.

Common quick fixes

1. If you are not sure about the SSL setting, try once with it on and off.  if it works with both, always turn SSL on if it works.

2. The port is almost always  5222.  Some SSL systems require 5223.  Normally it is never 5223 unless SSL is also enabled.

3. It is possible your set up is different. In some configurations, username is just a name without a domain. Check with your IM server administrator to find out how it should be





Facebook chat is possible after creating a Facebook username. If you haven’t already done so, go to http://www.facebook.com/username and create a username.

In Monal, select Accounts and then Facebook under Add New Account

In the following page, enter the  facbeook username  under Jabber ID and password and enable the account. The Jabber ID will always be in the form facebookusername@chat.facebook.com. The password is the regular facebook password for the account.  Leave all other settings alone.

When first logging in, it is possible Monal will be slower on older iPhones as it downloads all the pictures for every facebook friend who is online. This is only happens on the first login.

Cisco Webex

Cisco Webex connections are standard XMPP connections. To set up a new connection, go to the accounts tab and select XMPP connection.


Here you need to enter your Jabber ID. This is the Webex login this would be in the form xxx@yourdomain.com. Enter your password and then enable the account. Return to the accounts screen and it should auto connect.

You do not ordinarily  need to adjust any other settings.

The resource setting does not matter and the port setting  and server settings should be left alone.