![]() |
||
---|---|---|
.github/workflows | ||
build-scripts | ||
client | ||
config | ||
docs | ||
server | ||
shared | ||
test | ||
.eslintignore | ||
.eslintrc.json | ||
.gitignore | ||
.prettierignore | ||
.prettierrc.json | ||
CHANGELOG.md | ||
Dockerfile | ||
LICENSE.md | ||
README.md | ||
docker-health-check.js | ||
package-lock.json | ||
package.json |
README.md
Matrix Public Archive
In the vein of feature parity with
Gitter, the goal is to make a
public archive site for world_readable
Matrix rooms like Gitter's archives
which search engines can index and keep all of the content accessible/available.
Try it out: archive.matrix.org 🌌
Room directory homepage | Archive room view |
---|---|
![]() |
![]() |
Demo videos
May 2023: Introducing archive.matrix.org, the shiny new public instance of the Matrix Public Archive that everyone can share and link to.
Aug 2022 (blog post): A quick intro of what the project looks like, the goals, what it accomplishes, and how it's a new portal into the Matrix ecosystem.
Oct 2022: Showing off the room directory landing page used to browse everything available in the archive.
Technical overview
We server-side render (SSR) the Hydrogen
Matrix client on a Node.js server (since both use JavaScript) and serve pages on the fly
(with some Cloudflare caching on top) when someone requests
/archives/r/matrixhq:matrix.org/${year}/${month}/${day}
. To fetch the events for a
given day/time, we use MSC3030's
/timestamp_to_event
endpoint to jump to a given day in the timeline and fetch the
messages from a Matrix homeserver.
Re-using Hydrogen gets us pretty and native(to Element) looking styles and keeps the maintenance burden of supporting more event types in Hydrogen.
FAQ
See the FAQ page.
Setup
Prerequisites
- Node.js v18
- We need v18 because it includes
fetch
by default. Andnode-fetch
doesn't supportabortSignal.reason
yet. - We need v16 because it includes
require('crypto').webcrypto.subtle
for Matrix encryption (olm) which can't be disabled in Hydrogen yet. AndabortSignal.reason
was introduced in v16.14.0 (although we usenode-fetch
for now).
- We need v18 because it includes
- A Matrix homeserver that supports MSC3030's
/timestamp_to_event
endpoint- Synapse 1.73.0+
Get the app running
$ npm install
$ npm run build
# Edit `config/config.user-overrides.json` so that `matrixServerUrl` points to
# your homeserver and has `matrixAccessToken` defined
$ cp config/config.default.json config/config.user-overrides.json
$ npm run start
Development
# Clone and install the `matrix-public-archive` project
$ git clone git@github.com:matrix-org/matrix-public-archive.git
$ cd matrix-public-archive
$ npm install
# Edit `config/config.user-overrides.json` so that `matrixServerUrl` points to
# your homeserver and has `matrixAccessToken` defined
$ cp config/config.default.json config/config.user-overrides.json
# This will watch for changes, rebuild bundles and restart the server
$ npm run start-dev
If you want to make changes to the underlying Hydrogen SDK as well, you can locally link it into this project with the following instructions:
# We need to use a draft branch of Hydrogen to get the custom changes needed for
# `matrix-public-archive` to run. Hopefully soon, we can get all of the custom
# changes mainlined so this isn't necessary.
$ git clone git@github.com:vector-im/hydrogen-web.git
$ cd hydrogen-web
$ git checkout madlittlemods/matrix-public-archive-scratch-changes
$ yarn install
$ yarn build:sdk
$ cd target/ && npm link && cd ..
$ cd ..
$ cd matrix-public-archive
$ npm link hydrogen-view-sdk
Running tests
See the testing documentation.
Tracing
See the tracing documentation.