Ivan FB 1b25e5c327
refactor: collapse waku-sys into waku-bindings
waku-sys was a thin -sys crate that only re-exported the generated FFI
sources via #[path] and carried the build. It sat between waku-bindings
and the generated crate for no real benefit -- the generated crate is the
actual -sys equivalent, and its own build.rs cannot build logos-delivery
(bare `nim c`, one link directive). So the wrapper is folded in:

- The build (make liblogosdelivery + the 13 link directives, librln
  discovery, cmd.c) moves into waku-bindings/build.rs.
- waku-bindings pulls the generated ffi/types/api modules directly by
  #[path] into the vendor submodule, which moves from waku-sys/vendor to
  the repo root (vendor/).
- ciborium/flume and the cc build-dep move over; the waku-sys path
  dependency is dropped.

Consumers are unaffected -- they always depended only on waku-bindings.
This is one crate and one layer fewer.

build.rs now also removes a stale build/liblogosdelivery.dylib after the
static build: the generated ffi.rs declares `#[link(name =
"logosdelivery")]` with no kind, so a dylib left by a non-STATIC make
would be linked dynamically over the static archive.

Full suite passes (4 tests + doctest, 1 ignored) and all three examples
build.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 16:47:10 +02:00
2023-05-12 15:13:18 +02:00

Waku Rust bindings

Crates.io Documentation Build Status Codecov Status

Rust layer on top of logos-messaging-nim C FFI bindings.

Using the crate

For now this crate is consumed from a local checkout rather than a registry.

  1. Clone the repo and check out the branch you want:

    git clone --recurse-submodules https://github.com/logos-messaging/logos-delivery-rust-bindings
    cd logos-delivery-rust-bindings
    git checkout <branch>
    git submodule update --init --recursive
    
  2. Point your app at it by path:

    # your app's Cargo.toml
    [dependencies]
    waku-bindings = { path = "../logos-delivery-rust-bindings/waku-bindings" }
    

Build prerequisites

waku-bindings builds the underlying Nim library from source the first time, so the toolchain has to be present:

  • Nim and nimble (installed by the vendored make targets, or bring your own on PATH)
  • make and a C/C++ toolchain
  • A Rust toolchain (RLN is built from source)

The first build compiles the whole logos-delivery tree and is slow; subsequent builds are incremental.

What you can call

Everything is driven through LogosDeliveryCtx (re-exported at the crate root). The crate docs group the available operations — node lifecycle, messaging, reliable channels, and the typed event listeners — under Operations; run cargo doc --open -p waku-bindings for the full, linked method list. A minimal end-to-end example lives in examples/basic.

About Waku

Waku is a family of robust and censorship-resistant communication protocols enabling privacy-focused messaging for Web3 applications.

Private. Secure. Runs anywhere.

Read the Waku docs

Description
Rust wrapper over nwaku ffi
Readme
Languages
Rust 99.6%
C 0.4%