Skip to content

Instantly share code, notes, and snippets.



View GitHub Profile
RangerMauve / merge-post-examples.js
Created Mar 8, 2022
Merge post searches for USHIN-db
View merge-post-examples.js
Start searches on each DB
Start pulling values from each iterator in a "puller"
"pullers" keep track of the latest state of an iterator, and enable pulling more data out
While there is still new data:
Find the puller with the latest piece of data
Get it's value
Pull the next item in that iterator
Yield the found value

Hyperswarm Web 2

  • Actively prioritize WebRTC connections
    • Before looking up on hyperswarm-proxy, do WebRTC search
  • Optimize for fast initial connection
    • Debug performance to get the first peer ASAP
  • Strip out unneccessary dependencies
    • discrovery-swarm-webrtc has a lot of stuff in it, use lower levels instead
    • Use MMST directly to reduce overall connections
  • Agressive deduplication
RangerMauve /
Last active May 16, 2021
Hyperbee Indexed DB

Hyperbee Indexed DB


Hyperbee is super useful for storing data and searching for data using it's ordered key search. When you set up your keyspace just right, you can query a small subset of a large database and quickly load what you need without having to download the entire dataset or traverse it.

This module seeks to make it easier to set up these indexes for JSON data and to make it easy to query large datasets.

How it works


Acess Control In Hypercore

Allow Lists

One way to revoke access to a hypercore is to control who is allowed to replicate a hypercore.

WHen you create hypercore replication stream you can control when feeds can be added or removed.

As well, after a replication stream is created you can see a peer's remote public key which can be used to securely identify a peer in the network.

RangerMauve / filesystem.js
Created Mar 27, 2021
Test opening a write stream for the FileSystem API
View filesystem.js
// Execute this in Chrome Dev Tools on an HTTPs web page
// Choose a file on your FS
[fileHandle] = await window.showOpenFilePicker();
// This will throw an error on Electron 12
writable = await fileHandle.createWritable();

GNOME Palette

  • Kinda like web-palette but for Linux desktop
  • Use GJS's AT-SPI bindings
  • Search for every button / heading / hyperlink on the page
  • Generate a palette which lets you fuzzy match
  • Integrate with shell as a search providr? Look at this extension
RangerMauve / DatArchive.dream.js
Created Aug 27, 2019
Dream DatArchive API for extensions / peers
View DatArchive.dream.js
const archive = await DatArchive.load('someurl', {
// Gets passed down to hyperdrive constructor
extensions: ['example', 'foo', 'bar']
archive.addEventListener('extension', ({detail}) => {
const {type, message, peer} = detail
if(type === 'foo') {
// Similar to the hypercore API:
RangerMauve /
Last active Jul 30, 2019
Corestore API proposal

Corestore API Proposal


  • Storing multiple hypercores in a single "group"
  • Purging storage for a given hypercore key
  • Able to replicate whole group
  • Specifying which key should be used for replication handshake

API (from the SDK)

View gist:62501c98b42c63f2de6ee0644a6852ff
WebRTC, unlike Dat, requires doing a handshake through a third party.
With beaker, that third party can be the existing P2P connections that you have.
To connect between two peers you need to do the following:
- Create a Dat Archive for the call website
- Listen on messages in the [dat-peers API](
- Have the user enter a "room"
- Set up the WebRTC connection, send the SDP handshake and the `room` through datPeers
- When you get messages for your room, pass them to the local PeerConnection as being remote SDP or ICE
RangerMauve /
Last active Apr 9, 2019
Tools in the Dat Toolbelt

Dat Toolbelt

Dat has a cool ecosystem with a bunch of different people working on interesting things. This is a list of what I'd like to have in an official Dat Toolbelt along with tutorials on how to use these tools.


  • Files
    • Create a file, share it with a dat:// link
  • All archives should be multiwritable, with mounts / etc