weavy is a prototype decentralized mail system, running on the Arweave network, according to the Weavemail protocol specifications, built during New York Blockchain Week.
It is deployed to the Arweave permaweb, so its messages and the web app itself are permanent and always available.
weavy uses the Arweave HTTP API, Arweave JS, and is deployed with Arweave Deploy.
Speaking to its technical implementation, it makes extensive use of sessionStorage
capabilities (for temporary storage of keyfiles and drafts) and context and reducers for mail-client application-level routing and app global state change.
weavy offers an enhanced experience over the original Weavemail protocol implementation, by offering a variety of new features, including:
- Simplified, familiar UI/UX
- Session-based keyfile storage
- More markdown element rich message bodies.
- Mail with Attachments
- Session-based mail drafts.
- Star Mail and a separate starred box for viewing
- Mail Outbox for viewing sent mails
- Mobile-responsiveness (except landing page).
- Integrated Notifications with a mail sent watcher that let user know when the mail is mined
- Integrated ArweaveId
- Backward compatibility with the original weavemail version
- Add caching of all mails
Sending messages
- Messages are encrypted with the recipients public key using RSA-OAEP.
- After encrypting the message contents for the recipient, messages are packaged into an Arweave transaction, signed, tagged, and submitted to the network.
- For attaching file, I have uploaded the file to ipfs and put the hash along with subject and encrypt the stringified version of object.
Receiving messages
- ArQL is used to collect messages from the network. The query asks for transactions that are a) addressed to you and b) tagged with
App-Name: permamail
. - When you click on a message to view it, the transaction is pulled from the network and decrypted using your private key.
weavy. is live at https://arweave.net/ojhOYPNfn8OmJmPtzu_cbQqds0avWH-Ilbr4ypAr8kE
Special credits to @Anish-Agnihotri, Great work with the landing page content and app too tbh 🚀
Test 14