Update (this got lost in the original post; sorry Travis!): Dimension received a security update – if you run your own Dimension instance it is strongly recommended you update right away. Telegram bridge support in Dimension is underway, with more updates expected for next week in Matrix.
It’s been some months since we checked in with FluffyChat. If you’re a Ubuntu Touch user, or have a device running it, you should see the progress that has been made recently on this Matrix client. Collected changelog 0.5.0 to latest (0.5.4):
Search users in chats
Security & Privacy settings:
Disable typing notifications
New message status:
Sending: Activity indicator
Sent: Little cloud
Seen by someone: Usericon
Minor UI improvements
FluffyChat now automatically opens the link to the matrix.org consens
Neil has been keeping up the pace with Seaglass development:
Seaglass has had a substantial rewrite to the room cache to help improve reliability and reduce crashes, better thumbnail behaviour on inline images, various tiny visual tweaks, in-window blending, support for encryption key sharing requests for E2E rooms.
Rendering performance has been massively increased (if you ignore the occasional bug). Resizing the window shouldn’t be so slow anymore and a lot of avatar image operations are no longer repeated unnecessarily
Other than that this week has mostly featured lots and lots of bug fixes, hopefully lots of crashes fixed.
Screenshot below shows the new E2E UI:
When not escaping typhoons, kitsune has found some time to continue work on Quaternion:
Quaternion‘s master branch is alive again – it’s been prone to crashes in the last two weeks, now it shouldn’t. Feel free to try the new room list organised by tag!
This is a fork of Riot Android done by hrjet, f-droid release done by me. It’s removing mostly jitsi group call functionality and some other smaller stuff. In doing so it manages to require far less permissions and is also only 12 MB in size instead of riots 20 MB.
Matrique gained alpha support for multiple accounts
This is thanks to leaning on libqmatrixclient’s native multiple account support!
Riot Web 0.16.4 released
This is pretty much a maintenance release – fixing the DM avatar regression that crept in with 0.16.3, adding better support for warning users when their client hasn’t yet synced with the server, and the final bits of work needed before we can turn on membership Lazy Loading in the upcoming Riot 0.17.
Full changelogs as always are split over the three projects which make up Riot/Web:
This release contains support for lazy loading room members, and also some breaking changes relating to startClient().
Support for lazy loading members. This should improve performance for users who joined big rooms a lot. Pass to lazyLoadMembers = true option when calling startClient.
MatrixClient::startClient now returns a Promise. No method should be called on the client before that promise resolves. Before this method didn’t return anything.
A new CATCHUP sync state, emitted by MatrixClient#"sync" and returned by MatrixClient::getSyncState(), when doing initial sync after the ERROR state. See MatrixClient documentation for details.
RoomState::maySendEvent('m.room.message', userId) & RoomState::maySendMessage(userId) do not check the membership of the user anymore, only the power level. To check if the syncing user is allowed to write in a room, use Room::maySendMessage() as RoomState is not always aware of the syncing user’s membership anymore, in case lazy loading of members is enabled.
Synapse 0.33.4 was released, with a whole host of bug fixes, some enhancements to resource usage management and a bunch of internal changes in readiness for room member state lazy loading and our ongoing port to Python 3.
Meanwhile, Python 3 support for monolithic (non-worker) Synapses has finally landed on the develop branch, thanks to massive work from hawkowl and notafile – if you want to help us test and flush out any remaining byte/utf8 style errors, please create a virtualenv for python 3.6 or 3.5 (twisted doesn’t support 3.7 yet) and point the develop branch of Synapse at it, tail the logs for ERRORs and report them via Github if/when you see them. In practice it seems pretty stable though, and noticeably reduces RAM and speeds things up thanks to improved GC and general performance work in Python.
We’ve also discovered that jemalloc works *very* well at improving RAM usage on Python 2 under Linux (we haven’t tried it on Python 3 yet) by providing a more fragmentation-resistent malloc implementation; if you are having problems with your Synapse RAM spiking up we recommend giving it a go. All of the Matrix.org server is using it now.
Also, lots of ops work this week; Erik has prototyped a new storage strategy for state groups which shrinks storage requirements by 10x, we’ll be applying this shortly to Matrix.org otherwise we’re going to run out of disk space. There was also a regression on Synapse develop on federation, where outbound requests would get stuck and never retry – this impacted the matrix.org server badly over the course of the week, but as of Friday night we have a workaround in place. We’re not aware of it affecting anyone other than the matrix.org deployment (and we haven’t got to the root cause yet).
Half-Shot is continuing to work on the project to split out IRC connection management from the IRC bridge, letting the bridge be restarted without interrupting IRC connections!
The project is going quite well, and is going to be used on matrix.org once production ready which will really speed up upgrades and give us near zero downtime indifferent to the size of the bridge.
At the moment the project has the ability to spin up and maintain connections, however the connections are not supporting IRC fully yet as there are bits to do on the parsing and maintaining state side. There is also work on a top-like tool to visualise and control the service outside of the bridge so we can quickly handle any oddities if they come up. Finally, it allows you to hot reload the configuration without dropping existing connections!
On the work done to support this on matrix-appservice-bridge, there is basic support for stating connections on the bridge but it’s in early stages at the moment.
Travis has been tidying up loose bits on the Matrix spec this week:
experimenting with splitting out the “Room” specific bits of the spec into a dedicated section rather than being split between the CS and SS APIs;
In practice, finalising the S2S API is now blocked on proving the implementation on Synapse; work on this will resume next week and then we’ll document the end result and ship the r0 at last. Timings are going to be completely determined by available manpower and what level of ops distractions we face (c.f. the Synapse section above…). Whilst we’re waiting for the final S2S details to get hashed out, Travis is going to be helping on Riot dev, to try to stop stuff like this, as there’s no point in having the platonic ideal of a perfect spec if actual users are unable to benefit from it.
#matrix-dev:matrix.org was reborn as a new room a couple of weeks ago to flush out old corrupted events, but maybe not everyone knows. Come join #matrix-dev:matrix.org, it’s a starting point for all developers looking to build on the platform. We’re also rebuilding #test:matrix.org and #riot:matrix.org, although once we ship the new state resolution
A sneak peek at Modular…
Finally, there’s been a massive amount of work on the New Vector side of things to soft-launch Modular – a paid hosting platform for Matrix servers (and, in future, paid integrations). At this point we’re looking for early adopters who want a dedicated Riot+Synapse for communities or companies of 50 or more users – but don’t want to have to run it themselves. Modular takes the homeserver hosting we’ve already been providing for Status, TADHack and others, and turns it into a mass-market product. The pricing for early adopters is over 5x cheaper than Slack, so if you’ve been dying to have a reliable, fast and expertly maintained homeserver without any of the headaches of admining one yourself, please head over to https://modular.im and give it a whirl and let us know how it goes! This is also a great way to support Matrix development in general, as money from Modular will directly keep the core Matrix team funded to work on Matrix. Once we’re happy with the soft-launch and have incorporated any feedback we’ll start yelling about it as loud as we can :)
We’ve had a bit of an accidental hiatus on Matrix Live thanks to getting submerged all the different project endgames happening atm (spec releases, lazy loading, Modular, Riot redesign etc), and for the last few Fridays we’ve got to midnight and beyond with too much still on the todo list to justify recording a video. But to avoid completely falling behind, here’s a slightly exhausted Saturday morning update instead (warning: Matthew is not a morning person).
Ben’s away today, so this TWIM is brought to you mainly in association with Cadair’s TWIMbot!
Since last week’s sprint to get the new spec releases out, focus on the core team has shifted exclusively to the remaining stuff needed to cut the first stable release for the Server-Server API. In practice this means fleshing out the MSCs in flight and implementing them – work has progressed on both improving auth rules, switching event IDs to be hashes and others. Whilst implementing this in Synapse we’re also doing a complete audit and overhaul of the current federation code, hence the 0.33.3.1 security release this week.
Meanwhile, in the community, ma1uta reports:
I am working on the jeon (java matrix api) to update it to the latest stable release. Also I changed versions of api to form rX.Y.Z-N where rX.Y.Z is a API version and N is a library version whithin API. So, I have prepared Push API (r0.1.0-1), Identity API (r0.1.0-1) and Appservice API (r0.1.0-1) for the first release and current updating the C2S API to the r0.4.0 version.
Are you in the market for a Matrix-XMPP bridge? When I say “market”, I mean it because this week we have two announcements for bridging to XMPP! You can choose whether you’d prefer your bridge to be implemented as a puppet, or a bot.
It is a double-puppet bridge which can connects the Matrix and XMPP ecosystems. Just invite the @_xmpp_master:ru-matrix.org and tell him: @_xmpp_master: connect [email protected] to connect current room with the specified conference.
You can ask about this bridge in the #matrix-jabber-java-bridge:ru-matrix.org room.
Currently supports only conferences and only m.text messages. 1:1 conversations and other message types will be later.
maze appeared this week and announced MxBridge, a new Matrix-XMPP bridge:
It works as a bot, so it is non-puppeting. Rooms can be mapped dynamically by the bot administrator(s). There is no support for 1-1 chats (yet). MxBridge is written as a multi-process application in Elixir and it should scale quite well (but don’t tie me down on it ;)). https://github.com/djmaze/mxbridge
Neil powers onwards with Seaglass, with updates this week including:
Lazy-loading room history on startup to help with performance
Scrollback support (both forwards and backwards)
Support for Matthew’s Account (aka retries on initial sync for those of us with massive initial syncs, and general perf improvements to nicely support >2000 rooms)
Better avatar support & cosmetics on macOS Mojave
Encryption verification support, device blacklisting and message information
Ability to turn encryption on in rooms
Responding to encryption being turned on in rooms
Paranoid mode for encryption (only send to verified devices)
Invitation support (both in UI and /invite)
Blackhat announces that Matrique’s new design is almost done, along with GNU/Linux, MacOS and Windows nightly build!
Alexandre Franke says:
Fractal 3.30 got release alongside the rest of GNOME. It includes a bunch of new and updated translations, and redacted messages are now hidden.
Meanwhile, hidden in this screenshot, uhoreg noted that E2E plans are progressing…
Bruno has been hacking away on Riot/Web squashing the remaining Lazy Loading Members defects and various related optimisations and fixes. We also released Riot/Web 0.16.3 as a fairly minor point release (which unfortunately has a regression with DM avatars, which is fixed in 0.16.4, for which a first RC was cut a few hours ago and should be released on Monday). Meanwhile the first cut of Lazy Loading also got implemented on Android as well. Both are hidden behind labs flags, but we’re almost at a point where we can turn it on now! Otherwise, the Riot team has got sucked into working on commercial Matrix stuff, for better or worse (all shall be revealed shortly though!)
Jason has been working heavily on Construct, and has new test users. Construct is able to federate with Synapse and the rest of the Matrix ecosystem. mujx has created a docker for Construct which streamlines its deployment.
tulir has now deployed using the standalone install instructions on a very small LXC VM using ZFS. Unfortunately ZFS does not support O_DIRECT (direct disk IO) which is how Construct achieves maximum performance using concurrent reads. This is not a problem though when using an SSD or for personal deployments. I’ll be posting more about how Construct hacked RocksDB to use direct IO, which can get the most out of your hardware with multiple requests in-flight (even with an SSD).
Work was split this week into spec/security work, with the critical update for 0.33.3.1 – if you haven’t upgraded, please do so immediately.
Otherwise, Hawkowl has been on a mission to finish the Python 3 port, which is now almost merged. Testers should probably wait until it fully merges to the develop branch and we’ll yell about it then, but impatient adrenaline enthusiasts may want to check out the hawkowl/py3-3 branch (although it may explode in your face, mangle your DB and format your cat, and probably misses lots of recent important PRs like the 0.33.3.1 stuff). However, i’ve been running a variant on some servers for the last few days without problems – and it seems (placebo effect notwithstanding) incredibly snappy…
Meanwhile, the Lazy Loaded Member implementation got sped up by 2-3x, which makes /sync roughly 2-3x faster than it would be without Lazy Loading. This hasn’t merged yet, but was the main final blocker behind Lazy Loading going live!
A new bot appears! Are you a pedantic academic who likes to correct others’ misuse of Latin-derived plurals? This task can now be automated for you by means of SingularBot! Also for people who just like to have some fun. Free PongBot and SmileBot included.
kitsune on Hokkaido island
I ended up being on Hokkaido island right when a major earthquake struck it; so no activity on Matrix from me in the nearest couple of days. Also, donations to GlobalGiving for the disaster relief are welcome because people are really struggling here (abusing the communication channel, sorry).
…has got delayed again; sorry – we’re rather overloaded atm. We’ll catch up as soon as we can.
As many know, we’ve been aiming for the end of August to cut the first ever stable releases of the remaining APIs in the spec which have up to now been marked unstable – i.e. providing a snapshot of the spec which correctly matches the reference implementations (other than implementation bugs) and which can be used in isolation to develop production grade implementations of clients, servers, etc without need to reference any other implementations. There’s been a massive sprint to pull this together, and as of the time of writing there are still PRs and commits landing every few minutes. We’ll post a full update on our progress on Monday; meanwhile you can see a sneak peek over at the August 2018 r0 project board.
Spec work has completely precluded any other backend dev this week.
Half-Shot, gone but not really gone
This week we say farewell to Half-Shot, who has been working fulltime on bridges over the summer. He has managed the matrix.org bridges largely single-handedly, with a big focus on the often-volatile IRC bridge(s).
now bridges a lot more stuff, such as formatting, media and replies. I’m also almost done with desegregating users so that Matrix users join the same group chat portals rather than everyone having their own portal to the same chat
Zulip chat, bridged by Zulip
Matthew discovered there is a Matrix-Zulip bridge on the Zulip side. So if you’re running a Zulip server (for some reason), and want to bridge with Matrix check out the integration docs here.
IRC Connection Tracker
Half-Shot created a new component to enhance the reliability of IRC-Matrix bridging:
IRC Connection Tracker is a thing now. It’s a project to separate out the IRC connections from the appservice so the two can be run independently, so that restarting the appservice doesn’t affect the IRC connections. It’s hopefully going to allow bridge stuff to run faster when it’s done.
Fractal 3.29.92 got released and we are freezing strings to give GNOME translators a bit of time to complete translations for 3.30 next week. Latest developments include tweaks for the title bar, misc bug fixes, a new presentation for uploaded files (that are not images, those are still displayed inline) with buttons to download or open them.
Development builds are now parallel installable for easier testing and CI has been improved.
Seaglass now has some early support for inline images and attachments, and supports Quick Look. Also handles emotes and notices better. It also has version numbers now, various other little fixes and Aaron Raimist has been working on auto-update support.
There’s also been some work on supporting dark mode on Mojave (which looks particularly sexy) and even Touch Bar support!
Riot Android v0.8.15
Riot Android v0.8.15 is on it’s way to the Play Store.
Changes in Riot Android 0.8.15 (2018-08-30)
Upgrade to version 0.9.9.
Improve intent to open document (#2544)
Avoid useless dialog for permission (#2331)
Improve wording when exporting keys (#2289)
Upgrade lib libphonenumber from v8.0.1 to 8.9.12
Upgrade Google firebase libs
Handle \/ at the beginning of a message to send a message starting with / (#658)
Escape nicknames starting with a forward slash / in mentions (#2146)
Improve management of Push feature
MatrixError mResourceLimitExceededError is now managed in MxDataHandler (vector-im/riot-android#2547 point 2)
Changes in Riot Android 0.8.14 (2018-08-27)
Upgrade to version 0.9.8.
Manage server quota notices (#2440)
Do not ask permission to write external storage at startup (#2483)
Update settings icon and transparent logo for notifications and navigation drawer (#2492)
URL previews are no longer requested from the server when displaying URL previews is disabled (PR #2514)
Fix some plural and puzzle strings, and remove other unused ones (#2444)
Manage System Alerts in a dedicated section
Upgrade olm-sdk.aar from version 2.2.2 to version 2.3.0
move PieFractionView from the SDK to the client (#2525)
Fix media sharing (#2530)
Fix notification sound issue in settings (#2524)
Disable app icon badge for “listen for event” notification (#2104)
Riot iOS 0.7.3
Changes in 0.7.3 (2018-08-27)
Upgrade MatrixKit version (v0.8.3).
Fix input toolbar reset in RoomViewController on MXSession state change (#2006 and #2008).
Fix user interaction disabled in master view of UISplitViewContoller when selecting a room (#2005).
Changes in 0.7.2 (2018-08-24)
Upgrade MatrixKit version (v0.8.2).
Server Quota Notices in Riot (#1937).
User defaults: the preset application language (if any) is ignored.
Recents: Avoid to open a room twice (it crashed on room creation on quick HSes).
Riot-bot: Do not try to create a room with it if the user homeserver is not federated.
There’s been lots of work debugging and optimising Lazy Loading, which is edging closer to being turned on by default. We’ve also been working away at improving E2E UX – starting with finishing key backup, and then improved verification, and then finally cross-signing (at last!)
Changes to Matrix Android SDK in 0.9.9 (2018-08-30)
Clear unreachable Url when clearing media cache (vector-im/riot-android#2479)
“In reply to” is not clickable on Riot Android yet. Make it a plain text (vector-im/riot-android#2469)
Removing room from ‘low priority’ or ‘favorite’ does not work (vector-im/riot-android#2526)
MatrixError mResourceLimitExceededError is now managed in MxDataHandler (vector-im/riot-android#2547)
MxSession constructor is now private. Please use MxSession.Builder() to create a MxSession
Changes to Matrix Android SDK in 0.9.8 (2018-08-27)
Manage server_notices tag and server quota notices (vector-im/riot-android#2440)
Room aliases including the ‘@’ and ‘=’ characters are now recognized as valid (vector-im/riot-android#2079, vector-im/riot-android#2542)
Room name and topic can be now set back to empty (vector-im/riot-android#2345)
Remove PieFractionView class from the Matrix SDK. This class is now in Riot sources (#336)
MXMediasCache.createTmpMediaFile() methods are renamed to createTmpDecryptedMediaFile()
MXMediasCache.clearTmpCache() method is renamed to clearTmpDecryptedMediaCache()
Add MXMediasCache.moveToShareFolder() to move a tmp decrypted file to another folder to prevent deletion during sharing. New API MXMediasCache.clearShareDecryptedMediaCache() can be called when the application is resumed. (vector-im/riot-android#2530)
Matrix iOS SDK
Changes in Matrix iOS SDK in 0.11.3 (2018-08-27)
MXJSONModel: Manage m.server_notice empty tag sent due to a bug server side (PR #556).
Changes in Matrix iOS SDK in 0.11.2 (2018-08-24)
MXSession: Add the supportedMatrixVersions method getting versions of the specification supported by the homeserver.
MXRestClient: Add testUserRegistration to check earlier if a username can be registered.
MXSession: Add MXSessionStateSyncError state and MXSession.syncError to manage homeserver resource quota on /sync requests (vector-im/riot-ios/issues/1937).
MXError: Add kMXErrCodeStringResourceLimitExceeded to manage homeserver resource quota (vector-im/riot-ios/issues/1937).
MXError: Define constant strings for keys and values that can be found in a Matrix JSON dictionary error.
Tests: MXHTTPClient_Private.h: Add method to set fake delay in HTTP requests.
People tab is empty in the share extension (vector-im/riot-ios/issues/1988).
MXError: MXError lost NSError.userInfo information.
Big week for Synapse: v0.33.3 was released this week. You’ll find preparation for support for Lazy Loading and Room Versioning, lots of bugfixes, and a great contribution from vojeroen: support for sending SNI over federation for vhosted servers. More complete change log here, features below:
Add support for the SNI extension to federation TLS connections. Thanks to @vojeroen! (#3439)
A large chunk of e2e has landed in the spec, largely thanks to Zil0‘s work. There are still some things left, but the main bits related to sending encrypted messages is in there. Attachments and key sharing are being reviewed today
TravisR progressed on Push, Application Services, and Client-Server APIs.
Seaglass now has support for creating, joining and leaving rooms, and accepting/rejecting room invites, redacting messages, improvements to the room settings pages, timestamps, some visual tweaks, lots of bug fixes, early support for detecting failed message sends, scrolling improvements
Lazy Loading (LL) is available on develop behind the LABS flag, and is being polished. It will probably not make it to next release, but it’s progressing!
New releases are imminent for both Android and iOS:
iOS: bug fixes and Lazy Loading in settings
Android: bug fixes, better management of permission requests at startup
Shared Secret Auth and Matrix Corporal
Slavi has been working on several operations tools for Synapse. Firstly Shared Secret Auth password provider module for Matrix Synapse.
It allows external systems (which know the shared secret) to easily obtain access tokens for any user hosted on the homeserver. This is incredibly useful for all sorts of automation (no more pre-generated access tokens or plain-text passwords).
With this tool, you can pass a mxid, and get back an access_token for that user. With this, you can do whatever actions would normally be done with a token. For example, you for a new starter at a company, you could join a set of rooms known to be needed by new starters.
Next, he has released Matrix Corporal, reconciliator and gateway for a managed Matrix server:
It’s a way to take control of Matrix (Synapse) in a corporate (or other such) environment.
Based on a configuration policy (generated by an external system, like your intranet), it can auto-create and auto-disable users, keep their profile and authentication details to date, auto-join/leave users to communities and rooms, etc.
It’s also meant to sit in front of the Matrix Synapse Client API, inspecting and allowing/denying requests, in accordance with the configuration policy (preventing people from leaving certain rooms/communities, preventing them from messing around with their profile details, etc.)
matrix-appservice-bridge and matrix-appservice-irc
Half-Shot will only be working full time with the Matrix Core team for another week (!!!), but until then he’s going full-speed with bridge work. First matrix-appservice-irc:
Just pushed out matrix-appservice-irc 0.11.0-rc3 which contains a lot of nice things. The full changelog is there, hoping to get some of this tested and running on the matrix.org servers soon, but initial testing looks good :)
Released matrix-appservice-bridge 1.6.0 which contains mostly things I was writing for the irc bridge and factored out instead. There’s a couple of goodies like automatic caching of profiles/events, and getEvent as a way to fetch events from the homeserver without fiddling with context.
Some Intent operations now cache requests that would otherwise fall through
to the homeserver which can be expensive. This is configurable for Intents
via the opts.caching.ttl and size options.
AgeCounters now allow you to set your own time period buckets.
Added a new function Intent.getEvent which will fetch events
from the homeserver without any context information, which should
be quick. MembershipCache is now exposed to let folks read and write to the cache
while also letting the bridge access it.
a release: Fix issue where roomState would fail. b release: Fix issue where we were calling this.intent inside intent like fools! c release: Fix issue where some stole js-sdk code was not checked thoroughly.
It uses the go-whatsapp library to talk with the WhatsApp Web API. Using the web API means that you’ll still need WhatsApp on your phone connected to the internet, but it also means you won’t get banned for using the bridge.
The bridge is still very alpha, but basic message bridging and some advanced features already work. There’s a features & roadmap document about that.
Thank you APWhiteHat: lots of work on dendrite, including a bunch of stuff on federation, as well as typing notifications!
and thank you to Cadair for helping to organising it!
The Construct using asynchronous disk IO
the Construct has advanced to fully asynchronous disk IO in a single-threaded environment.
RocksDB is a highly configurable and customizable database with a very large callback surface to support many different environments, which is good to connect it with something like AIO.
Normally RocksDB gets its performance from concurrent standard POSIX system calls (blocking IO) with multiple threads. The callback surface and its internals are not specifically suited for deviating from the pthread model. However I hacked RocksDB and tricked it into believing that my userspace contexts, which mimic the std::thread/pthread interface, are threads. This is an example of a RocksDB callback to read from a file, it expects this callback to return immediately (i.e as soon as the kernel returns from a blocking read(2).) Except, where I call fs::read() that is actually a stack-suspension which makes a request to linux AIO where the stack resumes after AIO has called back with the data (see: https://github.com/jevolk/charybdis/blob/master/ircd/aio.cc)
No modifications to the internals of RocksDB were necessary. The Construct is being developed here: https://github.com/jevolk/charybdis.
Community Guides Index
Some weeks ago I asked for suggestions for content to add to a “Community Guides Index”. There was not a wave of feedback, but we have enough collected content to be able to share a first pass of this Index. Check out the content there, and please please contact me if you have articles, videos or anything else you’d like to see included. Of course, if you’d like to produce some content and have it included, that would be great too! Ideas for missing articles:
any content in a language other than English
DevOps, how to use k8s or ansible to install Synapse
how to use the Application Services API to make a bot
OggCamp last weekend was great – massive thank you to Jon for organising and running the show – we love your work!
Presentations from Ben and Half-Shot seemed to go down well, we all chatted with Open Source fans and generally flew the flag for Matrix.
tulir has enough projects that he has created #:maunium.net, for any project of his that doesn’t have it’s own room
This feels like a bumper (extra big) post, so let’s get straight into it!
TravisR continues to plow through work in documenting, clarifying and confirming the spec. You can check out his project on Github: August 2018 r0, which should give an idea of both the scale of the project and the amount of work which has been done. Rather than list out individual items as I have been, please take a look at that project, and come chat in #matrix-spec:matrix.org if you’d like to contribute.
Some exciting things on Riot Web this week!
Bruno has merged his work on lazy loading room members lists, which should mean we see some big performance improvements, especially in larger rooms. You can expect to see that released on /develop soon.
He has also just started to work on the riot redesign, and has begun on some of the more visible changes like resizeable panels:
Seaglass is now a very usable and stable client on macOS. neilalexander has been very active this week:
Seaglass has had various updates, including the groundwork for joining and leaving channels, LOADS of crashes fixed, some more work done on avatars and E2E encryption has been fairly well road-tested now
Still need to complete UI for device verification and setting E2E but it works fine in existing channels
Quaternion has gained a new way to highlight mentions – with tinted background instead of colored text. Also, the majority of work on rooms grouping is done, and the current master branch features the roomlist grouped by tag (but rooms under each tag are pretty much out of order so it’s not really ready for daily use yet).
Quaternion is looking for a macOS packager – if someone has the chance to help out in this area, speak to kitsune in #QMatrixClient.
A few days back Palaver has been moved to Gitlab. And I have since released v0.2.0 and v0.2.1. A runnable jar-file of the latest release can be downloaded at https://gitlab.com/MrCustomizer/palaver/tags/v0.2.1. The biggest changes in v0.2.x are the replacement of all the web views with native JavaFX components (as I don’t feel comfortable embedding a whole browser stack in a desktop application) and support for read markers. There is a short YouTube video demonstrating the read marker implementation:
This week, work continued on Lazy Loading room members for Riot Android, and progress toward a release for 0.7.0 on iOS.
ma1uta is continuing to make progress on his Java-focused collection of APIs and SDKs, he’s eagerly awaiting the r0 release of the spec (aren’t we all!)
Jeon (https://github.com/ma1uta/jeon) (client2server and application api) has released on the Maven Central Repository with version 0.4.1. The next goal: the stable release of all apis 1.0.0 after the Matrix spec will be released (I hope it will be soon :))
Jmsdk (https://github.com/ma1uta/jmsdk) the client and bot SDK have released on the Maven Central Repository.
Gene (https://github.com/ma1uta/gene) the lightweight api for android has released on Maven Central Repository with 0.2.1 version.
So, everyone can use this libraries without additional settings and additional repositories.
Matrix-Jabber-Bridge (https://github.com/ma1uta/matrix-jabber-java-bridge) the double-pupped bridge between the Matrix and Jabber. I am still working on it and I think it will be released in a few weeks.
Ruby SDK v0.0.3
Ananace has tagged and released the next development version of the Ruby Matrix SDK – 0.0.3. He has plans to “finish up documentation and unit testing”, with the aim of making a v1.0.0 release.
No release this week, but Synapse has been progressing:
Python 3 port continues at pace, we expect to have a beta to test in monolith mode rsn (Hawkowl leads this)
Erik has been working on some federation API refactoring to make matrix.org snappier and hopes to have the new state resolution algo ready to go if not deployed late next week
Richvdh has been looking at performance, as well as spec PRs/ Next week will be r0 work
Many Synapse maintainers are also doing huge lifts on development of the spec.
Matrix support now in ntfy
Half-Shot took a rare 30-minute window away from bridge maintenance to add Matrix support to ntfy. ntfy describes itself as
A utility for sending notifications, on demand and when commands finish
but in fact, you also send notifications whenever you like by calling ntfy send from anywhere you’d normally execute shell commands. This will make it really easy to integrate Matrix notifications into any other application!
Slavi brought updates to matrix-docker-ansible-deploy:
No major changes since the release candidates last week, except a Telethon update that might have fixed history backfill.
“The End of GSOC”
Well, it may well be the end of the Julian’s GSOC 2018 experience with the Fractal project, but I think Google will continue to run the programme. Check out Julian’s experience (and the large number of issues resolved!) in this blog post.
This weekend Neil and I will be representing Matrix at OggCamp, “an unconference celebrating Free Culture, Free and Open Source Software, hardware hacking, digital rights, and all manner of collaborative cultural activities”, if you will be there, come find and chat to us. We’ll be the two nerdy-looking guys, so we should be easy to spot.
We’ll meet again…
But for now, you can watch Neil host Matrix Live below (using the fan-favourite format of walking around the office), and come chat to us in #twim:matrix.org
As part of an overhaul of the documentation surrounding Matrix, I’m planning to launch a “Community Guides Index”. This will be a page or section on Matrix.org with links to useful and informative documentation hosted elsewhere. If you have or know of informative articles, please let me know, or share them in #TWIM:matrix.org.
room settings (history/join rules and changing aliases/addresses)
loading member list in rooms
some starting work on loading avatars
various UI and stability tweaks!
Quaternion: new redacted message handling options
Many of you will have seen the incredible volumes of spam plaguing Freenode over the last few weeks. Kitsune has added new features to Quaternion to help:
In response to the recent spam deluge from Freenode Quaternion has got an option to tidy up your timeline after all the spam-cleaning: you can hide all redacted messages or just those that came from recently joined users (along with the join message). So as long as the spammer gets moderated, it can become inexistent for you.
The experimental code doing that will eventually be moved to libQMatrixClient for the benefit of Matrique, uMatriks and other clients based on the library.
This is especially cool: moving functionality to the lib for the benefit of other projects makes me very happy. :D
Big updates are on the horizon for both iOS and Android, with 0.7.0 of iOS headed to TestFlight today with a release due once it’s through beta & AppStore review. More details once the releases are out!
Meanwhile on Riot/Web, Lazy Loading members is pretty much complete – just writing end-to-end tests to ensure that encryption still works well when lazy loading is enabled. Next up is actually progressing the redesign at last!
A summary in his words: “room upgrades are implemented by creating a new room, shutting down the old one, and linking between the two”
MSC1497 thorough discussion happening against Matthew’s proposal for Capabilities support in the CS API
MSC1442 though you may have seen it previously, I recommend anyone who is able to take a look at Erik’s “State Resolution: Reloaded” proposal. This documents his “thoughts on the next iteration of the state resolution algorithm that aims to mitigate currently known attacks”. It very clearly explains the current problem, and the proposed solution. While heavy, I found it really useful for helping to understand State Res and everything it affects.
MSC1485tulir proposes “Hint buttons in messages”, which effectively provide pre-defined responses for users. This is especially valuable for Bots which can only accept a certain range of replies. I’d love to see this implemented, having long ago built a “choose your own adventure” engine using similar features from another messaging platform.
APIs and SDKs
Gene, minimalistic client-server api for Matrix
Not strictly this week, but we missed it before. ma1uta has been working away on his Java-based Matrix suite. Gene is a more lightweight API implementation than Jeon, covering all of the current C2S spec. A big motivation is to be able to use Gene on Android, which is not possible for Jeon due to it having more dependencies.
Ruby Matrix SDK
The Ruby Matrix SDK now has auto-generated, proper documentation, thanks to Ananace. v0.0.2 is the current release, but it’s under active development and v0.0.3 is expected presently.
Telegram Puppeting on t2bot.io with mautrix-telegram
This is a public trial to see how the bridge copes with multiple people puppeting their accounts. Of course, you don’t need to puppet your account unless you want to.
For more information on how to set this up, please visit https://t2bot.io/telegram
As part of this project, mautrix-telegram 0.3.0 release candidate was released.
Informo’s a project (still a work in progress, currently) that aims at bypassing censorship of information on the Internet, by basically having news items go through a decentralised and federated network made of Matrix homeservers. Since we need to host nodes to this network (at least for testing purposes), we’ve worked on a working and automated infrastructure using SaltStack, which involved hand-writing a few SaltStack states, including states handling the installation and configuration of working Synapse homeservers. In the spirit of giving back to the community, we’re publishing all of those hand-written states (available at the GH link above) under the GPLv3 license. If you want to discuss with us about what we’re doing, or this topic specifically, please join us in #discuss:weu.informo.network 🙂
The project is still pretty much a WIP and the technical specifics (even the ones we already implemented in our projects) are still under discussion and subject to changes (as mentioned in the GH repo’s readme). All I can add for sure to what we already say is that we’ll be working in partnership with NGOs to promote the project in countries where the press is heavily censored, and we’re planning on implementing a cryptographic verification chain of some sort to reduce the risk of intentional disinformation.
The release focuses on performance, notable highlights include reducing CPU consumption through speeding up state delta calculations and reducing I/O through lazily loading state on the master process
Separately work continues on our python 3 port and we hope to have something concrete to trial very soon – we’re really excited about this and expect step change improvements in CPU and memory use.
Lastest synapse is now available on Debian thanks to andrewsh.
This is not from this week at all, other than that it was new information to me. Actually it’s ancient, matrix-wise, but I think it’s interesting for those who don’t know! Although Riot doesn’t have an interface for adding custom room tags (“Favourites” and “Low Priority” come by default), Matrix supports arbitrary strings as room tags, and will display them if you add them via another CS API call. To facilitate this TravisR created a small script, tag_room.sh, which makes it very simple to set your own room tags.
That’s all folks! Remember, lots of progress is happening with the Spec, if you want to be involved or follow along the best place to start is by joining #matrix-spec:matrix.org.
No Matrix Live this week due to vacation and general scheduling fun; sorry!
If you have documentation or articles related to matrix, let me know!