Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

iroh blobs browser demo

This example runs iroh-blobs in the browser, compiled to web assembly. For now, only the in-memory store works in the browser, so there is no persistence.

The demo implements a very simple blobs app where endpoints provide some text string as a blob, and others can download it. We have a shared library, a module that exposes this as a WASM module to web browsers, and a command line interface.

Run the browser version:

To build and run it yourself, follow these steps:

$ cargo install wasm-bindgen-cli
$ rustup target install wasm32-unknown-unknown
$ npm install
$ npm run build
$ npm run serve

Then, open http://localhost:8080. The app will print instructions on how to connect and accept connections.

To build in release mode and apply optimizations to reduce the wasm size, run npm run build:release instead.

Run the CLI version:

To provide a blob:

cargo run --features cli -- provide "some text to share"

To download from a ticket:

cargo run --features cli -- download <TICKET>

Navigate the code

This folder contains a single Rust crate that can be compiled to both webassembly for the browser and to a commad line.

  • The shared code between WASM and CLI lives in src/node.rs.
  • A WASM-only wrapper around the BlobNode defined there lives in src/wasm.rs. It mostly is concerned with converting types to browser-supported equivalents.
  • The CLI binary is src/bin/cli.rs
  • The web app (simple vanilla JS) lives in [public].

Running npm run build first compiles the crate to WASM, then creates the JavaScript browser bindings with wasm-bindgen, and puts the result into public/wasm, from where the wasm is imported in the main.js.

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.