Skip to content

datrs/hypercore

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

About

Secure, distributed, append-only log

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Code of conduct

Stars

Watchers

Forks

Packages

No packages published