Go to file
Bruno Windels 224d56698a only set new live key when creating a fragment after the txn succeeds
when doing a limited sync, and a new fragment is created,
this._lastLiveKey is updated immediately. If the transaction
would then fail, the fragmentId in this._lastLiveKey was incremented
but the fragment wasn't written to the store, so if sync is resumed
and would subsequently succeed, fragmentIds would be assigned to events
that don't have a corresponding fragment in the timelineFragment store.

This would throw errors when trying to load the timeline,
breaking the whole app.

This changes SyncWriter to only update this._lastLiveKey in
the emit phase, when the transactions has been committed already.
2020-01-04 20:06:49 +01:00
doc wrote docs about how to do invites and e2ee 2019-10-23 09:42:44 +02:00
prototypes prototypes for lumia idb changes (removing array keys, etc ...) 2019-06-26 22:19:40 +02:00
scripts do non-debug build by default 2019-11-22 08:55:30 +01:00
src only set new live key when creating a fragment after the txn succeeds 2020-01-04 20:06:49 +01:00
.editorconfig wip 2019-02-17 23:58:01 +01:00
.eslintrc.js its syncing, sort off 2019-02-10 21:25:46 +01:00
.gitignore ignore folders to store exports 2019-12-23 14:29:05 +01:00
icon.png add offline availability with service worker and appcache 2019-09-15 14:32:12 +02:00
index.html add offline availability with service worker and appcache 2019-09-15 14:32:12 +02:00
package-lock.json rename morpheus to brawl 2019-06-14 23:58:39 +02:00
package.json bump version 2019-12-14 18:32:30 +01:00
README.md add link to deployment 2019-11-22 09:01:57 +01:00
yarn.lock basic build script with js and css bundling 2019-09-15 09:14:20 +02:00

Brawl

A minimal Matrix chat client, focused on performance, offline functionality and working on my Lumia 950 Windows Phone.

Status

Brawl can currently log you in, or pick an existing session, sync already joined rooms, fill gaps in the timeline, and send text messages. Everything is stored locally.

Showing multiple sessions, and sending messages

Why

I started writing Brawl both to have a functional matrix client on my aging phone, and to play around with some ideas I had how to use indexeddb optimally in a matrix client.

For every interaction or network response (syncing, filling a gap), Brawl starts a transaction in indexedb, and only commits it once everything went well. This helps to keep your storage always in a consistent state. As little data is kept in memory as well, and while scrolling in the above GIF, everything is loaded straight from the storage.

If you find this interesting, feel free to reach me at @bwindels:matrix.org.

How to use

You can try Brawl here, or try it locally by running yarn install (only the first time) and yarn start in the terminal, and point your browser to http://localhost:3000.