IFM Developer Tools
Developer-facing products for building and operating IFM nodes. These are not public demos — the public demos (Station System, Relay Station, Radio Listener) live in docs/demos.
| Tool | Type | Purpose | Audience |
|---|---|---|---|
| Node UI | Terminal/TUI (Rust + ratatui) | Live node monitoring & control | Node operators, developers |
| CLI | ifm binary | Scripted node operations | Developers, automation |
| SDK | @ifm/sdk package | JavaScript/TypeScript API | Application developers |
Node UI (terminal dashboard)
A ratatui dashboard embedding a real node (libp2p QUIC by default) with Topology · Frequencies · Packets · Health · Logs tabs.
cargo run --example node_ui| Key | Action |
|---|---|
Tab / 1-5 | Switch tabs |
j / k / ↑ / ↓ | Navigate lists |
t / l | Tune / leave a frequency |
b | Broadcast a message |
p | Send a ping packet |
r | Refresh |
q / Ctrl+C | Quit |
Logs are captured from tracing into the Logs tab. Default filter: ifm=debug,warn (override with RUST_LOG), so chat/presence traffic and peer connect/disconnect events are visible while DNS/mDNS TRACE spam stays hidden.
CLI
The ifm binary exposes scripted node operations:
cargo build --release --workspace
ifm init # create identity + storage (~/.ifm)
ifm connect # connect the node
ifm tune 91.700 # tune to a public frequency
ifm tune private.team --key "base64secret==" # protected frequency
ifm broadcast "Hello, IFM!" # broadcast text on chat.general
ifm broadcast @notes.txt --type file # send a file
ifm send hello.txt # send a file's contents
ifm speak # interactive broadcast from stdin
ifm peers # list known peers
ifm scan # scan visible frequencies
ifm stats # node statistics
ifm leave # leave the current frequency
ifm disconnect # disconnect from the meshFull reference: CLI docs.
SDK
The @ifm/sdk TypeScript package — the application-facing API:
import { IFM } from "@ifm/sdk"
const radio = await IFM.create()
await radio.tune("91.700")
radio.on("message", (msg) => console.log(msg))
await radio.broadcast("91.700", "Hello, IFM!")A smoke script exercises the full API surface (tune, broadcast, publish, sendFile reassembly, events, stats):
cd packages/sdk
bun examples/smoke.mjsFull reference: SDK docs.