An open source JMAP proxy, JavaScript library and webmail demo

Technical

Last December we announced the JMAP project, our effort to develop a new open protocol for mail, calendar and contact clients that’s faster and more powerful than the current standards. Since then, we’ve continued to refine the specification, and other companies have come on board to help build the future of email. Atmail is using JMAP to power their next-generation mobile apps. The next version of Roundcube, the world’s most popular open-source webmail, will be built on JMAP, with support from Kolab. Thunderbird has started looking at integrating support.

As we’re now reaching the stage where clients and servers are beginning to be developed, the need for an existing server (if you’re building a client) or client (if you’re building a server) to test against becomes vital. To help with this, we are proud to be open sourcing several new JMAP projects, all under the liberal MIT license.

JMAP proxy

The proxy can sit in front of any IMAP server (although works best with those supporting CONDSTORE), CardDAV and CalDAV server, and provides an almost complete JMAP interface to them (JMAP authentication is not implemented yet, and there may be one or two other minor issues). The proxy is reasonably stable, and suitable for testing new JMAP client implementations against.

There is a hosted version available to use at https://proxy.jmap.io – log in with a FastMail, iCloud, Gmail or other IMAP test account to start playing with JMAP today! Alternatively, if you want to run it yourself, the code is available at https://github.com/jmapio/jmap-perl.

JMAP JavaScript client library

The JS client library is a full implementation of the JMAP mail, calendar and contacts model in JavaScript. It supports asynchronous local changes and is tolerant of network failure – actions will update the UI instantly, then synchronise changes back to the server when it can. It also has multi-level undo/redo support.

The library is the basis for the next-generation FastMail interface, and has a sole dependency on a subset of our Overture library.

JMAP demo webmail

So you can try the client library and proxy in action today, we built a simple – but in some ways quite sophisticated – webmail demo on top of the JS client library. Combined with the JMAP proxy, this provides the ability to try JMAP now, with a real account. The webmail demo does not support compose, but does support:

  • Drag-drop to move between folders
  • Instant actions (the UI updates immediately when you archive etc.)
  • Multi-level undo/redo (Ctrl-Shift-Z to redo)
  • Full mailbox access with no paging (and you can jump to an arbitrary
    point in the scroll)
  • Conversation threading
  • Simple keyboard shortcuts (j/k to move next/previous)
  • A simple calendar view

We do not intend to add further features to this demo ourselves, but we welcome others to fork it and develop it into a more fully fledged client. The webmail is installed on our hosted version of the proxy, so you can try it today with a real account.

The future

In addition to these new projects, we’re also working hard to build JMAP into the open-source Cyrus IMAP server, the bedrock of FastMail and many other email providers around the world. This will (probably) be the first fully production-ready implementation and will of course be what we run here at FastMail. We already have a version of our own web UI running on JMAP internally (via the proxy we have open sourced) and we’re excited by the extra speed and efficiency it gives us over our (already very fast) webmail today.

If you run your own email service and want to get involved with the JMAP project, you can find full details of the specification, implementation advice and a link to the code on the JMAP website. If you would like to get involved in finalising the spec, or have questions or comments about implementing JMAP, then please join the JMAP mailing list.