Skip to content

datrs/hypercore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

32999f7 · Oct 25, 2024
Oct 24, 2024
Oct 24, 2024
Jun 29, 2024
Oct 24, 2024
Oct 24, 2024
Aug 1, 2022
Feb 24, 2020
Mar 30, 2018
Oct 25, 2024
Oct 25, 2024
Mar 30, 2018
Mar 30, 2018
Oct 5, 2023

Hypercore

crates.io version build status downloads docs.rs docs

Hypercore is a secure, distributed append-only log. This crate is a limited Rust port of the original Javascript holepunchto/hypercore. The goal is to maintain binary compatibility with the LTS version with regards to disk storage.

See hypercore-protocol-rs for the corresponding wire protocol implementation.

Features

  • Create in-memory and disk hypercores
  • Append to hypercore either a single entry or a batch of entries
  • Get entries from hypercore
  • Clear range from hypercore, with optional support for sparse files
  • Support basic replication by creating proofs in a source hypercore and verifying and applying them to a destination hypercore
  • Support tokio or async-std runtimes
  • Support WASM for in-memory storage
  • Test Javascript interoperability for supported features
  • Add optional read cache
  • Support the new manifest in the wire protocol to remain compatible with upcoming v11
  • Finalize documentation and release v1.0.0

Usage

// Create an in-memory hypercore using a builder
let mut hypercore = HypercoreBuilder::new(Storage::new_memory().await.unwrap())
    .build()
    .await
    .unwrap();

// Append entries to the log
hypercore.append(b"Hello, ").await.unwrap();
hypercore.append(b"world!").await.unwrap();

// Read entries from the log
assert_eq!(hypercore.get(0).await.unwrap().unwrap(), b"Hello, ");
assert_eq!(hypercore.get(1).await.unwrap().unwrap(), b"world!");

Find more examples in the examples folder, and/or run:

cargo run --example memory
cargo run --example disk
cargo run --example replication

Installation

cargo add hypercore

Safety

This crate uses #![forbid(unsafe_code)] to ensure everythong is implemented in 100% Safe Rust.

Development

To test interoperability with Javascript, enable the js_interop_tests feature:

cargo test --features js_interop_tests

Run benches with:

cargo bench

Contributing

Want to join us? Check out our "Contributing" guide and take a look at some of these issues:

License

MIT OR Apache-2.0