Synapse 0.7.0 and matrix-angular-sdk 0.6.2 released!

We just pushed out a major new release of Synapse 0.7.0, the python reference server for Matrix, and a minor maintenance update for matrix-angular-sdk 0.6.2, the reference web client implementation.

The emphasis here has been on federation performance and stability – with all the recent interest from FOSDEM and LWN and HackerNews we’ve been getting a lot of traffic on matrix.org and new servers federating up, so we’ve been busy profiling and fixing performance on some of the hot paths by adding in-memory caches and similar.

This release is *highly* recommended if you are running a federated server, as it fixes many denial-of-service failure modes in the federation implementation, as well as many performance improvements

Behind the scenes, there’s also lots of work going on for v2 of the Client-Server API (which lets you filter the events your client subscribes to in a room, and combines the ‘initial sync’ and ‘eventstream’ APIs into a single simplified ‘/sync’ API) – the alpha of this has landed in 0.7.0, but we don’t recommend trying to use it yet. Meanwhile the Application Service API is effectively finished, but hasn’t landed on the master branch yet. Synapse also finally has initial support for push notifications for the iOS client now via the sygnal APNS gateway, although we need to actually document how to set this up to be usable in general.

Finally, we have switched to recommending that synapse is installed in a virtualenv rather than into ~/.local, due to various problems with how setup.py’s dependency management works. Instructions on setting up a virtualenv can be found in the README.

On the clientside: we’ve improved performance, enabled identicons for unknown users, and now fully support OpenWebRTC for VoIP calling from Safari, Bowser, and other OpenWebRTC-capable browsers!

Thanks to everyone running servers – please upgrade, tell your friends, and help us grow Matrix!

 

Changes in synapse v0.7.0 (2015-02-12)
======================================

* Add initial implementation of the query auth federation API, allowing
  servers to agree on whether an event should be allowed or rejected.
* Persist events we have rejected from federation, fixing the bug where
  servers would keep requesting the same events.
* Various federation performance improvements, including:
  - Add in memory caches on queries such as:
     * Computing the state of a room at a point in time, used for
       authorization on federation requests.
     * Fetching events from the database.
     * User's room membership, used for authorizing presence updates.
  - Upgraded JSON library to improve parsing and serialisation speeds.
* Add default avatars to new user accounts using pydenticon library.
* Correctly time out federation requests.
* Retry federation requests against different servers.
* Add support for push notifications and push rules.
* Add alpha versions of proposed new CSv2 APIs, including ``/sync`` API.
Changes in Matrix Angular SDK 0.6.2 (2015-02-12)
================================================
Bug fixes:
 - Fixed a bug which caused OpenWebRTC to occasionally fail.
 - Fixed a bug which caused multiple room initial syncs to occur in rapid
   succession.

Features:
 - Display a "Joining Room" dialog when joining rooms.
 - Display identicons for users with no avatar.
 - Display m.notice events with full formatting.
 - Add push notification rules to settings.

Improvements:
 - Modified the red/blue notification colours to be more noticeable on a wider
   range of displays.
 - Highlight room invitations in blue.
 - Calculate room names for rooms of 3+ members.
 - Improved page load performance.

Synapse 0.6.1 released and other news!

Happy 2015 from everyone at Matrix.org!

We’re excited to kick off the new year with a major performance upgrade for Synapse: having had a chance to do some profiling over the Christmas break, Synapse 0.6.1 improves performance by up to an order of magnitude thanks to optimising the way events are constructed and manipulated, DB optimisations, etc. Suddenly things are feeling *much* more snappy and less of a PoC and more of a real system, which hopefully bodes well for 2015! Please upgrade if you’re running a homeserver, or install one if you’re not – grab the code from http://github.com/matrix-org/synapse.

The iOS SDK and demo app has also been improving lots in the last few weeks – grab the latest code from http://github.com/matrix-org/matrix-ios-sdk. We have zoomable image support; full support for the new media repository in Synapse 0.6.0; file transfer status UI; offline support; snappy message synchronisation and more…

We also released a new simple Python SDK client library for Python called matrix-client, which is now being used by NEB (our general-purpose Matrix helper bot).

Meanwhile, our (constantly evolving) plan for the beginning of 2015 is:

  • Finish v2 of the client-server API based on all the lessons learnt since launch: draft in progress here
  • Finish the Application Services API to allow proper gateways and services in and out of Matrix at last:draft in progress here
  • Re-release the spec based on the above
  • Build robust gateways (IRC, XMPP, SIP and more) on top of the AS API
  • Polish and release the iOS, Android demo clients – including push notification and VoIP support!
  • Overhaul the identity server architecture and add end-to-end crypto

Given the rate at which Matrix is maturing, the next few months should be really exciting – please come join us on #matrix:matrix.org and get involved!


Changes in synapse 0.6.1 (2015-01-07)
=====================================

* Major optimizations to improve performance of initial sync and event sending
in large rooms (by up to 10x)
* Media repository now includes a Content-Length header on media downloads.
* Improve quality of thumbnails by changing resizing algorithm.

Matrix wins Best Innovation Award at WebRTC Paris!

Last week we had a great time attending WebRTC Conference Expo Paris 2014 – chatting to lots of new folks about Matrix; speaking in the “To Build or Not To Build” panel discussion; giving a general presentation on Matrix, and participating in the Demo shoot-out.

And we’re very proud to say that we won the Best Innovation Award for a slightly frantic demo, showing an iPad mounted on our pet Trossen Robotics PhantomX Hexapod being used for robot telepresence by streaming video and audio to an Oculus Rift VR headset. This was using our proprietary in-house WebRTC stack, but once Matrix has fully taken off we hope to share our WebRTC stack with the world too :) This was a very last minute demo – we wanted to show something different to normal browser-to-browser IM/Video calling via Matrix and had the idea to use the Rift at the last minute – and in fact it still wasn’t working when we went on stage (turns out that iOS 8.1 introduces some quirks in the video capture API which were producing corrupt video). By switching from an iPhone 5S running iOS 8.1 to an iPad running iOS 6 we were able to turn the demo around in the nick of time and get it working live on stage (modulo a RGB<->BGR colourspace bug) just in time to win the award. Huge thanks to the jury for voting for us against the odds :D For those interested in displaying raw video straight onto the Oculus Rift (without using any head-mounted tracking), there’s an OpenGL code snippet up at https://gist.github.com/ara4n/875b5e8b66be3617efb7.

iOS to Oculus Rift Telepresence

(Image credit to Victor Pascual Avila at Quobis)

Also, huge congratulations to Vladimir Beloborodov who won the Best Data Channel Award for hacking his Romotive telepresence robot to rendezvous via Matrix with his iPad, stream video via Google’s WebRTC stack and control the robot’s motion via the WebRTC Data Channel:

Vladimir Beloborodov

We’re really excited to see other folks’ Matrix projects out there winning prizes!

Synapse 0.6.0a released!

We’re proud to announce the new 0.6.0 major release of Synapse: the Python reference implementation of Matrix – as well as 0.6.0 of the AngularJS example Matrix client, as a special early Christmas present from the Matrix team :)

The main priority here has been hunting down stability bugs whilst also adding in a few more features. The most exciting new feature is the new Media/Content API: this allows every homeserver to replicate, cache and thumbnail any files associated with Matrix rooms, rather than relying on retrieving them from the origin homeserver as was previously the case. This is really cool, as it effectively makes Matrix a distributed content distribution network and gives the same replication semantics to file attachments as to the rest of JSON in rooms.

We’ve also landed a major new branch which changes the way events are represented internally in order to make them immutable, and fixes a whole range of minor stability issues. In other news, performance issues are still a work in progress…

To get involved, head over to https://github.com/matrix-org/synapse and install and upgrade today!


Changes in synapse 0.6.0 (2014-12-19)
=====================================

* Add new API for media upload and download that supports thumbnailing.
* Replicate media uploads over multiple homeservers so media is always served
to clients from their local homeserver. This obsoletes the
--content-addr parameter and confusion over accessing content directly
from remote homeservers.
* Implement exponential backoff when retrying federation requests when
sending to remote homeservers which are offline.
* Implement typing notifications.
* Fix bugs where we sent events with invalid signatures due to bugs where
we incorrectly persisted events.
* Improve performance of database queries involving retrieving events.


Changes in Matrix Angular SDK 0.6.0 (2014-12-19)
================================================

Breaking changes:
- Uploading files in the web client will now hit the new content repository URL
introduced in Synapse 0.6, and be incompatible with previous Matrix clients.

Bug fixes:
- Fixed a bug which caused the event stream to become wedged when the computer is asleep.
- Fixed a bug which caused the recents to update but not the message window.

Features:
- Typing notifications will now be sent.
- Typing notifications will now be displayed for other users.
- Use the new content repository introduced in Synapse 0.6 when uploading files.

Improvements:
- Display more error dialogs rather than silently failing.
- Display loading spinners on signup.
- Display feedback when joining a room.
- CTRL + clicking on a recents entry will now open that room in a new tab.
- Clicking on links in messages will now open them in a new tab.
- Provide a progress dialog when uploading files.
- Display a red bar when the event stream connection is lost for an extended period of time.

Synapse 0.5.4 released

We just pushed a bugfix update to Synapse 0.5, mainly to fix a memory leak where federated events could get leaked whilst retrying to send them to a remote server which is unavailable. Please upgrade, especially if you’ve noticed synapse hogging RAM!


Changes in synapse 0.5.4 (2014-12-03)
=====================================

* Fix presence bug where some rooms did not display presence updates for
remote users.
* Do not log SQL timing log lines when started with "-v"
* Fix potential memory leak.