Nostr Signer — Nostrasia Hackathon Project
Nostr Signer is a native mobile app that allows you to remotely sign Nostr events via push notifications and store your private key in one place, rather than copying it into every individual mobile Nostr client that you use. It was created as a BOLT.FUN hackathon project for Nostrasia by Jakub, Kwinten and Roland from the Alby team.
How it works
Simply paste or generate new pair of Nostr keys in Nostr Signer and you're ready to connect to any app that supports NIP-46. To connect, one must scan or paste NIP-46 connection string – and voilà! From now on any Nostr events requested by the connected app you connected with will appear as push notification on your phone - to confirm or deny.
Under the Hood
Nostr Signer design was inspired by Jakub's visit to Japan, who tried to make mundane signing events something pleasurable and light, like a stroll in small mountainous village somewhere in Nagano. Logo of the app represents ostriches two-toed feet, because that's how we imagine ostriches sign Nostr events!
Technology-wise, we created a push notification server that subscribes to a Nostr relay. The app itself is built in React Native, which Roland used to make Alby web dashboard a PWA into a native app, and explore what other native features we can add there.
The Future
Take It and Fork It
Initially we wanted to continue developing the app, but quite soon other priorities like Bitcoin Connect and more focus on Nostr Wallet Connect demanded our full attention. But seeing a post by Vitor basically describing Nostr Signer (without knowing it exists), we realised it would be ashamed If Nostr Signer was completely forgotten. Hence the post!
While we're not actively developing Nostr Signer right now, we encourage anyone willing to contribute, as it is of course open-source. Feel free to fork it and take into any direction you want. We're happy to do reviews and tests though 😄
NIP-46 adoption
Nostr Signer works great, but at the time we worked on it there was basically zero adoption of NIP-46 outside of nsecbunker. Some clients had partial support for NIP-46, but did not properly follow the spec, and some such as Snort and Iris only showed the Nostr Connect button if window.nostr already exists (provided by an extension) – which defeats the purpose of having a remote signer.
Because of that, there's no really a good place to use Nostr Signer now, but you can try this playground we created. Since we created Nostr Signer, there have been some more developments around NIP-46.
Improvements to be made
The current implementation involves app-switching to sign a request. If we can allow the user to approve or decline push notifications just by interacting with the notification itself, then this will create an amazing mobile UX. We can also further improve the experience by remembering approval/deny requests so that future, trusted requests from existing app connections are processed without user interaction.
We believe NIP-46 is hard to implement in Nostr Clients. If there was an easy-to-use package like Bitcoin Connect that with one line allows the app to show a connection UI, and then exposes a NIP-07 interface to the client (therefore requiring no additional code changes), apps could easily add support for NIP-46.
If people enjoy the app, there's more cool things we can implement from the original design - such as being able to display and update your Nostr profile, see better previews of what you are signing (tagged Nostr users, link previews, etc) and more!
Try it out
To try the app, download it from our Nostr Signer repository. If you're interested in our journey of creating Nostr Signer, check out our project on BOLT.FUN: