Hive (in portuguese). Attempt to make an interop layer to connect to dat on hyperswarm and legacy infra as well. Vaporware and might never be finished. Contributions welcome.
Write a pure rust network stack compatible with dat, to be able to run it on desktop (Win/Mac/Linux), mobile (and maybe wasm).
- Generate a binary that finds and talk to a LAN
dat
node: handshake and disconnect - Compile to Android
- next Create a connection pool that tracks dat peers, and track hypercore version to allow crossing bridges
- Bundle the static library into a Flutter app (validated as viable already with dat (legacy)) that displays the connection pool of dat peers for a given dat url (needs work)
- (strech goal) Support routers (MIPS)
- (stretch goal) validated as viable already with dat (legacy) Write a Flutter app (micro-app as in a micro-service) that syncs and share files, allowing to build other local-first apps without needing to bundle the network stack logic (like dat-desktop but for mobile and desktop without Node)
- (stretch-er goal) WASM and websocket integration
- (stretch-er goal) validated as viable already with dat (legacy) FFI bindings to be able to link into an iOS app and other languages (neon?/helix?/dart ffi?).
hyperswarm & hypercore-protocol compatibility
Uses NOISE protocol and a different handshake.
-
colmeia-hyperswarm-mdns
: Support to hyperswarm mdns infrastructure: based on hyperswarm/discovery-
Locator
: stream to find dat members in the network -
Announcer
: stream that announces a dat in the network -
Mdns
: announces and find dat in the network - Tests
- All protocol 1:1
-
-
colmeia-dht
: Interop with hypwerswarm dht infrastructure (:eyes: https://github.com/mattsse/hyperswarm-dht)- Tests
- All protocol 1:1
- wip
colmeia-hypercore
: Networked module for hypercore storage- Hypercore replicate logic
- Tests
- All protocol 1:1
- wip
colmeia-hyperdrive
: Networked implementation of content and metadata hypercore's-
Hyperdrive
: Use metadata to clone content hypercore feed (first block is content public key) - In memory
- Write to disk
- Impl remaining replicate logic for Hyperdrives
- Tests
- All protocol 1:1
-
- wip
colmeia-hyperstack
: Discovery integration of hyperdrives- Create a
Hypercore
struct that discovers and creates peeredfeed interactions - Tests
- Create a
- hyperdrive-daemon
- hyperdrive v10
- snow noise protocol
- hypercore-protocol-rust-experiments
- hypercore-protocol-rs
- Beaker Browser
Local dat2: be41e3d43d054982e14dfc60281d9d4425ab5d4b0b280a355b7927869ca08fc5
RUST_LOG=debug cargo run --bin colmeia-hyperswarm-mdns -- 7e5998407b3d9dbb94db21ff50ad6f1b1d2c79e476fbaf9856c342eb4382e7f5 8000
RUST_LOG=debug cargo run --bin colmeia-nc -- 7e5998407b3d9dbb94db21ff50ad6f1b1d2c79e476fbaf9856c342eb4382e7f5 127.0.0.1:3282
RUST_LOG=debug cargo run --bin colmeia-clone -- 192.168.15.173:3282 dat://6268b99fbacacea49c6bc3d4776b606db2aeadb3fa831342ba9f70d55c98929f
- No root required
Inside termux, install git
and rust
:
apk install git
apk install rust
git clone https://github.com/bltavares/colmeia
cd colmeia
cargo run # your desired bin
-
No root required
-
Windows: Using WSL2 (windows insider) allows you to use Docker from WSL. Follow this guide to enable docker
-
Mac/Linux: It should just need to have docker configured properly
-
Install cross
-
Cross compile to your target:
cross build --target armv7-linux-androideabi
- To find the correct target for your device:
adb shell uname -m
arch | target |
---|---|
armv7l | armv7-linux-androideabi |
aarch64 or arm64 | aarch64-linux-android |
arm* | arm-linux-androideabi |
mips-musl | mips-unknown-linux-musl |
*arm: (seems to be broken)
- Push to Android on a writeable location. Android does not allow binaries to be executed from the
/sdcard
:
# Once
adb shell mkdir -p /data/local/tmp/colmeia
adb shell chmod 777 /data/local/tmp/colmeia # Make it readable to let Termux read it as well
adb push ./target/armv7-linux-androideabi/debug/colmeia-mdns /data/local/tmp/colmeia
adb shell # open shell in android
chmod +x /data/local/tmp/colmeia/colmeia-server
RUST_LOG=debug /data/local/tmp/colmeia/colmeia-server 0.0.0.0:8787 dat://460f04cf12c3b9833e5a0d3dd8eea05eab59dd8c1438a7454afe9630b9b4f8bd
Termux from inside Android
Android don't allow execution from outside the app data dir, and you can't push data to other apps dir from adb push
. You need to copy the binary to your root folder, which should be executable.
Open the app and copy the content to the home folder:
# Inside termux shell
cp /data/local/tmp/colmeia/colmeia-server ~
RUST_LOG=debug ~/colmeia-server 0.0.0.0:8787 dat://460f04cf12c3b9833e5a0d3dd8eea05eab59dd8c1438a7454afe9630b9b4f8bd
It compiles with OpenWRT. Tested with 2 different routers on 18.06.1
and 19.07.2
.
Run and scp
the binaries on target/mips-unknown-linux-musl
:
cross build --target mips-unknown-linux-musl