Files
coop/crates/browser-signer-proxy

browser-signer-proxy

Proxy to use Nostr Browser signer (NIP-07) in native applications.

This is a re-implementation of nostr-browser-signer-proxy using the smol async runtime instead of tokio.

Description

This crate provides a local HTTP proxy that communicates with a NIP-07 browser extension (e.g., Alby, nos2x) running in a browser tab. Native applications can use this proxy to request public keys, sign events, and perform NIP-04/NIP-44 encryption/decryption through the browser extension.

The HTTP server is implemented with a minimal, dependency-free approach using smol::net::TcpListener and manual HTTP/1.1 parsing — avoiding heavy HTTP framework dependencies entirely.

Usage

use browser_signer_proxy::prelude::*;

async fn example() -> Result<(), Error> {
    // Create the proxy with default options (localhost:7400)
    let proxy = BrowserSignerProxy::new(BrowserSignerProxyOptions::default());

    // Open the proxy URL in a browser
    webbrowser::open(&proxy.url())?;

    // Start the proxy server
    proxy.start().await?;

    // Use it as an async Nostr signer
    let public_key = proxy.get_public_key_async().await?;
    println!("Connected with public key: {public_key}");

    Ok(())
}

Differences from the tokio-based version

Feature tokio (original) smol (this crate)
Async runtime tokio smol
HTTP server hyper smol::net::TcpListener + manual HTTP/1.1
Mutex tokio::sync::Mutex smol::lock::Mutex
Shutdown signal tokio::sync::Notify event_listener::Event
Request-response channel tokio::sync::oneshot smol::channel::bounded(1)
Timeout tokio::time::timeout smol::future::or + smol::Timer
Task spawning tokio::spawn smol::spawn

License

This project is distributed under the MIT software license.