Home

Awesome

willow-js

This is a implementation of the Willow protocol written in TypeScript.

API

This module is published on JSR. Please see the @earthstar/willow page for installation instructions.

API documentation can be found here.

Overview

willow-js includes:

This is a low-level module for people to build their own protocols on top of, like Earthstar. It is an extremely generic and modular codebase, with many parameters to configure.

Parameters

These parameters have been abstracted as various Scheme interfaces, e.g. NamespaceScheme, SubspaceScheme, FingerprintScheme. At src/test/test_schemes.ts you can find a full suite of schemes used to configure willow-js during tests. Use these to experiment with willow-js. When you want to configure these parameter schemes yourself, please see each scheme's accompanying documentation.

Using Store requires these schemes:

Using WgpsMessenger requires all prior schemes, as well as the following:

Interfaces

In addition to these parameters, it's possible to configure willow-js to use different drivers for entry and payload storage, transports during sync, or even different data structures to write and retrieve data from.

Most of the interfaces are geared around changing the way Store works:

WgpsMessenger can communicate with peers via different transports using the Transport interface. Currently we have transports for WebSockets and in-memory.

willow-js' Most Wanted

Here is a list of features we want to implement in willow-js. We welcome all contributions.

The number of ๐ŸŒถ emoji next to each item indicates a scientifically measured estimated challenge level for each of these undertakings, three peppers being the maximum.

Storage

Sync

WgpsMessenger is currently compliant with the WGPS. However there are a number of optional enhancements yet to be implemented:

Dev

Deno is used the development runtime. Run deno task test to run tests.


Want to follow along with development, ask questions, or get involved yourself? Come and join us on the Earthstar Project Discord.


This project was funded through the NGI Assure Fund, a fund established by NLnet with financial support from the European Commissionโ€™s Next Generation Internet programme, under the aegis of DG Communications Networks, Content and Technology under grant agreement โ„– 957073.