---
title: "Spec Change Proposals"
weight: 62
type: docs
---

If you are interested in submitting a change to the Matrix
Specification, please take note of the following guidelines.

Most changes to the Specification require a formal proposal. Bug fixes,
typos, and clarifications to existing behaviour do not need proposals -
see the [contributing
guide](https://github.com/matrix-org/matrix-spec/blob/main/CONTRIBUTING.rst)
for more information on what does and does not need a proposal.

The proposal process involves some technical writing, having it reviewed
by everyone, having the proposal being accepted, then actually having
your ideas implemented as committed changes to the [Specification
repository](https://github.com/matrix-org/matrix-spec).

Meet the [members of the Core Team](https://matrix.org/foundation), a
group of individuals tasked with ensuring the spec process is as smooth
and painless as possible. Members of the Spec Core Team will do their
best to participate in discussion, summarise when things become
long-winded, and generally try to act towards the benefit of everyone.
As a majority, team members have the ability to change the state of a
proposal, and individually have the final say in proposal discussion.

## Guiding Principles

Proposals **must** act to the greater benefit of the entire Matrix
ecosystem, rather than benefiting or privileging any single player or
subset of players -and must not contain any patent encumbered
intellectual property. Members of the Core Team pledge to act as a
neutral custodian for Matrix on behalf of the whole ecosystem.

For clarity: the Matrix ecosystem is anyone who uses the Matrix
protocol. That includes client users, server admins, client developers,
bot developers, bridge and application service developers, users and
admins who are indirectly using Matrix via 3rd party networks which
happen to be bridged, server developers, room moderators and admins,
companies/projects building products or services on Matrix, spec
contributors, translators, and those who created it in the first place.

"Greater benefit" could include maximising:

-   the number of end-users reachable on the open Matrix network
-   the number of regular users on the Matrix network (e.g. 30-day
    retained federated users)
-   the number of online servers in the open federation
-   the number of developers building on Matrix
-   the number of independent implementations which use Matrix
-   the number of bridged end-users reachable on the open Matrix network
-   the signal-to-noise ratio of the content on the open Matrix network
    (i.e. minimising spam)
-   the ability for users to discover content on their terms (empowering
    them to select what to see and what not to see)
-   the quality and utility of the Matrix spec (as defined by ease and
    ability with which a developer can implement spec-compliant clients,
    servers, bots, bridges, and other integrations without needing to
    refer to any other external material)

In addition, proposal authors are expected to uphold the following
values in their proposed changes to the Matrix protocol:

-   Supporting the whole long-term ecosystem rather than individual
    stakeholder gain
-   Openness rather than proprietary lock-in
-   Interoperability rather than fragmentation
-   Cross-platform rather than platform-specific
-   Collaboration rather than competition
-   Accessibility rather than elitism
-   Transparency rather than stealth
-   Empathy rather than contrariness
-   Pragmatism rather than perfection
-   Proof rather than conjecture

Please [see
MSC1779](https://github.com/matrix-org/matrix-spec-proposals/blob/main/proposals/1779-open-governance.md)
for full details of the project's Guiding Principles.

## Technical notes

Proposals **must** develop Matrix as a layered protocol: with new
features building on layers of shared abstractions rather than
introducing tight vertical coupling within the stack. This ensures that
new features can evolve rapidly by building on existing layers and
swapping out old features without impacting the rest of the stack or
requiring substantial upgrades to the whole ecosystem. This is critical
for Matrix to rapidly evolve and compete effectively with centralised
systems, despite being a federated protocol.

For instance, new features should be implemented using the highest layer
abstractions possible (e.g. new event types, which layer on top of the
existing room semantics, and so don't even require any API changes).
Failing that, the next recourse would be backwards-compatible changes to
the next layer down (e.g. room APIs); failing that, considering changes
to the format of events or the DAG; etc. It would be a very unusual
feature which doesn't build on the existing infrastructure provided by
the spec and instead created new primitives or low level APIs.

Backwards compatibility is very important for Matrix, but not at the
expense of hindering the protocol's evolution. Backwards incompatible
changes to endpoints are allowed when no other alternative exists, and
must be versioned under a new major release of the API. Backwards
incompatible changes to the room algorithm are also allowed when no
other alternative exists, and must be versioned under a new version of
the room algorithm.

There is sometimes a dilemma over where to include higher level
features: for instance, should video conferencing be formalised in the
spec, or should it be implemented via widgets? Should reputation systems
be specified? Should search engine behaviour be specified?

There is no universal answer to this, but the following guidelines
should be applied:

1.  If the feature would benefit the whole Matrix ecosystem and is
    aligned with the guiding principles above, then it should be
    supported by the spec.
2.  If the spec already makes the feature possible without changing any
    of the implementations and spec, then it may not need to be added to
    the spec.
3.  However, if the best user experience for a feature does require
    custom implementation behaviour then the behaviour should be defined
    in the spec such that all implementations may implement it.
4.  However, the spec must never add dependencies on
    unspecified/nonstandardised 3rd party behaviour.

As a worked example:

1.  Video conferencing is clearly a feature which would benefit the
    whole ecosystem, and so the spec should find a way to make it
    happen.
2.  Video conferencing can be achieved by widgets without requiring any
    compulsory changes to clients nor servers to work, and so could be
    omitted from the spec.
3.  A better experience could be achieved by embedding Jitsi natively
    into clients rather than using a widget...
4.  ...except that would add a dependency on unspecified/nonstandardised
    3rd party behaviour, so must not be added to the spec.

Therefore, our two options in the specific case of video conferencing
are either to spec SFU conferencing semantics for WebRTC (or refer to an
existing spec for doing so), or to keep it as a widget-based approach
(optionally with widget extensions specific for more deeply integrating
video conferencing use cases).

As an alternative example: it's very unlikely that "how to visualise
Magnetic Resonance Imaging data over Matrix" would ever be added to the
Matrix spec (other than perhaps a custom event type in a wider
standardised Matrix event registry) given that the spec's existing
primitives of file transfer and extensible events (MSC1767) give
excellent tools for transferring and visualising arbitrary rich data.

Supporting public search engines are likely to not require custom spec
features (other than possibly better bulk access APIs), given they can
be implemented as clients using the existing CS API. An exception could
be API features required by decentralised search infrastructure
(avoiding centralisation of power by a centralised search engine).

Features such as reactions, threaded messages, editable messages,
spam/abuse/content filtering (and reputation systems), are all features
which would clearly benefit the whole Matrix ecosystem, and cannot be
implemented in an interoperable way using the current spec; so they
necessitate a spec change.

## Process

The process for submitting a Matrix Spec Change (MSC) Proposal in detail
is as follows:

-   Create a first draft of your proposal using [GitHub-flavored
    Markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/)
    -   In the document, clearly state the problem being solved, and the
        possible solutions being proposed for solving it and their
        respective trade-offs.
    -   Proposal documents are intended to be as lightweight and
        flexible as the author desires; there is no formal template; the
        intention is to iterate as quickly as possible to get to a good
        design.
    -   However, a [template with suggested
        headers](https://github.com/matrix-org/matrix-spec-proposals/blob/main/proposals/0000-proposal-template.md)
        is available to get you started if necessary.
    -   Take care in creating your proposal. Specify your intended
        changes, and give reasoning to back them up. Changes without
        justification will likely be poorly received by the community.
    -   At the time of creating your draft you will not yet know the PR number, so you
        should use a placeholder number to name your file and edit that
        after PR submission. The suggested steps are described in
        detail [in the proposals guide](https://github.com/matrix-org/matrix-spec-proposals#1-writing-the-proposal).
-   Fork and make a PR to the
    [matrix-spec-proposals](https://github.com/matrix-org/matrix-spec-proposals) repository.
    The ID of your PR will become the MSC ID for the lifetime of your
    proposal.
    -   The proposal must live in the `proposals/` directory with a
        filename that follows the format `1234-my-new-proposal.md` where
        `1234` is the MSC ID.
    -   Your PR description must include a link to the rendered Markdown
        document and a summary of the proposal.
    -   It is often very helpful to link any related MSCs or [matrix-spec
        issues](https://github.com/matrix-org/matrix-spec/issues) to give
        context for the proposal.
    -   Additionally, please be sure to sign off your proposal PR as per
        the guidelines listed on
        [CONTRIBUTING.rst](https://github.com/matrix-org/matrix-spec/blob/main/CONTRIBUTING.rst).
-   Gather feedback as widely as possible.
    -   The aim is to get maximum consensus towards an optimal solution.
        Sometimes trade-offs are required to meet this goal. Decisions
        should be made to the benefit of all major use cases.
    -   A good place to ask for feedback on a specific proposal is
        [\#matrix-spec:matrix.org](https://matrix.to/#/#matrix-spec:matrix.org).
        If preferred, an alternative room can be created and advertised
        in \#matrix-spec:matrix.org. Please also link to the room in
        your PR description.
    -   For additional discussion areas, know that
        \#matrix-dev:matrix.org is for developers using existing Matrix
        APIs, \#matrix:matrix.org is for users trying to run Matrix apps
        (clients & servers) and \#matrix-architecture:matrix.org is for
        cross-cutting discussion of Matrix's architectural design.
    -   The point of the spec proposal process is to be collaborative
        rather than competitive, and to try to solve the problem in
        question with the optimal set of trade-offs. The author should
        neutrally gather the various viewpoints and get consensus, but
        this can sometimes be time-consuming (or the author may be
        biased), in which case an impartial 'shepherd' can be assigned
        to help guide the proposal through this process instead. A
        shepherd is typically a neutral party from the Spec Core Team or
        an experienced member of the community. There is no formal
        process for assignment. Simply ask for a shepherd to help get
        your proposal through and one will be assigned based on
        availability. Having a shepherd is not a requirement for
        proposal acceptance.
-   Members of the Spec Core Team and community will review and discuss
    the PR in the comments and in relevant rooms on Matrix. Discussion
    outside of GitHub should be summarised in a comment on the PR.
-   When a member of the Spec Core Team believes that no new discussion
    points are being made, and the proposal has suitable evidence of
    working (see [implementing a proposal](#implementing-a-proposal)
    below), they will propose a motion for a final comment period (FCP),
    along with a *disposition* of either merge, close or postpone. This
    FCP is provided to allow a short period of time for any invested
    party to provide a final objection before a major decision is made.
    If sufficient reasoning is given, an FCP can be cancelled. It is
    often preceded by a comment summarising the current state of the
    discussion, along with reasoning for its occurrence.
-   A concern can be raised by a Spec Core Team member at any time,
    which will block an FCP from beginning. An FCP will only begin when
    75% of the members of the Spec Core Team agree on its outcome, and
    all existing concerns have been resolved.
-   The FCP will then begin and last for 5 days, giving anyone else some
    time to speak up before it concludes. If sufficient reasoning
    against the disposition is provided, a member of the Spec Core Team can
    raise a concern and block FCP from completing. This will not reset or
    pause the 5 day FCP timer, but FCP will not conclude until all concerns have
    been resolved. If sufficient change in the MSC is required to resolve those
    concerns, FCP might be cancelled and reproposed. Once FCP has concluded,
    the disposition of the FCP will be carried out.
-   Once the proposal has been accepted and merged, it is time to submit
    the actual change to the Specification that your proposal reasoned
    about. This is known as a spec PR. However in order for the spec PR
    to be accepted, an implementation **must** be shown to prove that it
    works well in practice. A link to the implementation should be
    included in the PR description. In addition, any significant
    unforeseen changes to the original idea found during this process
    will warrant another MSC. Any minor, non-fundamental changes are
    allowed but **must** be documented in the original proposal
    document. This ensures that someone reading a proposal in the future
    doesn't assume old information that wasn't merged into the spec.
    -   Similar to the proposal PR, please sign off the spec PR as per
        the guidelines on
        [CONTRIBUTING.rst](https://github.com/matrix-org/matrix-spec/blob/main/CONTRIBUTING.rst).
-   Your PR will then be reviewed and hopefully merged on the grounds it
    is implemented sufficiently. If so, then give yourself a pat on the
    back knowing you've contributed to the Matrix protocol for the
    benefit of users and developers alike :)

The process for handling proposals is shown visually in the following
diagram. Note that the lifetime of a proposal is tracked through the
corresponding labels for each stage on the
[matrix-spec-proposals](https://github.com/matrix-org/matrix-spec-proposals)
pull request trackers.

```nohighlight
                           +                          +
         Proposals         |          Spec PRs        |  Additional States
         +-------+         |          +------+        |  +---------------+
                           |                          |
 +----------------------+  |         +---------+      |    +-----------+
 |                      |  |         |         |      |    |           |
 |      Proposal        |  |  +------= Spec PR |      |    | Postponed |
 | Drafting and Initial |  |  |      | Missing |      |    |           |
 |  Feedback Gathering  |  |  |      |         |      |    +-----------+
 |                      |  |  |      +----+----+      |
 +----------+-----------+  |  |           |           |    +----------+
            |              |  |           v           |    |          |
            v              |  |  +-----------------+  |    |  Closed  |
  +-------------------+    |  |  |                 |  |    |          |
  |                   |    |  |  | Spec PR Created |  |    +----------+
  |    Proposal PR    |    |  |  |  and In Review  |  |
  |     In Review     |    |  |  |                 |  |
  |                   |    |  |  +--------+--------+  |
  +---------+---------+    |  |           |           |
            |              |  |           v           |
            v              |  |     +-----------+     |
 +----------------------+  |  |     |           |     |
 |                      |  |  |     |  Spec PR  |     |
 |    Proposed Final    |  |  |     |  Merged!  |     |
 |    Comment Period    |  |  |     |           |     |
 |                      |  |  |     +-----------+     |
 +----------+-----------+  |  |                       |
            |              |  |                       |
            v              |  |                       |
 +----------------------+  |  |                       |
 |                      |  |  |                       |
 | Final Comment Period |  |  |                       |
 |                      |  |  |                       |
 +----------+-----------+  |  |                       |
            |              |  |                       |
            v              |  |                       |
 +----------------------+  |  |                       |
 |                      |  |  |                       |
 | Final Comment Period |  |  |                       |
 |       Complete       |  |  |                       |
 |                      |  |  |                       |
 +----------+-----------+  |  |                       |
            |              |  |                       |
            +-----------------+                       |
                           |                          |
                           +                          +
```

## Lifetime States

**Note:** All labels are to be placed on the proposal PR.

| Name                            | GitHub Label                    | Description                                                                                                                                                                                                                          |
|---------------------------------|---------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Proposal Drafting and Feedback  | [Draft pull request](https://github.com/matrix-org/matrix-spec-proposals/issues?q=is:open+draft:true)                                                                 | A proposal document which is still work-in-progress but is being shared to incorporate feedback. Please prefix your proposal's title with `[WIP]` to make it easier for reviewers to skim their notifications list. |
| Proposal In Review              | [No label](https://github.com/matrix-org/matrix-spec-proposals/issues?q=draft:false+label%3Aproposal+-label%3Aabandoned+-label%3Afinal-comment-period+-label%3Afinished-final-comment-period+-label%3Amerged+-label%3Aobsolete+-label%3Aproposal-postponed+-label%3Aproposed-final-comment-period+-label%3Aproposal-in-review+-label%3Aspec-pr-in-review+-label%3Aspec-pr-missing) | A proposal document which is now ready and waiting for review by the Spec Core Team and community                       |
| Proposed Final Comment Period   | [proposed-final-comment-period](https://github.com/matrix-org/matrix-spec-proposals/issues?q=draft:false+label%3Aproposal+label%3Aproposed-final-comment-period+)   | Currently awaiting signoff of a 75% majority of team members in order to enter the final comment period                 |
| Final Comment Period            | [final-comment-period](https://github.com/matrix-org/matrix-spec-proposals/issues?q=draft:false+label%3Aproposal+label%3Afinal-comment-period+)                     | A proposal document which has reached final comment period either for merge, closure or postponement                    |
| Final Comment Period Complete   | [finished-final-comment-period](https://github.com/matrix-org/matrix-spec-proposals/issues?q=draft:false+label%3Aproposal+label%3Afinished-final-comment-period+)   | The final comment period has been completed. Waiting for a demonstration implementation                                 |
| Spec PR Missing                 | [spec-pr-missing](https://github.com/matrix-org/matrix-spec-proposals/issues?q=draft:false+label%3Aproposal+label%3Aspec-pr-missing)                                | The proposal has been agreed, and proven with a demonstration implementation. Waiting for a PR against the Spec         |
| Spec PR In Review               | [spec-pr-in-review](https://github.com/matrix-org/matrix-spec-proposals/issues?q=draft:false+label%3Aproposal+label%3Aspec-pr-in-review+)                           | The spec PR has been written, and is currently under review                                                             |
| Spec PR Merged                  | [merged](https://github.com/matrix-org/matrix-spec-proposals/issues?q=draft:false+label%3Aproposal+label%3Amerged)                                                  | A proposal with a sufficient working implementation and whose Spec PR has been merged!                                  |
| Postponed                       | [proposal-postponed](https://github.com/matrix-org/matrix-spec-proposals/issues?q=draft:false+label%3Aproposal+label%3Aproposal-postponed+)                         | A proposal that is temporarily blocked or a feature that may not be useful currently but perhaps sometime in the future |
| Abandoned                       | [abandoned](https://github.com/matrix-org/matrix-spec-proposals/issues?q=draft:false+label%3Aproposal+label%3Aabandoned)                                      | A proposal where the author/shepherd is not responsive                                                                  |
| Obsolete                        | [obsolete](https://github.com/matrix-org/matrix-spec-proposals/issues?q=draft:false+label%3Aproposal+label%3Aobsolete+)                                             | A proposal which has been made obsolete by another proposal or decision elsewhere.                                      |

## Categories

We use category labels on MSCs to place them into a track of work. The
Spec Core Team decides which of the tracks they are focusing on for the
next while and generally makes an effort to pull MSCs out of that
category when possible.

The current categories are:

| Name        | GitHub Label     | Description                           |
|-------------|------------------|---------------------------------------|
| Core        | kind:core        | Important for the protocol's success. |
| Feature     | kind:feature     | Nice to have additions to the spec.   |
| Maintenance | kind:maintenance | Fixes or clarifies existing spec.     |

Some examples of core MSCs would be aggregations, cross-signing, and
groups/communities. These are the sorts of things that if not
implemented could cause the protocol to fail or become second-class.
Features would be areas like enhanced media APIs, new transports, and
bookmarks in comparison. Finally, maintenance MSCs would include
improving error codes, clarifying what is required of an API, and adding
properties to an API which makes it easier to use.

The Spec Core Team assigns a category to each MSC based on the
descriptions above. This can mean that new MSCs get categorized into an
area the team isn't focused on, though that can always change as
priorities evolve. We still encourage that MSCs be opened, even if not
the focus for the time being, as they can still make progress and even
be merged without the Spec Core Team focusing on them specifically.

## Implementing a proposal

As part of the proposal process the Spec Core Team will require evidence
of the MSC working in order for it to move into FCP. This can usually be
a branch/pull request to whichever implementation of choice that proves
the MSC works in practice, though in some cases the MSC itself will be
small enough to be considered proven. Implementations do not need to be
merged or released, but must be of sufficient quality to show that the
MSC works. Where it's unclear if an MSC will require an implementation
proof, ask in [\#matrix-spec:matrix.org](https://matrix.to/#/#matrix-spec:matrix.org).
Proposals may require both server-side and client-side implementations.

Proposals that have not yet been implemented will have the
`needs-implementation` label. After an implementation has been made, add a
comment in the GitHub issue indicating so. After an implementation has been
made, we will check it to verify that it implements the MSC. Proposals that
have implementations that have not yet been checked will have the
`implementation-needs-checking` label.

### Early release of an MSC/idea

To help facilitate early releases of software dependent on a spec
release, implementations are required to use the following process to
ensure that the official Matrix namespace is not cluttered with
development or testing data.

**Note:** Unreleased implementations (including proofs-of-concept demonstrating
that a particular MSC works) do not have to follow this process.

1.  Have an idea for a feature.
1.  Implement the feature using [unstable endpoints, vendor prefixes, and
    unstable feature flags](#unstable-endpoints-features-and-vendor-prefixes)
    as appropriate.
1.  In parallel, or ahead of implementation, open an MSC and solicit
    review per above.
1.  Before FCP can be called, the Spec Core Team will require evidence
    of the MSC working as proposed. A typical example of this is an
    implementation of the MSC, though the implementation does not need
    to be shipped anywhere and can therefore avoid the
    forwards/backwards compatibility concerns mentioned here.
1.  The FCP process is completed, and assuming nothing is flagged the
    MSC lands.
1.  Implementations can now switch to using stable prefixes, assuming that the change
    is backwards compatible with older implementations. In the rare occasion
    where backwards compatibility is not possible without a new spec release,
    implementations should continue to use unstable prefixes.
1.  A spec PR is written to incorporate the changes into Matrix.
1.  A spec release happens.
1.  A transition period of about 2 months starts immediately after the
    spec release, before implementations start to encourage other
    implementations to switch to stable endpoints. For example, a server
    implementation should start asking client implementations to support
    the stable endpoints 2 months after the spec release, if they
    haven't already. The same applies in the reverse: if clients cannot
    switch to stable prefixes because server implementations haven't
    started supporting the new spec release, some noise should be raised
    in the general direction of the implementation.

In summary:

-   Implementations MUST NOT use stable endpoints before the MSC has
    completed FCP. Once that has occurred, implementations are allowed
    to use stable endpoints, but are not required to.
-   Implementations are able to ship features that are exposed to users
    by default before an MSC has been merged to the spec, provided they
    follow the process above.
-   Implementations SHOULD be wary of the technical debt they are
    incurring by moving faster than the spec.
-   The vendor prefix is chosen by the developer of the feature, using
    the Java package naming convention.
-   The vendor prefixes, unstable feature flags, and unstable endpoints
    should be included in the MSC, though the MSC MUST be written in a
    way that proposes new stable endpoints. Typically this is solved by
    a small table at the bottom mapping the various values from stable
    to unstable.

#### Unstable endpoints, features and vendor prefixes

Unstable endpoints MUST use `/unstable` as the endpoint version and a
vendor prefix in Java package naming format. For example:
`/_matrix/client/unstable/com.example.mscxxxx/login`.

{{% boxes/note %}}
Proposal authors operating with a Matrix.org Foundation mandate SHOULD use
a vendor prefix within the `org.matrix` namespace. This namespace is otherwise
restricted. Authors who don't own a domain MAY use the `io.github` namespace
instead.
{{% /boxes/note %}}

Note that unstable namespaces do not automatically inherit endpoints from
stable namespaces: for example, the fact that `/_matrix/client/v3/sync`
exists does not imply that `/_matrix/client/unstable/com.example.mscxxxx/sync`
exists.

Vendor prefixes MUST also be used for:

-   New parameters on existing endpoints. For example:
    `/_matrix/client/v3/publicRooms?com.example.mscxxxx.ordered_by=member_count`.
-   New properties in existing JSON objects. For example:

    ```json
    {
      "avatar_url": "mxc://matrix.org/SDGdghriugerRg",
      "displayname": "Alice Margatroid",
      "com.example.mscxxxx.phone": [{
        "type": "landline",
        "number": "+1-206-555-7000"
      }],
      ...
    }
    ```

-   New values for existing parameters or properties. For example:

    ```json
    {
      "errcode": "COM.EXAMPLE.MSCXXXX.M_INVALID_EMAIL",
      "error": "The email address you provided is invalid."
    }
    ```

If the client needs to be sure the server supports the feature, an
unstable feature flag that MUST also be vendor prefixed is to be used.
This flag shows up in the `unstable_features` section of
[`/_matrix/client/versions`](/client-server-api/#get_matrixclientversions)
as, for example, `com.example.mscxxxx.new_login`.

{{% boxes/note %}}
MSCs MUST still describe what the stable endpoints/feature looks like
with a note towards the bottom for what the unstable feature
flag/prefixes are. For example, an MSC would propose `/_matrix/client/v1/new/endpoint`,
not `/_matrix/client/unstable/com.example.mscxxxx/new/endpoint`.
{{% /boxes/note %}}

When using this approach correctly, the implementation can release
the feature at any time, so long as the implementation is able to
accept the technical debt that results from needing to provide
adequate backwards and forwards compatibility. The implementation
MUST support the flag (and server-side implementation) disappearing
and be generally safe for users. Note that implementations early in
the MSC review process may also be required to provide backwards
compatibility with earlier editions of the proposal.

If the implementation cannot support the technical debt (or if it's
impossible to provide forwards/backwards compatibility - e.g. a user
authentication change which can't be safely rolled back), the
implementation should not attempt to implement the feature and should
instead wait for a spec release.

If at any point after early release, the idea changes in a
backwards-incompatible way, the feature flag should also change so
that implementations can adapt as needed.

### Placeholder MSCs

Some proposals may contain security-sensitive or private context which can't be
publicly disclosed until a later stage in the idea or solution process. Typically,
the initial idea is validated using some amount of implementation or experimentation
and may require an MSC number to make that implementation easier.

Placeholder MSCs are used to represent proposals in a state where implementation
is ongoing, but the MSC details can't yet be disclosed. Authors which feel as
though their MSC could be highly sensitive MUST get in contact with the Spec Core
Team or [Security Team](https://matrix.org/security-disclosure-policy/) prior to
opening their MSC. If either team determines that a placeholder MSC is required,
it may be opened as such.

There are a few expectations attached to placeholder MSCs:

* They have a title which marks them WIP, and are in the "draft" state.
* They have the following labels: `[proposal-placeholder, action-required, needs-implementation]`.
  * Notably, *not* `proposal`.
* They are relatively short-lived (ideally less than 6-12 months in placeholder).
* They propose solutions which are reasonably likely to be accepted. If a placeholder
  needs to be closed because the idea won't work, isn't needed, etc, then the MSC's
  content MUST be published ahead of that closure.
  * Note: the MSC's publication (and therefore closure) may be delayed until an
    appropriate point in the security disclosure cycle. For example, an alternative
    MSC being published, or a stream of work being completed.
* When they are updated to receive real content, the following happens:
  1. The Spec Core Team or the author leaves a comment to cause a notification
     that the MSC has been replaced with real content.
  2. The `proposal` label (or its equivalent) is added to trigger chat notifications
     in the public Matrix rooms. The `proposal-placeholder` and `action-required`
     labels should be removed at this stage as well. Other labels are removed/applied
     per normal process.
* The Spec Core Team is aware of the intended MSC's title and purpose. This is
  especially important if the Security Team approved the use of a placeholder MSC.

## Proposal Tracking

This is a living document generated from the list of proposals on the
issue and pull request trackers of the
[matrix-spec-proposals](https://github.com/matrix-org/matrix-spec-proposals) repo.

We use labels and some metadata in MSC PR descriptions to generate this
page. Labels are assigned by the Spec Core Team whilst triaging the
proposals based on those which exist in the
[matrix-spec-proposals](https://github.com/matrix-org/matrix-spec-proposals) repo already.

It is worth mentioning that a previous version of the MSC process used a
mixture of GitHub issues and PRs, leading to some MSC numbers deriving
from GitHub issue IDs instead. A useful feature of GitHub is that it
does automatically resolve to an issue, if an issue ID is placed in a
pull URL. This means that
<https://github.com/matrix-org/matrix-spec-proposals/pull/$MSCID> will correctly
resolve to the desired MSC, whether it started as an issue or a PR.

Other metadata:

-   The MSC number is taken from the GitHub Pull Request ID. This is
    carried for the lifetime of the proposal. These IDs do not necessarily
    represent a chronological order.
-   The GitHub PR title will act as the MSC's title.
-   Please link to the spec PR (if any) by adding a "PRs: \#1234" line
    in the issue description.
-   The creation date is taken from the GitHub PR, but can be overridden
    by adding a "Date: yyyy-mm-dd" line in the PR description.
-   Updated Date is taken from GitHub.
-   Author is the creator of the MSC PR, but can be overridden by adding
    a "Author: @username" line in the body of the issue description.
    Please make sure @username is a GitHub user (include the @!)
-   A shepherd can be assigned by adding a "Shepherd: @username" line in
    the issue description. Again, make sure this is a real GitHub user.

{{% proposal-tables %}}
