This repository contains Murm Improvement Proposals (MIPs), the protocol documents for the Murm Protocol.
murm is a local-first protocol for signed notes, public posts, and pseudonymous publishing. Identity is based on cryptographic key pairs: a public key identifies an author, and a private key signs events. Relays store and distribute signed events, but they do not own user identity, passwords, or sessions.
The core unit of the Murm Protocol is an Event.
type Event = {
id: string
pubkey: string
created_at: number
kind: number
tags: string[][]
content: string
sig: string
}At a high level:
ididentifies the exact event payload.pubkeyidentifies the author.sigproves that the author signed the event.kinddefines how clients interpret the event.tagscarry structured references and indexable metadata.contentcarries the main event body.
- Local-first: clients can create, sign, store, and later sync events.
- Signed events: relays validate events, but do not authenticate users by login.
| MIP | Title | Status | Summary |
|---|---|---|---|
| MIP-01 | event format |
draft |
Defines the base event object and structural validation rules. |
| MIP-02 | signatures |
draft |
Defines canonical payloads, SHA-256 event ids, and Ed25519 signatures. |
| MIP-03 | relay interface |
draft |
Defines relay operations: submit, fetch, and scan. |
| MIP-04 | event kinds |
draft |
Defines initial event kinds: profile, post, comment, and reaction. |
| MIP-05 | relay compatibility |
draft |
Defines the minimum relay behavior required for core compatibility. |
Start with:
- MIP-01 for the event shape.
- MIP-02 for ids and signatures.
- MIP-04 for event semantics.
- MIP-03 for relay behavior.
- MIP-05 for relay compatibility.
A minimal implementation should be able to:
- build valid events;
- calculate event ids;
- sign events with Ed25519;
- verify event signatures;
- submit events to a relay;
- fetch events by id;
- scan events by filters.
Private keys must stay local to clients. Relays only receive public keys, events, and signatures.
draft: initial proposal under discussion.accepted: approved for implementation.final: stable and implemented by compatible software.deprecated: no longer recommended for new implementations.
The key words MUST, MUST NOT, SHOULD, SHOULD NOT, and MAY are used as
normative terms when describing protocol requirements.