Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion content/nips.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ rather than library surface.
| [89](https://github.com/nostr-protocol/nips/blob/master/89.md) | Application handlers | the `client` tag on notes you post |
| [92](https://github.com/nostr-protocol/nips/blob/master/92.md) | Media attachments, `imeta` | dimensions read off the tag, so an image reserves its box before it loads |
| [57](https://github.com/nostr-protocol/nips/blob/master/57.md) | Zaps, `kind:9735` receipts | receipts are read and shown. Sending is a milestone away |
| [65](https://github.com/nostr-protocol/nips/blob/master/65.md) | Relay lists, `kind:10002` | per-author routing: the feed reads where the people you follow write, and what you post goes where your own list says |

## Planned, and where it lands

Expand All @@ -48,7 +49,6 @@ missing, it is because I have not made that promise, not because I forgot it.

| Spec | Title | Milestone | Status |
|----|----|----|----|
| [NIP-65](https://github.com/nostr-protocol/nips/blob/master/65.md) | Per-author routing on other people's `kind:10002` lists. The library side is done above, the routing is not | Reach | 🚧 planned |
| [NIP-24](https://github.com/nostr-protocol/nips/blob/master/24.md) | Extra `kind:0` fields (`display_name`, `website`, `banner`, `bot`, `birthday`), carried through untouched when I rewrite a profile | Your identity, and your key | 🚧 planned |
| [NIP-50](https://github.com/nostr-protocol/nips/blob/master/50.md) | Search, which is a relay-side feature: a `search` string on an ordinary filter | Find anything, and keep it clean | 🚧 planned |
| [NIP-51](https://github.com/nostr-protocol/nips/blob/master/51.md) | Lists: bookmarks (`kind:10003`) and the mute list (`kind:10000`) | Find anything, and keep it clean | 🚧 planned |
Expand Down
38 changes: 35 additions & 3 deletions content/plaza.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -74,16 +74,48 @@ and avatars from `kind:0` · inline pictures and link previews · threads with t
chain above a note and replies nested under it · quotes and `nostr:` mentions
rendered inline · a composer with a mention picker and drafts that survive a quit
· reactions · notifications for what was aimed at you · profile pages with a
following count · your own relay list, read and write, routed by
[NIP-65](/nips) · settings, sessions, and sign-out without lock-in.
following count · your own relay list, read and write · a feed routed by
[NIP-65](/nips) to where the people you follow actually publish · settings,
sessions, and sign-out without lock-in.

There is no follower count anywhere, on purpose. Following is a number someone
states about themselves, and it is the length of their own contact list.
Followers is not: nothing on your disk can know who follows a person, and the
honest options are an indexer's figure or none. Plaza does not print numbers it
cannot check.

Private messages are the milestone after this one.
Private messages are a milestone away.

## Where the feed comes from

Following somebody on Nostr does not mean you will see them. If they publish
only to relays you are not connected to, they are simply absent: no error, no
empty state, nothing to say a person is missing.

Plaza reads where the people you follow actually write. It takes their NIP-65
relay lists, works out which relays reach the most of them, connects to the ones
you are not already on, and asks each relay only about the people who write
there. A small relay is asked about its dozen writers rather than about everyone
you follow, and anybody no chosen relay carries is asked of your own relays, so
nobody falls through.

The relays it picks are not the popular ones. Popularity answers "what should I
consider adding", which is a question for you; connections answer "which relays
reach people I cannot otherwise see", and the popular relays all carry the same
crowd. So the two questions get two answers: the suggestions in settings are
ranked by how many of your follows use each relay, and the connections are
chosen by who they reach.

Measured on my own account, which follows 257 people: between the relays I chose
myself and the eight it routes to, 202 of them are covered, and 156 of those by
two relays each, so one relay being down does not hide anybody. The remaining 55
are asked of every relay I have, which is what the app did for everyone before
any of this. Adding the routed connections is what moved those numbers; without
them the eight relays in my own pool were the whole answer.

It is bounded on purpose: eight routed connections alongside the eight in your
own pool, and one is only opened while it would reach somebody not already
covered twice, so a tidy follow list opens fewer.

## Careful with what is yours

Expand Down
29 changes: 16 additions & 13 deletions content/roadmap.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -26,44 +26,47 @@ No dates. The order is a commitment; a calendar would not be.
network answers.
- **Docs and benchmarks**: this site, the [NIP-support table](/nips), and reproducible
[performance numbers](/performance).
- **Reach**: following somebody means seeing them. Plaza reads the NIP-65 relay lists (kind
10002) of the people you follow, works out which relays reach the most of them, connects to
the ones you are not already on, and asks each relay only about the people who write there.
Anybody no chosen relay carries is asked of your own relays, so nobody falls through. What
you post goes where your own list says it should, and scrolling past what is on disk asks
the relays for older notes.

## What comes next, in order

1. **Notifications worth opening.** Who it was, what they did, the note it was about, and
what a zap carried: NIP-25 reactions, NIP-18 reposts, NIP-10 replies, and NIP-57 zap
receipts (kind 9735). Today a reply is a line of text with no face and no content.
2. **Reach.** Following somebody means seeing them: per-author routing from each author's
NIP-65 relay list (kind 10002) on the way in, the outbox model on the way out, and older
notes when you scroll past what is local.
3. **Ship it, and fix it.** A packaged Linux build, an update path that reaches people who
2. **Ship it, and fix it.** A packaged Linux build, an update path that reaches people who
already installed, and enough diagnostics to act on a report. A release you cannot fix is
a liability.
4. **Your identity, and your key.** Edit your kind 0 profile without dropping the NIP-24
3. **Your identity, and your key.** Edit your kind 0 profile without dropping the NIP-24
fields another client set, show a NIP-05 address as identification rather than a badge,
and export your key as a NIP-49 `ncryptsec` you have verified before you need it. A third
way in is being evaluated: a FROST bunker in the shape of fiatjaf's
[promenade](https://git.fiatjaf.com/promenade), where the key is split across independent
signers and reached over NIP-46.
5. **Readable and usable by everyone.** Operable without a mouse, a light theme, and type
4. **Readable and usable by everyone.** Operable without a mouse, a light theme, and type
that scales.
6. **Find anything, and keep it clean.** Search people, notes and hashtags: NIP-50 where a
5. **Find anything, and keep it clean.** Search people, notes and hashtags: NIP-50 where a
relay supports it, and `#t` filters for the hashtags. NIP-51 bookmarks (kind 10003) and
mutes (kind 10000), and opening a note by address, from a NIP-19 `nevent` or `naddr`.
7. **Media worth looking at.** Post pictures: [Blossom](https://github.com/hzrd149/blossom)
6. **Media worth looking at.** Post pictures: [Blossom](https://github.com/hzrd149/blossom)
BUD-02 upload to the servers in your kind 10063 list, with a NIP-92 `imeta` tag so they
render elsewhere, and NIP-B7 to re-find a blob by its sha256 when a host goes down. Then
the picture a quote quotes, and NIP-71 video (kinds 21 and 22).
8. **Money, carefully.** Zaps you can send and receive (NIP-57) and a NIP-47 wallet
7. **Money, carefully.** Zaps you can send and receive (NIP-57) and a NIP-47 wallet
connection, with the care that anything moving money deserves. The kind 9735 receipt is
the only proof a zap was paid, and it is the recipient's LNURL server that publishes it.
Then NIP-61 nutzaps, Cashu ecash sent to a pubkey: a Lightning zap needs an LNURL provider
the recipient signed up for in advance, and an account four clicks old has none, so this
is what makes a new person payable at all.
9. **Private messages.** NIP-17, gift wrapped per NIP-59 (a kind 13 seal inside a kind 1059
8. **Private messages.** NIP-17, gift wrapped per NIP-59 (a kind 13 seal inside a kind 1059
wrap), on the local store, signing through Notary, published only to the recipient's kind
10050 DM relays.
10. **Groups.** NIP-29, on relays that support it: every event carries an `h` tag with the
group id, and the relay hosting the group is the authority on who is in it.
9. **Groups.** NIP-29, on relays that support it: every event carries an `h` tag with the
group id, and the relay hosting the group is the authority on who is in it.

## What this deliberately does not do

Expand Down Expand Up @@ -92,7 +95,7 @@ you price it.
rejection that starts `pow:`, needs no setting at all.
- **NIP-96 HTTP file storage.** Supporting both upload paths looks like broader
compatibility. NIP-96 carries an `unrecommended` banner in its own spec and the NIPs index
strikes it through as replaced by Blossom, so uploads go to Blossom (item 7) and nowhere
strikes it through as replaced by Blossom, so uploads go to Blossom (item 6) and nowhere
else.
- **Web-of-trust distance filtering.** Computed over a store that holds only what you
happened to sync, the graph is wrong in a way that changes between launches, so the same
Expand Down
Loading