Etoki

Developers

Automate Etoki with bots

A headless daemon and typed SDKs let you build assistants, integrations, and services on the same private, onion-routed network.

Headless daemon

etokid runs your identities without a UI: token-gated sessions, profile-scoped operations, and the full invitation and messaging lifecycle.

Versioned API

A stable WS/JSON API (with gRPC on the roadmap) plus a push event stream for conn.open, msg.text, file.offer, and conn.closed events.

Rust & TypeScript SDKs

A typed async Rust client and a matching @etoki/bot TypeScript client with types generated from the API schema — for Node, browser, or dashboards.

Bot relay

An optional HTTP/HTTPS bot relay with rate limiting and priority handling for managed, webhook-driven bots.

Echo bot in ~10 lines

bot.ts
import { EtokiClient } from "@etoki/bot";

const bot = new EtokiClient({
  url: "ws://127.0.0.1:7001",
  token: process.env.ETOKID_TOKEN!,
});

bot.on("msg.text", async (evt) => {
  await bot.sendText(evt.connId, `echo: ${evt.text}`);
});

await bot.connect();

The daemon multiplexes requests and streams events, so a bot just subscribes and replies. Keep the daemon token on a private network.

Run your own relays

Bots talk to a daemon that connects through your routers. Spin up the whole stack in minutes.