Noxtr Specification Sheet

A web-based Nostr client built into the ExtFW framework. Feature overview, NIP support, and comparison with other clients.

Web Client · Open Architecture · Self-hosted
Back to Noxtr · ExtFW FrameWork · Versión en Español

What is Noxtr?

Noxtr is a web-based Nostr client integrated into the ExtFW PHP framework. It runs as a module within a self-hosted website, combining Nostr protocol access with server-side features like user accounts, Lightning address hosting, and NIP-05 identity verification.

It is designed as a single-page application with no external JavaScript frameworks — vanilla JS with a lightweight DOM helper (wquery).

Key Characteristics

Self-hosted

Runs on your own server (Apache/nginx, PHP, MySQL/SQLite). You control your data, your relay list, and your Lightning endpoints.

Zero Dependencies

No React, no Vue, no npm, no build step. Pure vanilla JavaScript in a single file. Crypto via noble-secp256k1 and noble-ciphers.

Integrated Identity

NIP-05 verification and LNURL-pay Lightning addresses are auto-configured from your server's user accounts.

Multi-auth

Supports NIP-07 browser extensions, nsec private key entry, NIP-46 Nostr Connect (remote signing with QR), and npub read-only mode.

NIP Support

Nostr Implementation Possibilities (NIPs) supported by Noxtr:

NIP-01Basic protocol
NIP-02Contact list
NIP-04Encrypted DMs
NIP-05DNS identity
NIP-07Browser signer
NIP-09Event deletion
NIP-10Reply threading
NIP-23Long-form content
NIP-19Bech32 entities
NIP-25Reactions
NIP-28Public channels
NIP-44Versioned encryption
NIP-46Nostr Connect
NIP-50Search
NIP-56Reporting
NIP-57Lightning Zaps
NIP-65Relay list metadata
NIP-69P2P orders (Mostro)

Event Kinds

KindDescriptionUsage
0Profile MetadataName, avatar, banner, about, nip05, lud16
1Text NoteMain feed content, hashtags, mentions
3Contact ListFollow/unfollow, petnames, relay hints
4Encrypted DMAES-CBC with IV, NIP-07 or privkey decryption
5DeletionDelete own notes and own channel messages (kind 42)
6RepostRepost notes
7ReactionLike/unlike notes
40Channel CreateNIP-28 public chat channel
41Channel MetadataChannel name, about, picture
42Channel MessageMessages in public channels (own messages deletable via kind 5)
1984ReportNIP-56 spam reports
30023Article (NIP-23)Long-form content: mixed into feed with “Read” badge, full Markdown view, article composer
38383P2P Order (NIP-69)Bitcoin buy/sell orders from Mostro robots. P2P ₿ tab with order listing, plain-language explanation per order, and guided buy flow
9734Zap RequestLightning payment metadata
9735Zap ReceiptPayment confirmation from server
24133Nostr ConnectNIP-46 remote signing

Feature Overview

Feed Modes

Global, Following, Followers, Topics (hashtag subscriptions), and Hot (engagement-ranked trending).

Direct Messages

NIP-04 encrypted DMs with conversation threads, local DB caching, and extension-based decryption.

Public Channels (NIP-28)

Create, join, and chat in public channels. Channel metadata, pinning, invite links, and creator-only settings. Delete own messages (NIP-09).

Articles (NIP-23)

Long-form content (kind 30023) mixed into the feed with a “Read” badge and deduplication. Full Markdown view. Composer with title, summary, image, and tag fields.

Threading (NIP-10)

Full thread view with root/reply markers, reply counts, chronological ordering, and permalinks.

Lightning Zaps

NIP-57 zaps with internal balance transfers between registered users and external BTCPay invoices via LNURL-pay.

BTCPay Server Integration

Self-hosted Lightning infrastructure via BTCPay Server. LNURL-pay endpoint serves invoices, creates BOLT11 payment requests, and processes zap receipts (kind 9735) with server-side Schnorr signatures. Received sats accumulate in user balance for internal transfers or withdrawal.

Search

NIP-50 text search with multi-relay fallback. Profile search via @username. Entity detection for npub/note/nevent.

Topic Subscriptions

Subscribe to hashtags (#bitcoin, #nostr, etc.) and filter your feed. Suggested topics, bulk toggle, hot filter.

Bookmarks & Muting

Bookmark notes locally. Mute users with optional NIP-56 spam reporting. Unmute management in settings.

Media Handling

Embedded images (lazy-loaded), video players, YouTube/Vimeo embeds. Dead domain detection with 24h TTL auto-retry.

Profile Management

Edit name, bio, avatar, banner. NIP-05 and Lightning address auto-configured from server account.

Relay Management

Add/remove/toggle relays. Live connection status. Exponential backoff reconnection. Subscription rebalancing.

₿itcoin P2P (Mostro)

Dedicated tab for buying Bitcoin without inter/mediaries using the Mostro protocol over Nostr. Displays sell orders (kind 38383, NIP-69) with a plain-language explanation for each. Guided flow: take order → encrypted DM to robot → submit Lightning receive invoice → get sats. No Lightning node required; works with Phoenix, Breez, Zeus.

AR Profile Cards

Parse and render AR mesh network profile broadcasts (ar_profile, ar_collaboration) as visual cards with avatar, location, and social actions.

Client Comparison

An impartial comparison of Noxtr against established Nostr clients. Each client has different strengths — this table aims to be factual, not promotional.

Supported ~ Partial Not supported n/a Not applicable

General

Noxtr Damus Amethyst Primal Snort Iris Coracle Nostur
Platform Web iOS Android Web/iOS/Android Web Web/Multi Web (PWA) iOS/macOS
Open source
Self-hosted
No build step required n/a n/a n/a
Documented NIPs 18 ~15 60+ ~20 42 ~15 ~15 ~15

Core NIP Support

NIP Noxtr Damus Amethyst Primal Snort Iris Coracle Nostur
01Basic protocol
02Contact list
04Encrypted DMs (legacy) read
05DNS identity
07Browser signer n/a n/a n/a
09Event deletion ~
10Reply threading
19Bech32 entities
23Long-form content (articles)
25Reactions
28Public channels
44Versioned encryption ~
46Nostr Connect ~
50Search ~
57Lightning Zaps
65Relay list metadata ~

Features

Feature Noxtr Damus Amethyst Primal Snort Iris Coracle Nostur
Modern DMs (NIP-17/44) ~
Built-in wallet balance Coinos Cashu
Profile search (@user)
Public channels (NIP-28)
Trending / Hot feed
Topic/hashtag subscriptions ~ ~ ~
NIP-05 hosting premium paid
Lightning address hosting paid
Multiple accounts logout/login
Long-form content (NIP-23)
Communities (NIP-72)
File upload (NIP-96)
BTCPay Server integration
Buy Bitcoin P2P (Mostro) unique
AR profile rendering unique
Note on impartiality: Amethyst leads the ecosystem in raw NIP count (60+). Primal offers the best onboarding and search infrastructure. Coracle excels in relay management. Iris pioneered double-ratchet DM encryption. Nostur has the best Apple ecosystem integration. Noxtr's differentiator is self-hosted identity infrastructure (NIP-05 + Lightning address) and zero-dependency architecture — not NIP breadth.

Known Limitations (not for long)

Areas where Noxtr is behind other clients:

Distinctive Strengths

₿itcoin P2P — Mostro

Noxtr includes native support for Mostro, a peer-to-peer Bitcoin exchange protocol built on top of Nostr. You can buy or sell Bitcoin directly with other people, with no inter/mediaries or custodians, paying by bank transfer, cash, or any other agreed method.

The P2P ₿ tab in the navigation bar gives you access to the live order book with all available offers.

What is Mostro? A robot (automated program) that acts as a trusted arbitrator between buyer and seller. The robot holds the seller’s Bitcoin in escrow until the buyer confirms they have sent the fiat money, at which point it releases automatically. No one can steal: not the buyer (because the sats are locked), not the seller (because the robot won’t release until it gets confirmation).

How to buy Bitcoin (step by step)

No prior Bitcoin experience needed. You only need a Lightning wallet on your phone (Phoenix, Breez, Zeus, Wallet of Satoshi…).

  1. Open the P2P ₿ tab — You’ll see a list of sell offers with amount, currency, and payment method.
  2. Choose an offer that suits you (amount, payment method) and press Buy.
  3. Enter your Lightning Address (e.g. user@wallet.com) or a bolt11 invoice generated from your wallet — that is where you will receive the sats.
  4. The robot takes over: it locks the seller’s Bitcoin and tells you how much to pay in fiat and how.
  5. Send the money to the seller via the indicated method (bank transfer, cash, etc.) and press Fiat sent.
  6. The seller confirms receipt of the fiat payment and presses Release sats.
  7. Done! The sats arrive in your Lightning wallet. The trade appears as completed in its card.

If the seller’s wallet or the robot’s node cannot route the payment to your address, the trade card will show a field to enter an alternative Lightning address. Your sats are always safe with the robot.

How to sell Bitcoin

  1. Press New order in the P2P ₿ tab and choose Sell BTC.
  2. Configure the offer: fiat amount, currency, accepted payment method, and amount type (fixed or range).
  3. Publish the order. It will appear in the order book for others to take.
  4. When someone takes it, the robot sends you a hold invoice. Pay it from your Lightning wallet — the sats will be locked, not charged, until the trade finishes.
  5. Give the buyer your payment details and wait to receive the fiat via the agreed method.
  6. When the fiat arrives, press Release sats. The robot will send them to the buyer.

Import identity from Mostro Mobile

If you already use the Mostro Mobile app, you can import your identity into Noxtr without creating a new account:

  1. On the Noxtr login screen, press 📲 Mostro Mobile.
  2. Enter your 12-word seed phrase (the same phrase you use in Mostro Mobile).
  3. Noxtr will derive your Nostr private key using the same standard as Mostro Mobile (BIP39 + BIP32, path m/44'/1237'/38383'/0/0).
  4. Your active trades will be automatically recovered by sending a restore message to the robot.

Completed trades (cancelled or finished) are not recovered because the robot does not track them. Past history is only available if the same 12 words and interface initiated those trades.

Reputation and ratings

After completing a trade you can rate the counterpart from 1 to 5 stars. Ratings received appear in your reputation card (⭐ average · number of trades). Mostro robots publish each user’s accumulated reputation alongside their order book entries.

For administrators — Mostro P2P

Required relay

To send messages to the robot, wss://relay.mostro.network must be active in the user’s relay list. The order book works with any general relay, but communication with the robot requires that specific relay. Noxtr adds it automatically as a default relay for new installations.

No Lightning node required

Noxtr does not require the server to run a Lightning node for the Mostro flow. The Lightning wallet belongs to the end user (Phoenix, Breez, Zeus, etc.). BTCPay Server is only needed for the zap system and profile Lightning addresses, not for Mostro.

Data stored

Active trades are stored in NSTR_MOSTRO_TRADES and Mostro events in NSTR_MOSTRO_EVENTS. Both tables are created automatically. Reputation data is calculated from NSTR_MOSTRO_EVENTS with no extra table.

Auto-take (optional)

The server Monitor can be configured to automatically take orders that match predefined rules (amount, currency, robot age). See the Monitor section below.

Server Monitor — Notifications & Auto-take

The Monitor is a PHP process that runs in the background on the server and watches active Mostro trades even when no user has the web app open. It listens to Nostr relays continuously and acts whenever it receives relevant events.

For users — What does the Monitor do for you?

If the site administrator has the Monitor running, you will receive automatic alerts whenever something happens in your trades:

EventNotification received
Someone takes your published orderEmail: “Your order #XXXXXXXX has been taken”
The robot asks you to pay the hold invoice (selling BTC)Email: “You must pay the hold invoice”
The buyer confirms they sent the fiat (selling BTC)Email: “The buyer has sent the payment”
The trade completesEmail: “Trade completed”
New private message in your inboxTelegram (if you have the bot linked)

Each notification is sent once per trade and event type — no spam.

Link Telegram to receive alerts

  1. Go to the Telegram section of the web app.
  2. Press Link Telegram.
  3. On mobile: tap the “Open bot in Telegram” link — the bot chat opens directly and you just press Start.
  4. On desktop: copy the /start CODE command shown on screen and paste it into the bot chat in Telegram.
  5. The bot will confirm the link. From that moment on you will receive alerts for new private messages in Noxtr.

For administrators — Starting and stopping the Monitor

The Monitor is managed from the web admin panel (/noxtr/server_admin) via the Start / Stop / Status buttons, or directly from the server console:

php /path/index.php noxtr/server/action=monitor --verbose

To keep it running in the background:

nohup php /path/index.php noxtr/server/action=monitor > /var/log/monitor.log 2>&1 &

For administrators — Control commands via Nostr DM

The Monitor has its own Nostr identity. Authorized administrators can send it plain-text commands via DM from any Nostr client (including Noxtr). Its npub appears in the startup message and in the web panel.

CommandAction
pingChecks the channel is responding. Returns pong.
statusVersion, watched trades, active filters, uptime, relays.
tradesLive order book (options: age 4h, amount 50 EUR, status pending).
relaysRelays connected in the current session.
filter_trade listActive auto-take rules.
filter_trade amount 50 EURAdds rule: take orders for exactly 50 EUR.
filter_trade days 0Adds rule: take orders from robots with 0 days of age.
filter_trade remove amount 50Removes the 50 EUR rule.
filter_trade clearRemoves all auto-take rules.
emailSends a test email to the admin.
reloadReconnects to relays without restarting the process.
stopStops the process cleanly.
helpFull contextual help.

For administrators — New order notifications

In addition to watching user trades, the Monitor notifies the administrator of every new order that appears in the Mostro order book:

To receive new-order notifications via Telegram, the administrator must have the bot linked and their Nostr pubkey added to admin_pubkeys in the Monitor configuration.

For administrators — Auto-take

The Monitor can automatically take orders that match configured rules. This is useful for scenarios such as “always take orders from 0-day robots” or “always take orders for exactly 88 EUR”.

Auto-take is ephemeral: the Monitor generates a temporary keypair, takes the order, and notifies the admin, but does not create a persistent trade in the database. Subsequent tracking of the trade must be done manually from another Mostro client.

Control channel security: Only administrators with a pubkey listed in admin_pubkeys can send commands. Events are verified cryptographically with Schnorr signatures. Commands older than 5 minutes are automatically ignored.

Technical Architecture

ComponentTechnology
FrontendVanilla JavaScript (single IIFE), wquery DOM helper
BackendPHP (ExtFW framework module)
DatabaseMySQL or SQLite (dual-compatible SQL)
Web serverApache (mod_rewrite) or nginx
Cryptographynoble-secp256k1 (BIP-340 Schnorr), noble-ciphers (XChaCha20-Poly1305), Web Crypto API (AES-CBC, HKDF)
LightningBTCPay Server (LNURL-pay, BOLT11 invoices)
StorageServer DB (contacts, topics, bookmarks, DMs, relays, muted, channels) + localStorage/IndexedDB (keys, UI state)