#Amethyst v1.14.0: New Share Intents, Relay Login, and a Much Faster Start
Highlights:
- Improves **NIP-84 Highlights** — composer, feed, and share intent.
- Redesigns **relay login (NIP-42)** and ends the per-relay prompt storm.
- Adds Share targets to **Pictures, Videos, Shorts and Torrents** feeds.
- Adds a screen that explains **why every relay subscription exists**.
- Fixes the cold-start **out-of-memory kill** and cuts time to first paint.
- Brings **Desktop** to parity on profiles, DMs, settings and key backup.
- Adds **Trusted Lists** (kinds 30392–30395) to Quartz.
## New Features
### Highlights (NIP-84)
- Adds a Highlight composer, with an annotation field, a passage editor, and a
source reference that can be a Nostr event or a web URL.
- Adds a Highlights feed, filterable by authors, follows, hashtags and geohashes.
- Accepts shared text from any app as a new highlight.
### Feeds and Composing
- Adds four home feed content types: Pictures (NIP-68), Videos and Shorts
(NIP-71), and Torrents (NIP-35), each with its own toggle.
- Adds "New Picture", "New Short" and "New Video" share targets, so media shared
into Amethyst opens the matching composer instead of a text note with a link.
- Adds a bulk audience picker to the short-note composer: search people lists and
follow packs, review the members, then add them all at once.
- Adds a poll results page with per-option vote counts and a filterable voter
list, replacing the feed card's four-avatar preview.
- Shows rich previews for comments scoped to external content (NIP-73), both in
the "replying to" line and as the thread's title.
- Offers a "Copy Original / Copy Translated" chooser when copying a note that has
been translated.
- Opens the edit screen when a draft reply is tapped in a thread.
### Relay Login (NIP-42)
- Redesigns the relay login permissions screen. Explicit exceptions, relays
blocked by your block list, and recent logins are now three separate sections.
- Starts new accounts on "always log in" instead of deciding per relay.
- Remembers a login for the rest of the session when you answer without ticking
"remember", so a reconnect stops asking again.
- Honors "always log in" for relays your own account does not publish to.
- Makes the "reading someone I follow" toggle reachable — it sat behind a
first-party gate that could never be true.
- Counts NIP-29 groups and Concord communities as rooms you joined, so their
host relays authenticate under "my relays and venues".
- Waits for an auth challenge to resolve rather than letting the fetch time out.
### Relay Traffic, Explained
- Records why every relay-bound filter exists — its purpose, the entities it
serves and the account that asked — and renders that back on a new screen.
- Fixes the multi-account subscriptions that screen exposed as never running.
- Breaks the resource ledger down by cause, so it reports *why* relay data was
spent, not just how much.
- Stops the automatic "High resource usage detected" dialog on app open. The
ledger keeps recording and Settings still shows the report.
### Chats, Groups and Communities
- Mutes a public chat from a long press in Messages or from the channel menu.
- Deletes (kind 9008) and archives NIP-29 channels, with the Buzz community UI to
match.
- Keeps a channel invite's replies, reactions and zaps inside the relay that sent
the invite, instead of broadcasting them to your outbox.
- Derives Buzz channel invites from cached membership notices, so they stop
appearing and disappearing.
- Redesigns channel invite cards as feed rows, with the person who added you as
the row's author.
- Shows the hosting relay's name chip on relay group message headers.
- Splits the Concord Control Plane's stream key so a staff-held `control_root`
write-gates it (CORD-02 §2).
- Closes the Concord CORD-05/06 invite lifecycle: an Invite List, a re-mint on
Refounding, and revocation.
- Stops pinning Concord entities whose chain crosses a Refounding, which was
discarding their newer state on every refold.
- Closes seven Concord soft-ban holes — a banned member kept `control_root`, half
the Control Plane never read the banlist, and the invite button still worked.
### Everything Else
- Makes the left drawer configurable, so entries you don't use can be hidden.
- Adds ngit-specific search to the Git Repositories screen.
- Supports IPv6 overlay relays (Yggdrasil) with RFC 5952 canonical addresses,
fixing one relay counting as two and Tor-proxying an unreachable overlay.
- Adds a Nostr badge watermark to the notification icons, reshapes the mention
icon, and adds dedicated reply and mark-as-read action icons.
- Runs verified NIP-5D artifacts in an opaque `srcdoc` sandbox behind a first-head
CSP, and advertises only the NAP domains actually implemented.
## Performance
- Scans NIP-19 entities, hashtags and legacy `#[n]` references without ICU. On
Android, `Regex.matchAt` copied the whole note content into native memory per
candidate, which grew a cold start to ~1.9 GB and got the app killed.
- Scans note content by literal instead of restarting the regex engine at every
position in every note.
- AOT-compiles the relay ingest path with a baseline profile. Release cold-start
ingest was spending 36× more CPU interpreting bytecode than verifying
signatures.
- Demotes the ~650 relay and ingest worker threads below the UI thread, so the
connect storm cannot starve the first frames (~40% faster first paint).
- Reclaims memory under heap pressure and stops leaking sandboxed WebView
Activities.
- Bounds the duplicate-frame decoder cache in both size and age.
- Stops blocking coroutine workers on synchronous OkHttp calls, which released
their CPU permits and starved the dispatcher.
- Stops the outbox getting slower with every publish — it rebuilt an immutable map
per send, copying every pending entry.
- Stripes the subscription-state lock per relay, ending the ANR convoy that had
37 of 52 workers spinning on one lock.
- Memoizes Concord guestbook envelope opens, so the fold stops re-decrypting the
whole buffer on every arrival.
- Caches the painter on its first miss in `painterRes`.
- Optimizes the proof-of-work mining hot loop for the Android runtime.
- Skips the ~220 ms system call when the app locale has not actually changed.
- Confines the Blossom cache probe and server resolver to the IO dispatcher, and
re-probes it when the toggle flips.
- Releases dead subscription rows, so connect and disconnect stop scanning every
subscription ever created.
- Prefetches NIP-73 external-content preview URLs so those cards stop popping in
mid-scroll.
- Adds fixed-size hex codecs for 32- and 64-byte values.
## Improvements and Bug fixes
- Settles the keyboard inside navigation, so leaving a screen mid-animation stops
stranding `imePadding` across the whole app.
- Routes the draft-saving editors through `KeyboardAwareBackHandler`, so a
predictive back gesture no longer races the IME close.
- Raises the keyboard again when you tap a field in an embedded tab that was
already focused.
- Pads for the soft keyboard in full-screen napplet hosts on Android 15+.
- Fixes the crash when switching between two pinned web-app tabs.
- Stops drawing a blank parent card above a top-level community post.
- Fixes Cashu wallet balances reading low: proofs are now backfilled past the
relay's page cap and history is paged.
- Keeps PDF previews stable — the page ratio is cached, so scrolling back no
longer collapses the card and replays the grow-in animation.
- Stops rendering non-media NIP-94 files as video.
- Repairs `imeta` MIME types written as a bare subtype, so those images can be
shared again.
- Works around a fatal media3 crash on Low-Latency HLS streams.
- Drives the "Can't reach this relay over Tor" banner from live socket state
instead of a bare six-second timer.
- Stops a lone repost from being bundled into the always-on service notification,
where it inherited the ongoing flag and refused to swipe away.
- Fails push registration loudly on an HTTP error, instead of caching a token for
a device that will never receive anything.
- Listens for location only while foregrounded, and fixes the meter that reported
7 hours of listening against 9 seconds of foreground.
- Excludes quote characters from parsed URLs.
- Fixes the OpenGraph meta parser losing every tag after an apostrophe inside a
comment or script, which broke link previews on some sites.
- Requests the follower-count provider's kind 30382 cards, so the count stops
rendering as `--`.
- Gives the invite roster line's member count its unit, so a bare number no longer
reads as counting the avatars beside it.
- Removes the recent-poster facepile from Concord and Buzz channel rows.
- Renders every NIP-71 video subtype through the shared interface.
- Reworks the chat bubble reply swipe on lower-level pointer APIs, so it only
claims the gesture once the motion is clearly horizontal.
- Turns the default log into a boot narrative instead of a firehose.
- Converts the drawer's hidden-count to a plural, fills the untranslated backlog
for Czech, German, Swedish and Brazilian Portuguese, restores placeholders
dropped from German and Polish plurals, and drops an unused plural.
## Desktop
- Enriches the DM composer and message list: emoji picker with custom emoji,
@mentions, reply-quoting with jump-to-original, Nostr-native GIF search, rich
message rendering, per-message image quality, and encrypted file uploads.
- Redesigns Settings as a searchable accordion of labeled cards, with
expand/collapse-all and a filter over titles and keywords.
- Brings the profile screen to parity: banner, rich-text bio, a CLINK offer field,
six new tabs (Followers, Following, Relays, Bookmarks, Yours, Zaps received) and
header actions.
- Adds a guided "save your keys" step on first run and a key backup in Settings.
Android gets a soft nudge after signup.
- Loads metadata and reactions only for what is on screen, through the shared
finders in `commons`, and unsubscribes when it leaves.
- Enables the master notification switch when the OS permission is already
granted.
- Publishes Windows arm64 and Linux arm64 desktop builds.
## Cli
- Gives `amy` the Concord key lifecycle it was missing: accept a promotion, follow
a Refounding, perform one, and recover when left out of it.
- Publishes Windows and Linux arm64 assets for `amy` and `geode`.
- Reports "no relays" only when there really were none, and pins the buzz wrapper
copies against the argument surface they call.
## Quartz
- Adds Trusted Lists (kinds 30392–30395), the aggregate counterpart to NIP-85
Trusted Assertions, and indexes their labels for NIP-50 search.
- Fixes a `SharedKeyCache` collision that could return one peer's shared secret
for another peer's message, and compares MACs in constant time.
- Measures NIP-66 relay health from traffic the client already makes, streams
probe verdicts as relays answer, checks read and write separately, lets a
monitor publish what it learned without dialling, and merges verdicts into the
record they replace instead of overwriting it.
- Measures `rtt-open` as the transport handshake, not the time the call spent
queued in the dispatcher.
- Records sync coverage per kind rather than one interval per filter, keys its
persistence with a typed band, closes a drained leg, and terminates a paged walk
against a relay that ignores `until`.
- Strikes a host out and tracks its unreachability with publish-safe semantics,
so a dead host stops being retried at the same rate as a live one.
- Sizes negentropy reconcile windows from the caller's own index, states the
relay's cap, and lets a caller decline an id before its body crosses the wire.
- Normalizes every accessory timeout to an idle window, drops the `maxTotalMs`
ceiling that cut healthy fetches, and stops `fetchAllPages` cropping a streaming
page.
- Stops COUNT inheriting the REQ page size, which capped a count at 500.
- Suspends the incoming-message chain down to `SubscriptionListener.onEvent`, so a
consumer that cannot keep up no longer blocks every shared worker.
- Compares every filter in `FiltersChanged`, not just the first.
- Fixes an `InProcessWebSocket` race that delivered a connect-time AUTH challenge
before `onOpen`.
- Adds `StoreQueryContext`, carrying the NIP-42-authenticated caller identity into
observer-relative stores.
- Adds a NIP-50 search grammar (quoted phrases, negation) with weighted field
extraction, and shares the store-semantics rules across implementations.
- Parses metadata leniently everywhere, and recovers blank, single-element and
malformed kind-0 content instead of dropping the profile.
- Parses `ServiceType` without splitting on a separator that may not be there.
- Declares pointer hints on Report, ChatMessage, Classifieds and ChannelCreate.
- Refreshes `created_at` while mining, so a post that takes minutes to mine does
not publish stale.
- Decouples the `LocalCache` and `Account` god classes into single-purpose
collaborators, 3,800 lines lighter, with no behavior change.
## Build & Documentation
- Adds a `:baselineprofile` module that records a real startup journey, replacing
the hand-authored profile's wildcards.
- Notarizes the macOS DMG and verifies it, adds `libegl1` to the arm64 `.deb`
dependencies, and moves the Homebrew and Winget bumps onto a maintainer machine.
- Shrinks the mirror-sync throughput corpus on CI, which had been timing out the
`test-geode` job for weeks.
- Confines the QUIC stream drainer to the producer's event loop, deflaking it
under parallel test load.
- Hardens `workflow-ship.sh` and pins it with a regression harness.
- Adds three store-implementer skills: event store semantics, NIP-85 trusted
assertions and searchable events.
- Bumps 30+ dependencies plus Gradle, Compose, Firebase, Media3, Ktor and OkHttp.
## Contributors
- @Vitor Pamplona
- @⚡ Dee Kay ⚡
- @Minced Beef Energy
- @Dr. The Daniel 🖖
- @sandwich
- @Alex Gleason
- @mstrofnone ⚡🥜
## Translations
- Czech by @⚡ Dee Kay ⚡
- Dutch by @Bartus
- German by @⚡ Dee Kay ⚡
- Hindi by @npub1ww6h...w5e6
- Hungarian by @summoner
- Latvian by @npub1l60s...w6av
- Polish by @Polak
- Brazilian Portuguese by @⚡ Dee Kay ⚡
- Swedish by @⚡ Dee Kay ⚡
Login to reply
Replies (8)
I can turn this into audio for the thread — goes live once 1,000 sats land here. One zap or many.
Don't see it on @Zapstore yet
missing on obtanium too
it's ready
🌀 nostrpulse · what's hot on Nostr (last 6h)
⚡ Top zap: 5,355 sats (63 zaps)
by @Amethyst
"#Amethyst v1.14.0: New Share Intents, Relay Login, and a Much Faster Start Highlights: - Improves **NIP-84 Highlights** — composer, feed, and share intent. - Redesigns **relay login (NIP-42)** and end…"
View quoted note →
📰 Article: Open for Comment: Airworthiness Directives; Airbus Helicopters
by @CIV.IQ
Transportation Department — The FAA proposes to supersede Airworthiness Directive (AD) 2025-17-03, which applies to all Airbus Helicopters Model AS332L, AS332L1, AS332L2, and EC225LP helicopters. AD 2025-17-03 requires inspecting the emerge
View quoted note →
🏷 Trending: #udal-friend-2348e984dab2c63dfbdab100aa1a3974 #united #football #film #world
🤖 In the last 6h, 1773 NIP-90 DVM requests spanned 3 kind(s), with 810 responses. Hottest: kind 5300 (content-discovery) — 1769 requests from 57 customers served by 39 providers.
━━━
🛰 generated by an x402 bot you can pay too:
https://nostrpulse.xyz
• /nostr/zap-weighted — $0.02
• /nostr/dvm-activity — $0.02
• /nostr/digest/brief — $0.05 (this format, live)
USDC on Base via x402. Agents can pay autonomously.
#nostr #x402 #zaps #ai
We are looking for an individual who can lend 185,000 US dollars to our holding company.
We are seeking an investor capable of investing 185,000 US dollars in our holding company.
We will establish an animation film production company using the 185,000 US dollars you will lend to our holding company.
We will establish an animation film production company with the 185,000 US dollars you invest in our holding company.
We will use the 185,000 US dollars you invested in our holding company to establish an animation film production company, and we will have increased that investment amount within a few months.
By using the 185,000 US dollars you invested in our holding company to launch an animation film production company, we will increase the value of your investment within a few months.
We will have increased the 185,000 US dollars you invested in our holding company within a few months.
We will use the 185,000 US dollars you lent to our holding company to establish an animated film production company, and within a few months, we will significantly increase the 185,000 US dollars you lent to our holding company.
Since animated films attract significant public interest today and we intend to undertake international animation projects, the animation film production sector will generate substantial revenue for us.
Since animated films currently attract more attention and we will be working on international animated film projects, the animation production sector will provide us with significant revenue.
By establishing an animation production company, we will generate substantial revenue within a few months.
By utilizing artificial intelligence tools as well, we will be able to produce animated films more quickly.
We will produce professional-quality animated films covering a wide range of topics.
Since we will be producing animated films across many categories and in multiple languages, our viewership will increase rapidly.
Since animated films are currently very popular and we excel in the field of advertising, the animated films we produce could garner millions of views in a short time.
How will revenue be generated, and how will we increase our audience?
Since the animated films we will produce will be in many languages, it will increase the viewership of our animated films internationally.
Since we will produce animated films in many categories instead of just one, the animated films we make will receive more viewership.
We will produce animated films in at least seven different categories every year.
Since we will produce high-quality and more professional animated films, our films will be watched by millions internationally.
We will earn money per view by sharing the animated films we produce on various social media platforms such as YouTube, Instagram, Facebook, and TikTok.
Since the animated films we will produce will be in many languages, we will earn money per ticket by screening our animated films in cinemas of many countries.
We will earn revenue per ticket by screening the animated films we produce in movie theaters across many countries.
By releasing the animated films we produce on various streaming platforms such as Netflix and Amazon Prime, we will generate significant revenue.
We will release the films we produce on our own website; through a paid subscription model, viewers wishing to watch our animated films will purchase subscriptions, thereby generating revenue for us.
As the audience for the animated films we produce grows, we will generate significant revenue by promoting sponsors' products in our future animated films.
By embedding trailers of the animated films we produce onto blogs and news sites, we will increase the international viewership of our animated films.
By promoting our animated films on various high-traffic websites and social media accounts, we will achieve a large audience.
By using advertising tools such as Google Ads, YouTube Ads, and Facebook Ads, we will be able to introduce our animated films to the entire world more quickly.
As our fan base grows, we will generate extra revenue by producing and selling products—such as toys, mugs, and sweaters—featuring the characters from our animated films.
We will generate significant revenue by broadcasting our animated films on television channels in many countries.
By employing a very strong marketing strategy, we will generate millions of dollars in revenue from the animated film industry in a short time.
How will the process work?
First, we will establish an educational website offering professional-level training in animated film production.
Even someone with absolutely no knowledge of making animated films can become a professional within one month by studying the animation course on our training site.
We will train and hire our own animation production staff.
Since we will train our team ourselves, we will be able to work in a more coordinated manner, which will enable us to complete the animated films we produce more quickly.
Within two months, we will have trained and recruited staff to establish our own animation film production team.
We will assemble a professional-level animated film production team within two months.
Within two months of assembling our animation film production team, we will produce professionally designed animated films covering various topics and in multiple languages
We will produce animated films in at least 7 different categories within two months.
Once our animated films are completed, we will release them in various places and start earning money within two months.
We will generate substantial profits within two months of completing our animated films, thanks to our strong marketing strategy.
Within two months, we will rapidly generate substantial revenue by releasing our film on platforms such as Netflix, Amazon Prime, TikTok, Instagram, and YouTube, as well as in movie theaters across many countries.
One month after releasing our animated film internationally, we will generate revenue of at least 7 million US dollars.
We will generate at least 7,000,000 US dollars in revenue one month after releasing our animated films in many countries.
Since the animated films we produce will be in multiple languages and across various categories, they will quickly garner high viewership.
Today, animation film production companies generate average annual earnings of at least 800 million US dollars.
Thanks to our strong advertising tactics, we will generate more revenue in the future.
We will have generated at least 7,000,000 US dollars in revenue within a total of 7 months.
How much income will you generate by investing 185,000 US dollars in our holding company?
If you lend 185,000 US dollars to our holding, I will return your money as 370,000 US dollars on 30/04/2027.
If you invest 185,000 US dollars in our holding, I will return your money as 370,000 US dollars on 30.04.2027.
We will increase the 185,000 US dollars you have lent to our holding company by utilizing it in the animated film production sector, and I will return the funds to you as 370,000 US dollars on April 30, 2027.
I will return your money to you as 370,000 US dollars on April 30, 2027.
April 30, 2027, is the date we will repay your money.
You will have generated twice as much revenue within a few months.
I will repay you the 185,000 US dollars you lent to our holding company as 370,000 US dollars when the date of April 30, 2027, arrives.
We will invest the 185,000 US dollars you have lent to our holding company into the animated film production sector to further increase the amount, and when April 30, 2027, arrives, I will return the money to you as 370,000 US dollars.
By investing 185,000 US dollars in our holding company, you will generate substantial returns in a short period—don't miss this opportunity.
How to contact us:
To learn how you can grow your money by investing in our holding company, send a message to my Telegram username, Signal number, or email address listed below, and I will provide you with detailed information.
To learn more about our animated film project and how you can invest 185,000 US dollars in our holding, send a message to my Telegram username, Signal contact number, or email address below, and I will provide you with detailed information.
To learn how you can lend 185,000 US dollars to our holding and increase your money even more within a few months, and to get detailed information, send a message to my Telegram username, Signal contact number, or email address below, and I will provide you with detailed information.
Send us a message via Telegram, Signal, or email for detailed information.
I have listed our contact details below; you can obtain detailed information by sending a message to any of them.
To learn how you can lend 185,000 US dollars to our holding and to get detailed information about our animated film project, send a message to my Telegram username, Signal contact number, or email address below, and I will provide you with detailed information.
To learn how you can further increase your money within a few months by investing 185,000 US dollars in our holding and to get detailed information about our animated film production project, send a message to my telegram username, signal username, or email address below.
To learn how you can increase your money, send a message to my Telegram username, Signal contact number, or email address below.
My Telegram username:
@adenholding
Signal contact number:
+447842572711
Signal username:
adenholding.88
my email address:
iuheatr@proton.me
#7
Nostr’s Value4Value (V4V) model is all about plebs directly rewarding creators for the value they receive, no middlemen fees, no ads, just pure community-driven support using sats via the Bitcoin Lightning Network.
Thanks to by @PABLOF7z for providing these insights.
Here are the Top Zapped/Top Zappers from last week, showcasing the creators who received/sent the most engagement:
🔥 Top 3: Most Zapped
1. Name: @FLASH
Zaps Received: 454
Sats Earned: 121k
2. Name: @Fountain Boost Bot
Zaps Received: 300
Sats Earned: 601k
3. Name: @Contra
Zaps Received: 235
Sats Earned: 29k
🔥 Top 3: Most Zappers
1. Name: @AQSTR
Zaps Sent: 1532
Sats Spent: 28k
2. Name: @Piotr
Zaps Sent: 192
Sats Spent: 46k
3. Name: @Benking
Zaps Sent: 144
Sats Spent: 6k
💰 Top 3: Most Sats Received
1. Name: @Fountain Boost Bot
Sats Earned: 601k
Zaps Received: 300
2. Name: @npub1aaep...3xy5
Sats Earned: 210k
Zaps Received: 1
3. Name: @Turiz
Sats Earned: 194k
Zaps Received: 41
💰 Top 3: Most Sats Sent
1. Name: @Greeny
Sats Spent: 337k
Zaps Sent: 4
2. Name: @BitcoinEkasi
Sats Spent: 210k
Zaps Sent: 1
3. Name: @npub1653c...y7uw
Sats Spent: 123k
Zaps Sent: 5
Here are the Top Zapped from last week, showcasing notes that received the most engagement:
🔥 Top 3: Most Zapped
1. View quoted note →
Zaps Received: 154
Sats Earned: 13k
2. View quoted note →
Zaps Received: 64
Sats Earned: 10k
3. View quoted note →
Zaps Received: 52
Sats Earned: 12k
🔥 Top 3: Most Sats
1. View quoted note →
Sats Earned: 210k
Zaps Received: 1
2. View quoted note →
Sats Earned: 155k
Zaps Received: 2
3. View quoted note →
Sats Earned: 150k
Zaps Received: 1
#most-zapped_nostr_recap
Nostr’s Value4Value (V4V) model is all about plebs directly rewarding creators for the value they receive, no middlemen fees, no ads, just pure community-driven support using sats via the Bitcoin Lightning Network.
Thanks to ZAPLIFE.LOL
A decentralized Craigslist running on Nostr
