Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
a248f95
Add `other.html`
awtj8o81ryywg793 Aug 16, 2026
0ccda49
Add `all_other_projects.html`
awtj8o81ryywg793 Aug 16, 2026
28aef96
Add `index.md`
awtj8o81ryywg793 Aug 16, 2026
164b104
Add `other.toml`
awtj8o81ryywg793 Aug 16, 2026
5601b7c
Display `project.maintainer` in `all_other_projects.html`
awtj8o81ryywg793 Aug 17, 2026
934cf7f
Display `project.licence` in `all_other_projects.html`
awtj8o81ryywg793 Aug 17, 2026
872b45a
Change `title` to "Miscellaneous"
awtj8o81ryywg793 Aug 18, 2026
37abfa3
Remove `all_other_projects.html`
awtj8o81ryywg793 Aug 19, 2026
35ed4a0
Add `all_miscellaneous_projects.html`
awtj8o81ryywg793 Aug 19, 2026
1ae4445
Remove `/content/ecosystem/other`
awtj8o81ryywg793 Aug 19, 2026
afa2c01
Add `index.md`
awtj8o81ryywg793 Aug 19, 2026
ed16f4b
Add `miscellaneous.toml`
awtj8o81ryywg793 Aug 19, 2026
d6925df
Remove `other.html`
awtj8o81ryywg793 Aug 19, 2026
8ec566f
Add `miscellaneous.html`
awtj8o81ryywg793 Aug 19, 2026
662f01b
Add `maturity` to `miscellaneous.toml`
awtj8o81ryywg793 Aug 21, 2026
f480960
Add `project.maturity` to `all_miscellaneous_projects.html`
awtj8o81ryywg793 Aug 21, 2026
e28bfc6
Allow `project.maturity` to be optional
awtj8o81ryywg793 Aug 29, 2026
a5ac162
Add matrirc to `miscellaneous.toml`
awtj8o81ryywg793 Aug 29, 2026
6264458
Add NeoBoard Standalone to `miscellaneous.toml`
awtj8o81ryywg793 Aug 29, 2026
30d1990
Reorder `miscellaneous.toml`
awtj8o81ryywg793 Aug 29, 2026
bbc00b5
Add "Miscellaneous Projects" section to `CONTENT.md`
awtj8o81ryywg793 Aug 29, 2026
5838517
Encode URLs using `urlencode_strict`
awtj8o81ryywg793 Aug 29, 2026
d023a97
Add `room` for NeoBoard Standalone
awtj8o81ryywg793 Aug 29, 2026
3164f81
Add support for `website` to `all_miscellaneous_projects.html`
awtj8o81ryywg793 Aug 29, 2026
da35373
Add `website` for NeoBoard Standalone
awtj8o81ryywg793 Aug 29, 2026
814d951
Add `website` for Third room
awtj8o81ryywg793 Aug 29, 2026
828e32c
Refine wording of `extra.summary`
awtj8o81ryywg793 Aug 29, 2026
adfda8a
Ensure obsolete projects are listed last
awtj8o81ryywg793 Aug 29, 2026
6dbc189
Add missing `maturity` fields
awtj8o81ryywg793 Aug 29, 2026
1068f40
Update `maturity` field wording in `CONTENT.md`
awtj8o81ryywg793 Aug 29, 2026
51e7b93
Add the missing `website` field to the example
awtj8o81ryywg793 Sep 1, 2026
e284f49
Add "Matrix Widget Toolkit" to `miscellaneous.toml`
awtj8o81ryywg793 Sep 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions CONTENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,26 @@ This page is meant to help end users find a hosting provider for their needs. Fo
"""
```

### Miscellaneous Projects

Miscellaneous projects are listed in [`/content/ecosystem/miscellaneous/miscellaneous.toml`](https://github.com/matrix-org/matrix.org/blob/main/content/ecosystem/miscellaneous/miscellaneous.toml). A miscellaneous project is simply a project that does not fit neatly into any of the pre-existing ecosystem categories.

To add a project please use this template and append it to `miscellaneous.toml`:

```toml
[[project]]
name = "Project name"
description = """
A short description about the project.
"""
maturity = "PICK Obsolete OR leave empty."
maintainer = "Your name or organisation"
licence = "PICK ONE identifier from https://spdx.org/licenses/"
repository = "https://github.com/example-org/example-repo/"
website = "https://example.org/"
room = "#your-matrix-room:example.com"
```

## Adding documentation

Matrix.org provides a place to have documentation. Documentation is required to be on topic of the Matrix Protocol itself or how to get started using the protocol.
Expand Down
10 changes: 10 additions & 0 deletions content/ecosystem/miscellaneous/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
+++
title = "Miscellaneous"
template = "ecosystem/miscellaneous.html"
weight = 7
extra.summary = """
Here you'll find projects that don't fit neatly into any other specific category.
"""
+++

{{ all_miscellaneous_projects() }}
44 changes: 44 additions & 0 deletions content/ecosystem/miscellaneous/miscellaneous.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
[[project]]
name = "matrirc"
description = """
A local IRC server that bridges to Matrix with native E2EE.
"""
maturity = ""
maintainer = "pawelb0"
licence = "GPL-3.0-or-later"
repository = "https://github.com/pawelb0/matrirc"

[[project]]
name = "NeoBoard Standalone"
description = """
A standalone collaborative whiteboard based on Matrix.
"""
maturity = ""
maintainer = "Nordeck IT + Consulting GmbH"
licence = "AGPL-3.0-or-later"
repository = "https://github.com/nordeck/matrix-neoboard-standalone"
Comment thread
awtj8o81ryywg793 marked this conversation as resolved.
Comment thread
awtj8o81ryywg793 marked this conversation as resolved.
website = "https://neoboard.io/"
room = "#nordeck:nordeck.io"

[[project]]
name = "Third room"
description = """
Open, decentralised, immersive worlds built on Matrix.
"""
maturity = "Obsolete"
maintainer = "Element Creations Ltd."
licence = "Apache-2.0"
repository = "https://github.com/matrix-org/thirdroom"
website = "https://thirdroom.io/"
room = "#thirdroom-dev:matrix.org"
Comment thread
awtj8o81ryywg793 marked this conversation as resolved.

[[project]]
name = "Matrix Widget Toolkit"
description = """
Reusable framework for creating Matrix widgets.
"""
maturity = ""
maintainer = "Nordeck IT + Consulting GmbH"
licence = "Apache-2.0"
repository = "https://github.com/nordeck/matrix-widget-toolkit"
room = "#nordeck:nordeck.io"
13 changes: 13 additions & 0 deletions templates/ecosystem/miscellaneous.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{% extends "page.html" %}
{% block content %}
<div class="page-header">
<div class="hero-block">
<h1>{{ page.title }}</h1>
<p>{{ page.extra.summary }}</p>
</div>
</div>

<div class="content other_projects_page">
{{ page.content | safe }}
</div>
{% endblock content %}
52 changes: 52 additions & 0 deletions templates/shortcodes/all_miscellaneous_projects.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{% set data = load_data(path="content/ecosystem/miscellaneous/miscellaneous.toml") %}
{% set miscellaneous_projects = data.project %}

{% set no_maturity = miscellaneous_projects
| filter(attribute="maturity", value="")
%}

{% set obsolete = miscellaneous_projects
| filter(attribute="maturity", value="Obsolete")

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should probably support case-insensitivity or normalise the value before checking it.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@awtj8o81ryywg793 awtj8o81ryywg793 Aug 30, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quoted from a previous comment:

https://github.com/Keats/tera/blob/v1/docs/content/docs/_index.md#sort ?

We could do something like:

{% set data = load_data(path="content/ecosystem/miscellaneous/miscellaneous.toml") %}
{% set miscellaneous_projects = data.project %}

{% set projects = miscellaneous_projects | sort(attribute="maturity") %}

Which currently works, in that it places projects whose maturity is either "Obsolete" or "obsolete" at the end, but it will break once we introduce more maturity levels (e.g., Stable, Beta, etc.), as it will place stable projects at the end, for example.

If I’m missing something here, please let me know.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there precedence for a similar case in our codebase? If the approach matches, I'm good with this.

%}

{% set projects = no_maturity
| concat(with=obsolete)
%}

<div class="projects-card-deck">
{% for project in projects %}
<div class="project-card">
<div class="title-row">
<h3>{{ project.name }}</h3>
{% if project.maturity %}
<div class="maturity {{ project.maturity | lower }}">{{ project.maturity }}</div>
{% endif %}
</div>
<div class="subtitle">{{ project.maintainer }}</div>
<div class="metadata-pills">
<div class="pill licence">{{ project.licence }}</div>
</div>
<p class="description">{{ project.description | markdown(inline=true) | safe }}</p>
<div class="server-links">
{% if project.website %}
<a href="{{ project.website }}">
{{ load_data(path="/assets/home.svg") | safe }}
Homepage
</a>
{% endif %}
{% if project.repository %}
<a href="{{ project.repository }}">
{{ load_data(path="/assets/projects/repo.svg") | safe }}
Repository
</a>
{% endif %}
{% if project.room %}
<a href="https://matrix.to/#/{{ project.room | urlencode_strict }}">
{{ load_data(path="/assets/projects/matrix.svg") | safe }}
Matrix Room
</a>
{% endif %}
</div>
</div>
{% endfor %}
</div>