sync-v3
Run an experimental sync v3 server using an existing Matrix account. This is possible because, for the most part,
v3 sync is a strict subset of v2 sync.
An implementation of MSC3575.
Proxy version to MSC API specification:
- Version 0.1.x: 2022/04/01
- Version 0.2.x: 2022/06/09
- Reworked where lists and ops are situated in the response JSON. Added new filters like
room_name_like
. Added slow_get_all_rooms
. Standardised on env vars for configuring the proxy. Persist access tokens, encrypted with SYNCV3_SECRET
.
- Version 0.3.x: 2022/08/05
- Spaces support,
txn_id
support.
- Version 0.4.x 2022/08/23
- Support for
tags
and not_tags
.
- Version 0.5.x 2022/10/04
- Support for
joined_count
and invited_count
.
- No support for
resolve_tombstones
.
- Version 0.6.x 2022/10/24
- Support for
by_notification_level
and include_old_rooms
.
- Version 0.7.x 2022/10/31
- Support for
$ME
and $LAZY
.
- v0.7.1+ : support for
errcode
when sessions expire.
- v0.7.2+ : support for
typing
extension.
- v0.7.3+ : support for
receipts
extension.
Usage
Requires Postgres 13+.
$ createdb syncv3
$ echo -n "$(openssl rand -hex 32)" > .secret # this MUST remain the same throughout the lifetime of the database created above.
$ go build ./cmd/syncv3
$ SYNCV3_SECRET=$(cat .secret) SYNCV3_SERVER="https://matrix-client.matrix.org" SYNCV3_DB="user=$(whoami) dbname=syncv3 sslmode=disable" SYNCV3_BINDADDR=0.0.0.0:8008 ./syncv3
Then visit http://localhost:8008/client/ (with trailing slash) and paste in the access_token
for any account on -server
.
When you hit the Sync button nothing will happen initially, but you should see:
INF Poller: v2 poll loop started ip=::1 since= user_id=@kegan:matrix.org
Wait for the first initial v2 sync to be processed (this can take minutes!) and then v3 APIs will be responsive.
Helm
You need a postgres instance. If you have one already, skip this. Else:
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install psql bitnami/postgresql
Then create a YAML file:
# values.yml
databaseHost: "psql-postgresql.myproxy.svc.cluster.local"
databasePasswordSecretName: "psql-postgresql"
databasePasswordSecretKey: "postgres-password"
databaseUser: "postgres"
databaseName: "postgres"
targetHomeserver: "https://myhomeserver.example"
ingress:
annotateFor: "nginx"
hostName: "myproxy.test"
To install via Helm:
$ helm repo add sliding-sync https://matrix-org.github.io/sliding-sync/
$ helm install myproxy -f values.yml sliding-sync/sliding-sync
How can I help?
At present, the best way to help would be to run a local v3 server pointed at a busy account and just leave it and a client running in the background. Look at it occasionally and submit any issues you notice. You can save console logs by right-clicking -> Save As.
Please run the server with SYNCV3_DEBUG=1
set. This will force the server to panic when assertions fail rather than just log them.