Open source · MIT licensed

Distributed resources, live, over one binary wire protocol.

Esiur turns plain objects into networked resources: properties stay in sync in real time, methods call like local functions, and events propagate to every subscriber. One self-describing protocol — EP — with wire-compatible, actively developed implementations for .NET and TypeScript.

Implementations

Pick your stack

Two actively maintained implementations, both speaking the same EP protocol — a .NET server and a TypeScript client (or vice versa) interoperate directly, with no translation layer in between.

.NET Standard 2.0 · NuGet

Esiur for .NET

Source-generated resources, native TCP and ASP.NET Core WebSocket hosting, Entity Framework Core and MongoDB stores, multi-step authentication, and AES-256-GCM session encryption.

dotnet add package Esiur.AspNetCore --version 3.0.0
Read the .NET guide →
Node.js 18+ & Browsers · npm

Esiur for TypeScript

Connect from any browser or Node process, host resources with EpServer, stream async generators pull or push, and relay resources across nodes — no code generation required.

npm install esiur
Read the TypeScript guide →
Why Esiur

Built for systems that stay connected

A small set of primitives — resources, properties, events, and a warehouse to host them in — cover most of what real-time, distributed applications need.

Live properties & events

Assign a field on the server and every subscribed peer sees the update. No polling loops, no hand-wired change events.

Self-describing types

Attach to a resource path without a predeclared type — the server answers a type-definition query on demand and the client builds a typed proxy.

One binary protocol

EP is a compact, documented wire format over TCP or WebSocket — the same bytes on the wire regardless of which implementation is on either end.

🔒

Authentication & encryption

Multi-step handshakes for initializer, responder, or dual identity; password and post-quantum PPAP (ML-KEM-768) providers; AES-256-GCM sessions.

🕸

Federation & relay

A resource fetched from one node can be re-served from another node's own warehouse — calls and events forward transparently through the relay.

Streaming

Exported functions can be async generators, streamed back chunk by chunk — pausable, resumable, and terminable mid-stream.

The shape of it

How it works

The same three steps, whichever language you start in.

1

Define a resource

Mark a class as a resource and export the properties, methods, and events you want visible to peers.

2

Host it in a Warehouse

Put the resource in a store, put the store in a Warehouse, and serve the warehouse over EP — TCP or WebSocket.

3

Attach from anywhere

Any Esiur client — .NET or TypeScript — attaches with an ep:// URL and gets a live, typed proxy back.

Read the wire format

EP's packet framing, value encoding, and authentication handshake are documented in full.