https://github.com/sidebandtech/sideband
Browser ↔ local daemon communication SDK for TypeScript, without WebSocket plumbing.
https://github.com/sidebandtech/sideband
agent browser bun bunjs daemon e2ee local-first multiplexing nat-traversal networking p2p rpc sdk secure-communication transport typescript web-ui websockets
Last synced: 26 days ago
JSON representation
Browser ↔ local daemon communication SDK for TypeScript, without WebSocket plumbing.
- Host: GitHub
- URL: https://github.com/sidebandtech/sideband
- Owner: sidebandtech
- License: apache-2.0
- Created: 2025-11-23T00:03:35.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-03-05T22:12:39.000Z (28 days ago)
- Last Synced: 2026-03-06T02:41:48.491Z (28 days ago)
- Topics: agent, browser, bun, bunjs, daemon, e2ee, local-first, multiplexing, nat-traversal, networking, p2p, rpc, sdk, secure-communication, transport, typescript, web-ui, websockets
- Language: TypeScript
- Homepage: https://sideband.tech
- Size: 4.75 MB
- Stars: 6
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Notice: NOTICE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Sideband
[](https://github.com/sidebandtech/sideband/actions)
[](https://www.npmjs.com/package/@sideband/peer)
[](https://www.npmjs.com/package/@sideband/cloud)
[](https://www.npmjs.com/package/sideband)
Browser ↔ daemon/agent communication — direct or E2EE cloud-relayed, with typed RPC and events.
> **Early-stage.** APIs may evolve. If you're building on this, [reach out](mailto:hello@sideband.tech) — feedback shapes the protocol.
## Quick start
### Cloud relay (zero setup)
```bash
npx sideband
```
Starts a relay-connected daemon, prints a Quick Connect URL. Open it in any browser to call RPCs over E2EE immediately. See [`sideband` CLI docs](packages/cli/README.md).
### Local (direct WebSocket)
```ts
import { listen } from "@sideband/peer/server";
// Daemon
const server = await listen({
endpoint: "ws://localhost:8080",
onConnection(peer) {
peer.rpc.handle<{ msg: string }, string>("echo", (p) => p.msg);
},
});
```
```ts
import { createPeer } from "@sideband/peer";
// Browser / client
const peer = createPeer({ endpoint: "ws://localhost:8080" });
await peer.connect();
const api = peer.rpc.client<{ echo: (p: { msg: string }) => string }>();
const result = await api["echo"]({ msg: "hello" }); // "hello"
```
### Cloud relay (SDK)
```ts
import { listen } from "@sideband/cloud";
// Daemon — outbound connection to relay, no open port
const server = await listen({
apiKey: process.env.SIDEBAND_API_KEY,
identityKeyPair: await loadOrCreateIdentityKeyPair(),
onConnection(peer) {
peer.rpc.handle("echo", (p: { msg: string }) => p.msg);
},
});
```
```ts
import { connect, createMemoryIdentityKeyStore } from "@sideband/cloud";
// Browser / client
const peer = connect({
daemonId: "d_abc123",
getAccessToken: () => auth.getSessionToken(),
identityKeyStore: createMemoryIdentityKeyStore(),
});
await peer.whenReady();
const result = await peer.rpc.call("echo", { msg: "hello" }); // "hello"
```
## Packages
Most apps start with `@sideband/peer` (local) or `@sideband/cloud` (relay). Lower-level packages are for custom transports and advanced use cases.
| Package | Role |
| -------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| [`@sideband/peer`](https://www.npmjs.com/package/@sideband/peer) | High-level SDK |
| [`@sideband/cloud`](https://www.npmjs.com/package/@sideband/cloud) | Cloud relay SDK ([sideband.cloud](https://sideband.cloud)) |
| [`@sideband/protocol`](https://www.npmjs.com/package/@sideband/protocol) | Wire format, frame types, codecs |
| [`@sideband/transport`](https://www.npmjs.com/package/@sideband/transport) | Transport ABI and shared utilities |
| [`@sideband/runtime`](https://www.npmjs.com/package/@sideband/runtime) | Session lifecycle, routing, RPC correlation |
| [`@sideband/rpc`](https://www.npmjs.com/package/@sideband/rpc) | Typed RPC layer |
| [`@sideband/secure-relay`](https://www.npmjs.com/package/@sideband/secure-relay) | E2EE relay protocol |
| [`@sideband/transport-ws`](https://www.npmjs.com/package/@sideband/transport-ws) | WebSocket transport (Browser/Node/Bun) |
| [`sideband`](https://www.npmjs.com/package/sideband) | Relay-connected daemon CLI (`npx sideband`) |
## Develop
```bash
bun install
bun test
```
Requires Bun ≥ 1.3.
## Docs
- **[Getting Started](https://sideband.tech/guide/)** — build your first browser ↔ daemon connection
- **[Protocols](https://sideband.tech/protocols/)** — SBP wire format, SBRP E2EE, and RPC envelope specs
## License
- **Code**: [Apache-2.0](LICENSE)
- **Docs**: CC BY 4.0