Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

evbogue/ANProto

ed25519 keypairs sign timestamp + hash in base64

evbogue/ANProto.json
{
"createdAt": "2025-08-14T17:37:40Z",
"defaultBranch": "main",
"description": "ed25519 keypairs sign timestamp + hash in base64",
"fullName": "evbogue/ANProto",
"homepage": "https://anproto.com/",
"language": "JavaScript",
"name": "ANProto",
"pushedAt": "2025-11-07T19:32:03Z",
"stargazersCount": 5,
"topics": [],
"updatedAt": "2025-11-10T01:06:41Z",
"url": "https://github.com/evbogue/ANProto"
}

the Authenticated and Non-networked protocol or ANother protocol

ed25519 keypairs sign timestamp + hash in base64


anproto.com

try it at anproto.com/try or use a client such as wiredove


  • ANProto is the spiritual successor to secure-scuttlebot, but without all of the extra stuff that is difficult to maintain.
  • ANProto is an attempt to argue that ATProto is too involved in it’s own networking infrastructure to be usefully decentralized.
  • ANProto operates under the working theory that Nostr will never reach anyone besides Bitcoiners.

ANProto works over any networking stack. Open the messages from your URL bar! Email them to your friends! Load them on a USB stick an slingshot them over a river! ANProto is non-networked, so you can send and retrieve the messages anyway you want. Try the fetch API or Websockets if you want a good place to start. But maybe dork out trying to send ANProto messages via Bluetooth, LoRa, or sync them via local wifi like you did with Scuttlebot!


use Deno or your browser

import { an } from './an.js'
console.log(await an.gen())
// BSY7/er4VJIu08o39NaRAiPY/MAvd7oQhlGCRDABjYU=tQa03kqUWG3VtHZ98++lHFBeQ4JKZwuTH2CjC/K6P8EFJjv96vhUki7Tyjf01pECI9j8wC93uhCGUYJEMAGNhQ==
console.log(await an.hash('Hello World'))
// pZGm1Av0IEBKARczz7exkNYsZb8LzaMrV7J32a2fFG4=
console.log(await an.sign(hash, await a.gen()))
// BSY7/er4VJIu08o39NaRAiPY/MAvd7oQhlGCRDABjYU=yVpD8i7d3d4dls3YThEg1x1vSdmqeEweV4e4Ejl/8yPoVG7JR0YAKDPagQOgxXMrlCVLNNqvlNvj4xRDOYDLBjE3NTUxOTc4NDEzMTlwWkdtMUF2MElFQktBUmN6ejdleGtOWXNaYjhMemFNclY3SjMyYTJmRkc0PQ==
console.log(await an.open('BSY7/er4VJIu08o39NaRAiPY/MAvd7oQhlGCRDABjYU=yVpD8i7d3d4dls3YThEg1x1vSdmqeEweV4e4Ejl/8yPoVG7JR0YAKDPagQOgxXMrlCVLNNqvlNvj4xRDOYDLBjE3NTUxOTc4NDEzMTlwWkdtMUF2MElFQktBUmN6ejdleGtOWXNaYjhMemFNclY3SjMyYTJmRkc0PQ=='))
//1755197841319pZGm1Av0IEBKARczz7exkNYsZb8LzaMrV7J32a2fFG4=

MIT