@momics/iroh-http-tauri
v0.5.2
Published
Tauri plugin for iroh-http peer-to-peer HTTP
Readme
@momics/iroh-http-tauri
Pre-v1.0. APIs may change between minor releases.
Tauri v2 plugin for iroh-http. Runs as a Rust plugin with capability-based permissions. Your frontend JS only gets the network access you grant.
Install
Frontend:
npm install @momics/iroh-http-tauriRust plugin in src-tauri/Cargo.toml:
[dependencies]
tauri-plugin-iroh-http = "0.3"Register in src-tauri/src/lib.rs:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_iroh_http::init())
.run(tauri::generate_context!())
.unwrap();
}To enable native httpi:// URL resolution in the webview (see
below):
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_iroh_http::builder().with_scheme().build())
.run(tauri::generate_context!())
.unwrap();
}Quick start
import { createNode } from "@momics/iroh-http-tauri";
const node = await createNode();
console.log("Node ID:", node.publicKey.toString());
node.serve({}, (req) => {
if (req.headers.get("Peer-Id") !== ALLOWED_PEER) {
return new Response("Forbidden", { status: 403 });
}
return new Response("hello");
});
const res = await node.fetch("httpi://<peer-public-key>/");
console.log(await res.text());Full API
The API is identical across Node.js, Deno, and Tauri: HTTP fetch/serve, QUIC sessions, mDNS discovery, and Ed25519 crypto. See the API overview for the complete reference.
Permissions
Tauri's capability system controls what the frontend can access. Declare
permissions in capabilities/default.json:
| Permission | Covers |
| ------------------- | --------------------------------------------- |
| iroh-http:default | createNode(), close(), node introspection |
| iroh-http:fetch | node.fetch() + body streaming |
| iroh-http:serve | node.serve() + body streaming |
| iroh-http:connect | Raw QUIC sessions (bidi streams, datagrams) |
| iroh-http:mdns | mDNS peer discovery |
| iroh-http:crypto | Key generation, signing, verification |
A typical app using fetch and serve:
{
"permissions": [
"iroh-http:default",
"iroh-http:fetch",
"iroh-http:serve"
]
}httpi:// scheme handler
Call .with_scheme() on the plugin builder to register httpi:// as a native
URI scheme in the webview. Once an endpoint is created, standard browser APIs
resolve httpi:// URLs directly through iroh-http-core — no JavaScript bridging
required.
// After createNode(), these all just work:
const res = await fetch("httpi://<peer-id>/path");
document.querySelector("img").src = "httpi://<peer-id>/photo.jpg";
document.querySelector("audio").src = "httpi://<peer-id>/track.flac"; // seeking supportedThe handler auto-binds to the first endpoint created. There is nothing else to configure.
GET only: The scheme handler resolves GET requests. Non-GET callers receive
405 Method Not Allowed. Usenode.fetch()for POST, PUT, DELETE.
Platform note: On macOS, Linux, and iOS the origin is
httpi://<nodeid>/path. On Windows and Android, Tauri rewrites the origin tohttp://httpi.localhost/path— the handler accounts for this automatically.
Tauri specifics
- Serve callbacks are delivered to the frontend via Tauri
Channelevents (push model). - All crypto functions are async (round-trip through the Rust plugin via Tauri invoke).
- QUIC sessions require the
iroh-http:connectpermission. - mDNS requires the
iroh-http:mdnspermission. - The
httpi://scheme handler (opt-in via.with_scheme()) enables native URL resolution without IPC overhead.
Supported platforms
| Platform | Architecture | Status | | -------- | :---------------------: | :----: | | macOS | x86_64 | ✅ | | macOS | aarch64 (Apple Silicon) | ✅ | | Linux | x86_64 | ✅ | | Linux | aarch64 | ✅ | | Windows | x86_64 | ✅ |
Other runtimes
| Runtime | Package |
| ------- | -------------------------------------------------------------------------------- |
| Node.js | @momics/iroh-http-node |
| Deno | @momics/iroh-http-deno |
License
MIT OR Apache-2.0
