CI / Test (ubuntu-latest) (push) Canceled after 0s
CI / Test (windows-latest) (push) Canceled after 0s
CI / Storage tests on PostgreSQL (push) Canceled after 0s
CI / Complement (federation off) (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
CI / Smoke test the binary (push) Canceled after 0s
POST /keys/query for a remote user who shares a room with a local user is
now answered from a cache, fetched whole with GET /user/devices/{userId}
on a miss. Incoming m.device_list_update EDUs are applied when their
prev_id matches the cached stream_id; anything else marks the copy stale
and it is fetched again in the background, and a stale copy is never
served. m.signing_key_update replaces the cached cross-signing keys. A
user's copy is dropped once no local user shares a room with them, by a
keyserver listener on the roomserver's emit stage.
Migration 0009 adds keyserver_remote_users, keyserver_remote_device_keys
and keyserver_remote_cross_signing_keys for sqlite and postgres.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Documentation
| Document | What |
|---|---|
| configuration.md | every setting, and its environment variable |
| development.md | building, testing, Complement, adding a migration |
| event-core.md | internal/matrix: canonical JSON, events, auth rules, state resolution |
| rooms.md | internal/roomserver: the input pipeline, room storage, known gaps |
| sync.md | internal/syncapi: stream tokens, long polling, filters, the ephemeral streams |
| federation.md | the Server-Server API: discovery, keys, taking in events, joins across servers, the outbound queue, the switch |
| media.md | internal/mediaapi: uploads, downloads, thumbnails, other servers' media, where the files go |
| e2ee.md | internal/keyserver: device and one-time keys, cross-signing, device list tracking, key backup |
| admin-api.md | /_warp/admin/v1: the operator API behind the admin panel |
The design and roadmap are in PLAN.md at the repository root.