View the history of public and world readable Matrix rooms
Go to file
Eric Eastwood 17a39ab8db
Add preload link headers for downstream Cloudflare early hints (#171)
Because it takes us at best several seconds to request information from a homeserver and then server-side render the page, the browser has to wait for the response before it can even try loading the necessary assets. With this change that facilitates early hints, the browser can preload all of the assets necessary before we are done generating the response and will be ready to go by the time we're all done on the server.

Fix https://github.com/matrix-org/matrix-public-archive/issues/32

Part of https://github.com/matrix-org/matrix-public-archive/issues/132

See https://developers.cloudflare.com/cache/about/early-hints/ for information on enabling in Cloudflare
2023-04-19 14:20:01 -05:00
.github/workflows Add linting to CI (#74) 2022-09-27 22:21:00 -05:00
build-scripts Rename to build-scripts to it appears in GitHub file finder (#166) 2023-04-07 13:17:46 -05:00
config Update docs to reflect that we need stable MSC3030 /timstamp_to_event (#159) 2023-02-17 02:35:23 -06:00
public Add a way to select time of day (#139) 2023-04-05 04:25:31 -05:00
server Add preload link headers for downstream Cloudflare early hints (#171) 2023-04-19 14:20:01 -05:00
shared Follow tombstone and predecessor history (#167) 2023-04-19 01:26:15 -05:00
test Follow tombstone and predecessor history (#167) 2023-04-19 01:26:15 -05:00
.eslintignore Fix lints 2022-02-15 21:33:31 -06:00
.eslintrc.json Update linting so we don't need omit the context filling name of some variables (#165) 2023-04-07 13:01:20 -05:00
.gitignore E2E test but still failing because fetching from start of day before test events happened 2022-02-23 21:25:05 -06:00
.prettierignore Add linting to CI (#74) 2022-09-27 22:21:00 -05:00
.prettierrc.json SSR with linkedom 2022-02-03 23:44:50 -06:00
Dockerfile Rename to build-scripts to it appears in GitHub file finder (#166) 2023-04-07 13:17:46 -05:00
LICENSE.md Add Apache 2.0 license (#55) 2022-08-30 18:35:36 -05:00
README.md Update docs to reflect that we need stable MSC3030 /timstamp_to_event (#159) 2023-02-17 02:35:23 -06:00
docker-health-check.js Make sure container is able to start up (#23) 2022-06-15 17:12:44 -05:00
package-lock.json Follow tombstone and predecessor history (#167) 2023-04-19 01:26:15 -05:00
package.json Follow tombstone and predecessor history (#167) 2023-04-19 01:26:15 -05:00

README.md

Matrix Public Archive

Join the community and get support at #matrix-public-archive:matrix.org

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. There is already https://view.matrix.org/ (https://github.com/matrix-org/matrix-static) but there is some desire to make something with more Element-feeling polish and loading faster (avoid the slow 502's errors that are frequent on view.matrix.org).

Demo videos

  • 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.

Setup

Prerequisites

Get the app running

$ 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

$ npm run start
# To enable tracing, add the `--tracing` flag
$ npm run start -- --tracing

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
# To enable tracing, add the `--tracing` flag
$ npm run start-dev -- --tracing

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 readme.