docs(changelog): add v1.13.0 release notes

Add docs/changelog/v1.13.00.md — the v1.13.0 "Web Apps, Communities & Git"
release notes — and link it at the top of the changelog index.

Covers the full v1.12.6..HEAD range: the in-app Browser and NIP-5D/5A web
clients, Concord communities, NIP-34 git collaboration, Location Channels, the
NIP-46 Remote Signer and Privacy Lock, NIP-42 relay login permissions, NIP-29
Groups, the redesigned Messages inbox, Blossom file sync, Podcasting 2.0,
proof-of-work (NIP-13), negentropy (NIP-77), GrapeRank, accent theming, and the
Desktop, amy CLI, Quartz, and Geode work.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrPNt4FchqArpMtAHHfqGi
This commit is contained in:
Claude
2026-07-19 19:06:03 +00:00
parent 768e19ff9b
commit fb730d7ea8
2 changed files with 375 additions and 0 deletions

View File

@@ -2,6 +2,7 @@
Release notes for Amethyst, one file per version. Files are named with zero-padded version numbers so they sort correctly in any file browser. Use [`TEMPLATE.md`](TEMPLATE.md) as the starting point for the next release.
- [v1.13.0 — Web Apps, Communities & Git](v1.13.00.md)
- [v1.12.6 — Napplets, Static Sites & Cashu Multi-Mint](v1.12.06.md)
- [v1.12.5 — macOS Desktop Signing Fix (cont.)](v1.12.05.md)
- [v1.12.4 — macOS Desktop Signing Fix](v1.12.04.md)

374
docs/changelog/v1.13.00.md Normal file
View File

@@ -0,0 +1,374 @@
# v1.13.0: Web Apps, Communities & Git
Highlights:
- Adds an **in-app Browser for Nostr web clients**, with support for **Nostr Web
Apps (NIP-5D napplets)** and **static websites (NIP-5A nSites)**. They run in a
keyless sandbox that can never touch your private key — every signature,
payment, or data read needs your explicit approval. "Log in with Amethyst"
lets Nostr web apps sign in as you.
- Adds **Communities (Concord)**: a new end-to-end-encrypted communities
protocol with channels, invites, roles, moderation, and full history —
browsable and chattable from Messages.
- Adds **Git collaboration (NIP-34)**: browse Nostr git repositories with a
full code browser (branches, diffs, syntax highlighting, commit history),
review patches and pull requests, and open and label issues — all in-app.
- Adds a **Remote Signer (NIP-46)**: for the first time, other apps and websites
can sign through Amethyst — with informed, per-account consent — whether your
key lives in Amethyst or on an external signer like Amber. Also adds a
**Privacy Lock** that gates your Messages behind a password or biometric.
- Adds **relay login permissions (NIP-42)**: when a relay asks you to
authenticate, choose Once / Always / Never per relay, with one-tap trust for
your follows' relays.
- Adds **NIP-29 Groups**: relay-hosted group chat with subgroups, custom roles,
invite links, threads, and pinned messages.
- Redesigns the **Messages inbox**: groups community and group channels with
last-message previews, unread dots, facepiles, live typing, and per-type load
toggles.
- Adds **Blossom file sync**: a media file manager to browse your stored blobs,
mirror them across servers, and "Sync all" with progress — including
confirm-then-pay for paid servers.
- Adds **Podcasting 2.0**: shows, episodes, chapters, transcripts, person
credits, and per-minute value-for-value Lightning splits.
- Repaints the app around **your chosen accent color**, with font and size
options that flow through buttons, badges, and highlights.
- Adds **proof-of-work (NIP-13)** publishing and **negentropy (NIP-77)** sync.
## New Features
### Web Apps, Sites & the Browser
- Opens Nostr web apps (NIP-5D napplets) and static websites (NIP-5A nSites)
directly inside Amethyst, rendered in an isolated, keyless sandbox process that
cannot reach your private key, storage, or data.
- Adds an in-app Browser — a drawer entry and pinnable bottom-bar tab — with an
omnibox address bar, autocomplete, history, favorites, recents, and captured
favicons. The trusted app draws the address bar so a page can never spoof its
URL.
- Adds "Log in with Amethyst": nSites open with a NIP-07 `window.nostr`
provider, so standard Nostr web apps can sign in and request signatures as your
active account — consent-gated, sign-only, and scoped per site.
- Lets web apps, with your permission, pay through your wallet (NWC), run live
relay subscriptions and queries, and read your identity (profile, lists, zaps,
badges) — every capability brokered and permission-gated (once / this session /
always).
- Pins favorite web apps to the bottom bar as embedded, swap-in-place tabs that
stay warm and show the app's own icon.
- Discovers web apps: the empty browser suggests a curated list plus nSites and
napplets published by people you follow, and profiles gain an "Apps & Sites"
tab.
- Adds a Connected Apps / permissions screen to review and revoke what each app
can do.
- Routes nSite web traffic through Tor by default when Tor is active, with a
per-site onion/globe toggle.
### Communities (Concord)
- Adds Concord: an end-to-end-encrypted communities protocol with channels,
membership, invites, roles, moderation, and history — reachable from a hub in
the drawer and pinnable to the bottom nav.
- Creates and edits communities with encrypted icon/banner, relay editing, and
channel management.
- Invites and joins via minted invites with QR codes, tappable invite links,
paste-to-redeem from Search, deep links, and direct member invites.
- Chats in channels with a rich composer (@mentions, custom-emoji autocomplete,
reply preview), encrypted image messages, reactions, replies, and typing
indicators.
- Adds threaded replies (inline or minichat modes) and delivery ticks for your
own messages.
- Groups channels by community in Messages with last-message, unread counts,
facepiles, and live typing.
- Adds moderation: ban/unban with read-time enforcement, role grants, a "Make
admin" toggle, and a full member roster.
- Backfills channel history across epochs, paging back to the true start of a
channel.
- Surfaces Concord replies and reactions on the Notifications tab with a
community pill.
### Git Collaboration (NIP-34)
- Browses Nostr git repositories in-app: a Git Repositories feed and a per-repo
screen with README and Code tabs.
- Reads code with branch/tag switching, file search, image preview, commit
history, syntax highlighting, and word-level diff highlighting.
- Reviews patches and pull requests with computed diffs and status actions; PR
updates surface on the repo screen.
- Manages issues: Issues and Patches & PRs tabs split by open/closed, issue
labels with filtering, and a full-screen New Issue composer.
- Edits a repository announcement from the repo screen, bookmarks repositories,
and filters the feed to your own repos.
- Adds a project-home dashboard with stats, languages, recent activity, and
last-commit rows.
### Location Channels
- Adds Location Channels: geohash-based public rooms that interoperate with
BitChat, browsable from a dedicated drawer list and pinnable to the bottom nav.
- Posts under an unlinkable per-area anonymous identity (with an optional
nickname that survives restarts), or opt in to post as your real account.
- Teleports to any place from a map picker or the feed-filter dialog to read and
post to distant rooms, and follows a teleported place to keep its feed.
- Reacts, zaps, and replies on location messages, with a "live near you" bubble
on Home surfacing nearby rooms.
- Adds a "pick on map" location picker to the short-note and all other composers.
### Groups (NIP-29)
- Adds relay groups: group chat, a discovery feed with a top-bar filter and
favorites, and join / leave / create / invite actions.
- Adds subgroups (parent/child hierarchy), custom roles (kind 39003), threads,
and message pinning.
- Shares groups via `naddr` and invite links with one-tap join; inline group
links render as self-loading cards.
- Adds a map-based location picker when creating a group, and lets pinned group
tabs act as bottom-nav roots.
### Remote Signer & Security
- Lets other apps and websites sign through Amethyst for the first time
(NIP-46): connect by scanning or pasting a `nostrconnect://` code or a
`bunker://` link, and keep signing in the background — whether your key is
stored directly in Amethyst or delegated to an external signer like Amber
(NIP-55).
- Asks for informed consent before authorizing an app — showing its name and
icon, which account will sign, the exact permissions, and an event preview —
with per-account sheets and one-tap batched approval.
- Manages connected apps from a dedicated screen with per-app relay list, live
health, time-bound grants, and instant "forget this app".
- Adds a Privacy Lock for Messages (Android and Desktop): gate your DMs behind a
password or biometric, with an inactivity auto-lock and optional preview
redaction.
- Adds interactive relay login prompts (NIP-42): choose Once / Always / Never
per relay, with venue-aware prompts for public chats, communities, and live
streams, and one-tap trust for your follows' relays.
### Web of Trust (GrapeRank)
- Computes GrapeRank Web-of-Trust scores by crawling the social graph and scoring
every user — now even without a personal account (operator-less mode).
- Crawls followers in reverse (who follows a user) alongside follows-of-follows,
and tracks hop distance and follower count on trust cards.
- Discovers score providers via NIP-85 and fetches follow/profile data through
each author's own outbox relays for fuller coverage.
### Publishing & Sync
- Adds proof-of-work (NIP-13) publishing: a fire-and-forget mining queue with
per-account difficulty and per-category settings, scheduled-post mining, and
per-post overrides, shielded by a foreground service and mined across all
cores.
- Adds NIP-77 negentropy sync as a first-class capability, with deletion
(NIP-09/62) propagation so scoped syncs no longer strand deletions.
- Shows PoW mining progress, and surfaces PoW, OpenTimestamps, and location
markers as tap-to-explain pills in the note header.
### Podcasts
- Adds Podcasting 2.0: renders shows in detail and thread views, surfaces
episodes in the merged podcast feed, and plays trailers.
- Shows person credits as real Nostr profiles, soundbites, in-app chapters, a
transcript viewer, and a Top Supporters leaderboard.
- Adds per-episode reactions and NIP-22 comments, a Podcast Bookmarks screen, and
value-for-value Lightning splits paid per-minute during real playback.
### Wallet & Payments
- Adds a Cashu wallet setup wizard: find-or-create with cross-relay discovery,
mint suggestions, and a CashuMints screen; the wallet auto-publishes on mint
add/remove.
- Adds a setting to hide the on-chain (Bitcoin) wallet, including from zap
buttons.
- Adds a data-usage screen with stat tiles, a trend chart, proportion bars, and a
live memory card.
### Look, Media & Navigation
- Adds theme customization: pick an accent color (with a swatch picker), font,
and font size. The accent now drives Material 3 containers, buttons, FABs,
switches, unread dots, selected-reaction highlights, verified NIP-05 / image
marks, and the Following badge.
- Redesigns UI Preferences into grouped in-screen options with live font
previews, and adds a settings search filter in the app bar.
- Adds a Blossom media file manager: browse and manage stored blobs with per-file
controls, mirror and `/media` toggles, an app-level "Sync all" with progress,
and BUD-07 confirm-then-pay mirroring for paid servers.
- Redesigns the Media Servers screen as a single auto-saving canvas with a
reorderable priority list and cached health probes.
- Redesigns the bottom-bar setup with a live preview, drag-to-reorder, and real
favicons; the default bar becomes Home, Messages, Wallet, Browser,
Notifications.
- Adds fitness support: renders POWR strength workouts (kind 1301) and exercise
templates (kind 33401) as cards.
- Renders NIP-30 custom-emoji reactions as an avatar badge, a lone zap/nutzap as
a large activity card, and NIP-84 highlights from web highlighter clients.
- Supports NIP-51 mute-list hashtag entries and public-chat reply notifications.
## Performance
- Speeds up napplet/nSite opens by overlapping WebView init, prefetching blobs in
parallel, and fast-serving content-addressed blobs from cache.
- Substantially faster GrapeRank crawls (background IO, mass pre-connect with
cached DNS, batched contact reads, parallel outbox fetches, early dead-relay
pruning) and faster scoring via Gauss-Seidel sweeps over a compact integer
graph.
- Speeds up NIP-77 reconcile with direct-built wire frames (~2.5x), O(1) range
fingerprints, a live negentropy index, and an allocation-free idle watchdog.
- Prefetches media and pre-parses note text ahead of the viewport, adds a k-way
merge for the home feed, and pins indexes for multi-author queries.
- Isolates WebSocket frame dispatch onto a dedicated pool, adopts a caching event
decoder across Android/Desktop/CLI, and keeps light/dark resolution O(1) after
an accent change.
- Parallelizes Blossom "Sync all", prefetches a joined group's history, and mines
proof-of-work on half the device's cores.
## Improvements and Bug fixes
- Normalizes accent theming: contrast-picks onPrimary so filled buttons/FABs stop
washing out, bases light/dark on background luminance, and fixes accent
regressions.
- Keeps live HLS streams playing and caches only proven on-demand HLS; shows a
browser-fallback overlay when a decoder stalls and pauses looping videos after
5 plays.
- Adds an HTTP/2 keepalive ping to stop stale-connection image stalls, and trims
the image cache and player warm pool under memory pressure.
- Hardens the relay client: enforces blocked relays on every REQ/COUNT/publish,
stops re-sending REQs relays refuse, evicts failures on the first strike, and
fixes reconnect backoff on network/transport changes.
- Fixes nutzap relay routing to receive/advertise on inbox/DM (kind 10019)
relays instead of outbox.
- Fixes Concord invite handling (revocation, keyless CORD-05, clearer failure
copy, no hang on bad links, skip re-join) and channel rows stuck on "No
messages yet".
- Rejects NIP-29 group state not signed by the relay, opens group posts in the
group chat, and fixes subgroup edit safety and pinned-message jump.
- Makes tapping a message timestamp open delivery info instead of toggling the
time format, and right-aligns your own messages.
- Recovers a media file's type from its extension when the imeta MIME is
malformed, and moves several disk reads (boot receiver, signer policy) off the
main thread.
- Serializes account construction so concurrent loaders can't build duplicate
accounts.
- Routes Onion-Location through every HTTP client and maps Tor/Arti errors to
accurate SOCKS reply codes.
- Extracts the rich-text renderer and many event cards (calendar/RSVP, podcast
atoms/splits, relay discovery, code snippet, ecash mint, activity, Git
diff/status, and more) into shared commons so Desktop and Android render
identically.
- Shortens over-long translated strings across 23 locales and fixes duplicate
and CDATA translation issues.
## Desktop
- Redesigns notifications with a reworked inbox and native OS toast
notifications.
- Adds NIP-42 relay AUTH with an inline Once / Always / Never approval banner and
persisted grants.
- Makes NIP-17 private DMs reliable: resolves recipient inbox relays, fetches DM
relay lists and account/Blossom config from outbox relays, and stops falling
back to connected relays.
- Adds Web-of-Trust score badges, Follow Packs (NIP-51) discovery with one-tap
follow, note scheduling, opt-in NIP-37 draft sync, a Privacy Lock for Messages
and the Wallet column, and a hashtag-spam filter.
- Renders rich text through the shared core (removes the desktop-only fork) and
ships as a Flatpak bundle.
- Fixes a desktop-cache race that could wipe the follow list, and makes sidebar
navigation replace the detail overlay instead of hiding behind it.
## Cli
- Adds nak-style primitives: `amy decode`/`encode` (NIP-19/21), `verify`, `key`
(generate/public/encrypt/decrypt/validate, NIP-49), and `filter`.
- Adds query verbs: `amy fetch` (one-shot with code-mode outbox resolution),
`subscribe` (live NDJSON), `count` (NIP-45), and `outbox USER` (NIP-65).
- Adds `amy sync` — NIP-77 negentropy reconcile with deletion propagation — and
`amy event` / `amy publish` for raw and pre-signed events.
- Adds `amy encrypt`/`decrypt` (NIP-44/04) and `amy gift wrap`/`unwrap` (NIP-59).
- Adds `amy blossom` (upload/download/list/delete/check/mirror, NIP-B7) with a
live interop smoke test.
- Adds `amy git` (NIP-34), `amy podcast` and `amy podcast20` (Podcasting 2.0 with
V4V splits).
- Adds the `amy cashu` wallet (NIP-60/61): wallet lifecycle, balance, mint,
receive/send (LN / token / nutzap), and maintenance.
- Adds `amy admin` (NIP-86 relay moderation) and `amy serve` (run a relay by
embedding geode).
- Adds NIP-46 remote signing: `amy bunker` server, `amy login bunker://…`, and
`amy login --nostrconnect`, gated with `--perms` and interactive approval.
- Adds the `amy graperank` suite (crawl/score/publish/followers/rank/…),
account-less crawl/score, and NIP-85 card publishing.
- Adds `amy fof` (follows-of-follows, renamed from `amy wot`), `amy concord`
(encrypted communities), `amy relaygroup` (NIP-29), and `amy geochat`
(BitChat-interoperable geohash channels).
- Adds NIP-13 proof of work (`amy pow`, `--pow` on posts), `amy kind`, `amy nip`,
`amy namecoin`, `amy status`, and `amy logoff`.
- Expands `amy nsite`/`napplet` with `publish`, `serve`, and `list`.
- Switches the default event store to SQLite and hardens the output contract:
single-line `--json`, exit codes 0/1/2/124, publish results carry each relay's
rejection reason, and read-only verbs run without an account.
## Quartz
- Adds NIP-77 negentropy sync (pipelined worker pool, multi-connection fan-out,
bounded-memory streaming, `LiveNegentropyIndex`) and NIP-09/62 deletion
propagation.
- Adds NIP-13 proof-of-work publishing: a cooperative-cancellation miner and a
`PoWNostrSigner` decorator that composes with any signer, plus NIP-59
gift-wrap mining on the outer wrap only.
- Adds NIP-66 `RelayReachabilityStore` — a durable, shareable dead-relay cache
backed by kind:30166 events.
- Adds the Concord/CORD protocol foundation (key derivation, envelope layer,
authority resolver, roles/moderation, CORD-05/06/07) and the NIP-5D/5A
trust-boundary core (capability model, permission ledger, broker, wire
protocol).
- Implements Marmot (MLS-over-Nostr) group icons byte-for-byte with the
mdk/whitenoise scheme, and fixes SecretTree ratchet preservation across
restore.
- Adds an OutboxDispatcher to fetch profile/contact events via each author's
outbox relays, and richer NIP-89 app-handler parsing.
## Geode (standalone relay)
- Adds relay-to-relay mirroring with strfry-router parity: a two-phase model
(NIP-77 negentropy sync catch-up plus a live REQ tail), `down` / `up` / `both`
directions, per-upstream mirror filters, and relay-to-relay trust.
- Keeps mirrors alive across upstream restarts with a retry pump and ping
keepalive, and advances the since-watermark correctly on reconnect.
- Adds `import` / `export` NDJSON verbs and an optional no-full-text-search mode
(`--no-search`) for lighter deployments.
- Adds `[database]` tuning knobs with periodic `PRAGMA optimize`, and validates
config knobs and mirror filters at boot.
- Runs embedded in the CLI via `amy serve`.
- Serves full-set negentropy NEG-OPENs from a live index and streams mirror
catch-up IDs instead of materializing them.
- Adds relayBench, a head-to-head benchmark harness (geode vs strfry vs any
relay) measuring ingest, query, and NIP-77 sync over a shared corpus.
## Build & Documentation
- Rebuilds the Tor/Arti native library for the SOCKS reply-code fix, ships a
Homebrew formula for `amy`, and seeds the Gradle distribution from a verified
mirror in the web sandbox.
- Adds NIP-29 group-chat test coverage across every assembler, filter shape, and
relay integration.
## Contributors
- @npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z
- @npub1e2yuky03caw4ke3zy68lg0fz3r4gkt94hx4fjmlelacyljgyk79svn3eef
- @npub12cfje6nl2nuxplcqfvhg7ljt89fmpj0n0fd24zxsukja5qm9wmtqd7y76c
- @npub1dn0tej4a5806qk9ts56j572sndvjk27l5qmsxf0z3mquknccve7s4k8tfp
- @npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5
- roguehashrate
- LubuSeb
## Translations
- Czech, German, Brazilian Portuguese, and Swedish by @npub1e2yuky03caw4ke3zy68lg0fz3r4gkt94hx4fjmlelacyljgyk79svn3eef
- Spanish (Spain, Mexico, and US) by @npub1luhyzgce7qtcs6r6v00ryjxza8av8u4dzh3avg0zks38tjktnmxspxq903
- French by @npub106efcyntxc5qwl3w8krrhyt626m59ya2nk9f40px5s968u5xdwhsjsr8fz
- Hungarian by @npub1dnvslq0vvrs8d603suykc4harv94yglcxwna9sl2xu8grt2afm3qgfh0tp
- Dutch by @npub1w4la29u3zv09r6crx5u8yxax0ffxgekzdm2egzjkjckef7xc83fs0ftxcd
- Hindi by @npub1ww6huwu3xye6r05n3qkjeq62wds5pq0jswhl7uc59lchc0n0ns4sdtw5e6
- Polish by @npub16gjyljum0ksrrm28zzvejydgxwfm7xse98zwc4hlgq8epxeuggushqwyrm
- Slovenian by @npub1qqqqqqz7nhdqz3uuwmzlflxt46lyu7zkuqhcapddhgz66c4ddynswreecw
- Chinese Simplified by hypnotichemionus4
- German by crowdin.pretended462