Web-Overlay is an experimental toolkit for constructing Web-based overlay networks, where each node (peer) is either a Web browser or a Node.js. WebRTC and WebSocket (actually Socket.io) connections are used as an interconnect between nodes.

Web-Overlay includes implementation of Connection Manager and a structured overlay network, Kirin. It also includes:

Web-Overlay is developed by Abe Lab at Osaka City University, Japan [Link].


GNU General Public License 3.0.




You need a Node.js installed on your computer. (We are using Node.js v12.16.xx for now.)

Get the source code from GitHub (as this software is not yet published as an npm package).

% git clone https://github.com/abelab/web-overlay.git

Install lerna locally.

% cd web-overlay
% npm install

Fetch dependencies

% npx lerna bootstrap

Transpile from TypeScript

% npx lerna run build


Detailed documentations are not available for now. Please refer the source code of sample programs below.

Sample Programs

Simple CUI-based unstructured overlay network

packages/unstructured directory contains an implementation of a very simple unstructured overlay network. Please visit this page for further information.

Web-based demo program

packages/demo directory contains a Web-based demo program, powered by Vue.js.

Start an initial node

The initial node (the first node of the overlay network) must be a Node.js node.

% cd packages/demo
% env DEPLOYMENT=localhost8080-initial npm run portal

This command starts the initial node based on the configuration file ./config/deployment/localhost8080-initial.json.

Your initial node will start listening on http://localhost:8080.

Run as the initial portal node
- NETWORK_ID: NET-b4bbd842
- LOG_SERVER_URL: http://localhost:8801
- OVERLAY: kirin
- MY_URL: http://localhost:8080
- HTTP ROOT: ..../packages/demo/dist
starting portal node...
initInitialNode succeeded
started: NodeId=cc348211, URL=http://localhost:8080
Command list: status, leave, quit, enable, disable

Join your Web browser

Access to http://localhost:8080 with your Web browser.

Enter some key (string) and push Join button. If everything goes well, your browser will join the overlay network. You can join multiple browsers (or multiple windows/tabs) to the network.

Note: here we assume that you run your browser on the same computer that runs the initial node. If you want to allow browsers on a different computer to join, you have to configure your initial node to have a proper URL. Make a copy of localhost8080-initial.json in the same directory and edit MY_URL in the JSON file, then run the initial node with the new configuration file. E.g., env DEPLOYMENT=myhost8080-initial npm run portal.

Initial Page

There are several links on the cyan stripe.

Finger tables

Finger Table





Primitive Chat



Web-Overlay includes an implementation of Kirin structured overlay network.

Kirin is a key-order preserving structured overlay network (KOPSON). In Kirin, each node has a unique key. You can send a message to a node by specifying a key (unicast) and also to a set of nodes by specifying a key range (multicast or range query).

Kirin is a ring-based overlay network and based on Suzaku structured overlay network, which is based on Chord#.


DDLL logo

Kirin uses a modified version of DDLL algorithm for managing distributed doubly-linked ring structure. DDLL supports node insertion, deletion, and failure recovery. This DDLL implementation is also included in Web-Overlay.


Kota Abe and Yuuichi Teranishi: "Suzaku: A Churn Resilient and Lookup-Efficient Key-Order Preserving Structured Overlay Network", IEICE Transactions on Communications, Vol. E102–B, No. 9, pp. 1885-1894, 2019. [Link1] [Link2]
Thorsten Schütt, Florian Schintke and Alexander Reinefeld: "Range queries on structured overlay networks", Computer Communications, Vol. 31, No. 2, pp.358-374, 2008. [Link]
Kota Abe and Mikio Yoshida: "Constructing Distributed Doubly Linked Lists without Distributed Locking", In Proceeding of the IEEE International Conference on Peer-to-Peer Computing 2015 (P2P 2015), 2015. [Link1] [Link2]


This work was supported by JSPS KAKENHI Grant Number 16K00135.

Fri Jun 19 20:50:48 JST 2020