OverviewFilesCommitsIssuesDocsReleasesPeers

ANProto commits / 96b7d80

readme updates and make orange hn orange
96b7d80133076614aa0c83fe5e72c0246347314a
by Everett Bogue <ev@evbogue.com> · 2025-08-26T20:13:47.000Z

Changed files (3) +22 -14

README.md +10 -1
……@@ -2,23 +2,32 @@
22
33the **A**uthenticated and **N**on-networked protocol or **AN**other protocol
44
5ed25519 keypairs sign timestamp + hash in base64
6
7***
8
59(we wanted aproto, but the dot com was taken)
610
711[anproto.com](https://anproto.com)
812
913try it at [anproto.com/try](https://anproto.com/try) or use a client such as [wiredove](https://wiredove.net/)
1014
15***
1116
12ed25519 keypairs sign timestamp + hash in base64
17### What is ANProto?
1318
1419+ ANProto is the spiritual successor to [secure-scuttlebot](https://scuttlebot.io), but without all of the extra stuff that is difficult to maintain.
1520+ ANProto is an attempt to argue that [ATProto](https://atprotocom.) is too involved in it's own networking infrastructure to be usefully decentralized.
1621+ ANProto operates under the working theory that [Nostr](https://fiatjaf.com/nostr.html) will never reach anyone besides Bitcoiners.
1722
23***
24
1825### Bring your own network!
1926
2027ANProto 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!
2128
29***
30
2231### the JavaScript library!
2332
2433use Deno or your browser
example.js +8 -9
……@@ -1,19 +1,18 @@
11import { Hono } from "jsr:@hono/hono";
22import { serveStatic } from 'jsr:@hono/hono/deno'
3import { marked } from 'https://esm.sh/gh/evbogue/bog5@de70376265/lib/marked.esm.js'
34
45import { foot, head } from "./template.js";
56
67const app = new Hono();
78
9const readme = await Deno.readTextFile('./README.md')
10
811app.get('/', async (c) => {
912 const content = `
1013 <div id="scroller">
1114 <div class='message'>
12 <h1>ANProto</h1>
13 <p>Try ANProto online:</p>
14 <p><a href="./try">Try ANProto</a></p>
15 <p>The Official ANProto Client:
16 <p><a href="https://wiredove.net/">Wiredove</a></p>
15 ${await marked(readme)}
1716 </div>
1817 </div>
1918 `
……@@ -33,7 +32,7 @@ app.get('/try', async (c) => {
3332
3433 <p><strong>Step 1.</strong> Generate an ed25519 keypair</p>
3534
36 <code>const kp = await a.gen()</code>
35 <code>const kp = await an.gen()</code>
3736
3837 <input style='width: 100%;' id='key' placeholder='Make a keypair'></input>
3938
……@@ -45,7 +44,7 @@ app.get('/try', async (c) => {
4544
4645 <p><strong>Step 2.</strong> Hash your blob with sha256</p>
4746
48 <code>const hash = await a.hash(content)</code>
47 <code>const hash = await an.hash(content)</code>
4948
5049 <input style='width: 100%;' id='content' placeholder='Write a message'></input>
5150
……@@ -59,7 +58,7 @@ app.get('/try', async (c) => {
5958
6059 <p><strong>Step 3.</strong> Sign the ANProto message</p>
6160
62 <code>const sig = await a.sign(hash, keypair)</code>
61 <code>const sig = await an.sign(hash, keypair)</code>
6362
6463 <input style='width: 100%' id='sig'></input>
6564
……@@ -70,7 +69,7 @@ app.get('/try', async (c) => {
7069
7170 <p><strong>Step 4.</strong> Open the ANProto message</p>
7271
73 <code>const opened = await a.open(msg)</code>
72 <code>const opened = await an.open(msg)</code>
7473
7574 <input style='width: 100%;' id='openen'></input>
7675
style.css +4 -4
……@@ -11,7 +11,7 @@ body {
1111
1212blockquote { border-left: 5px solid #f5f5f5; margin-left: none; padding-left: 10px; color: #777; }
1313
14p, h1, h2, h3, h4, h5, h6 { margin-top: 0px; margin-bottom: 2px; }
14p, h1, h2, h3, h4, h5, h6 { margin-top: 5px; margin-bottom: 5px; }
1515
1616pre {
1717 //color: #dd1144;
……@@ -139,8 +139,8 @@ iframe {
139139 background-color: #181818;
140140 color: #f5f5f5;
141141 }
142 #navbar { background-color: rgba(24,24,24,0.2); border-bottom: 1px solid orange;}
143 #navbar a { color: orange;}
142 #navbar { background-color: rgba(24,24,24,0.2); border-bottom: 1px solid #FE7A00;}
143 #navbar a { color: #FE7A00;}
144144 #navbar:hover { border-bottom: 1px solid magenta;}
145145 .message { background-color: #222; border: 1px solid #333;}
146146 .message:hover { border: 1px solid magenta;}
……@@ -151,7 +151,7 @@ iframe {
151151 button:hover { background: #222;}
152152 hr { border: 1px solid #333;}
153153 pre, code { background: #333; color: #f5f5f5;}
154 a {color: orange;}
154 a {color: #FE7A00;}
155155}
156156
157157.content {margin-top: 5px;}