AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
NET 지연 우선 암호화 메시 런타임
NET is a latency-first encrypted mesh runtime. Every device is a first-class node on a flat, encrypted topology. Nanosecond scheduling, zero-copy forwarding, capability-based routing. ~2.53 MB deploye
개발 도구Rust · TypeScriptGitHub @ai-2070온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Net. An event-first real-time streaming event bus on an intelligent UDP mesh network. Loosely inspired by the Net from Cyberpunk.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Net is what the internet would look like if it were built today — the Net inspired by the Cyberpunk
universe, built for real machines. A flat, latency-first, end-to-end encrypted mesh where every
computer, device, app, and agent is an equal node: no clients, no servers, no coordinators. The mesh
propagates state, not connections.README 전문 보기 ↗Website · Docs · Quickstart · Browser SDK · NET for games · Release notes
Net is what the internet would look like if it were built today — the Net inspired by the Cyberpunk universe, built for real machines. A flat, latency-first, end-to-end encrypted mesh where every computer, device, app, and agent is an equal node: no clients, no servers, no coordinators. The mesh propagates state, not connections.
You find what another machine can do, call it through typed RPC, and move artifacts between participants — while whoever owns a resource keeps control of access. Identity, discovery, channels, typed RPC, durable logs, folded state, and artifacts are one substrate, so the same mesh runs vehicular, industrial, robotics, and edge workloads.
How the mesh works
Bytes, so moving them through the bus is a pointer bump, not a copy.What that gives you
Status: pre-1.0. Major releases may break APIs — pin and read the release notes. The wire format is versioned separately, and subprotocol IDs are permanent.
One engine, several bindings — start with the package for your language:
cargo add net-mesh-sdk # Rust
npm install @net-mesh/sdk @net-mesh/core # TypeScript / Node
pip install net-mesh-sdk # Python
go get github.com/ai-2070/net/go # Go
Published names and source imports differ on purpose: the crates/registries use
net-mesh* / @net-mesh/*, while source imports are net_sdk, @net-mesh/sdk, and
from net_sdk import .... Lower-level bindings that skip the SDK ergonomics are in
SDKs. Full per-language setup:
Install, Quickstart.
Benchmarks
2.19 ns, 456 M ops/sec37.7 ns, 26.5 M ops/sec61.7 ns, 16.2 M ops/sec39.8 ns, 25.2 M ops/sec291 ns, 3.44 M ops/sec57.1 ns, 17.5 M ops/secThese measure local operations on an M1 Max — not NIC transfer, wire latency, or propagation. More under Performance.
An agent working from surface familiarity will write integration code that runs and is quietly wrong. Install the skills first:
npx skills add ai-2070/net-claude-skill -g # drop -g for the current project only
Pair them with opensrc so the agent can read Net's
real source instead of guessing a signature — one fetch covers all five bindings:
npx -y opensrc@latest path ai-2070/net
Full install options: Claude Skills.
Start a mesh node and put one event on it.
use net_sdk::Net;
let node = Net::builder().shards(4).memory().build().await?;
node.emit(&Hello { msg: "hello, mesh".into() })?; // a receipt, or an error
import { NetNode } from '@net-mesh/sdk';
const node = await NetNode.create({ shards: 4 });
node.emit({ msg: 'hello, mesh' });
await node.shutdown(); // explicit — Node finalizers are not deterministic
The memory adapter accepts and counts events; it does not retain them, so a subscriber would never yield. For a round trip, run two nodes over the mesh transport — see Event bus.
A few commands, two machines. One machine runs a node and hands out a join link. The other
uses the link and runs its own node. up makes the mesh key for you, so nothing secret is copied
by hand.
npm install -g @net-mesh/cli # installs the `net-mesh` binary
net-mesh up --enroll # operator: runs the node, stays in the foreground
net-mesh invite create # prints a `netmesh-join_` token — keep it secret
net-mesh join <TOKEN> --yes && net-mesh up # device: use the link, then run its own node
Capabilities, authority, and state on one substrate change what you can build. Each point leads with the knobs you'd set; the links go deeper.
Distance becomes a parameter, not a rewrite. Call a capability by name; the mesh decides where
it runs. deadline=500ms, routing=lowest-latency.
Discover and invoke,
Architecture.
Sensing and computation stop sharing a body. A device produces data without hosting the code
that acts on it. channel=sensors/lidar/front, reliability=reliable.
Capabilities,
Dataforts.
Coordination that never funnels through a coordinator. No registry, broker, or leader to cap
it. shards=16, backpressure=drop-oldest.
Event bus,
Capabilities.
Software that outlives its host. A daemon is an identity, not a process pinned to a box.
placement=nearest, replicas=3.
Daemons and placement,
Continuity and migration,
Task lifecycle.
These show up in agent runtimes, robotics and fleet operations, industrial control, edge and IoT, and local-first collaboration. Built end to end: Distributed daemon, Event-sourced service, Fleet telemetry.
An intersection has no line of sight: a building hides the cross traffic from the vehicle approaching it. A second vehicle, coming the other way, can see. Neither can hand over its sensors — the raw frames belong to the machine that produced them — but the observation can travel.
The vehicle that can see serves the view under its own authority:
use net_sdk::mesh::MeshBuilder;
use net_sdk::org::{OrgAccess, OrgCaller};
use serde::{Deserialize, Serialize};
use schemars::JsonSchema;
const PSK: [u8; 32] = [0x42; 32];
#[derive(JsonSchema, Deserialize, Serialize)]
struct ObserveReq { intersection: String }
#[derive(JsonSchema, Deserialize, Serialize)]
struct Observation { class: String, distance_m: f32 }
#[derive(JsonSchema, Deserialize, Serialize)]
struct CornerView { objects: Vec<Observation>, confidence: f32 }
// The node authority and the fleet credentials are provisioned out of band (see
// "Private capabilities"); `onboard_sensors` / `perceive_corner` are application code.
let seeing = MeshBuilder::new("0.0.0.0:7700", &PSK)?.build().await?;
// Serve to this fleet only. `OrgAccess::Granted` admits another operator's vehicle
// holding a capability grant. Hold the handle for the provider's lifetime — dropping
// it unregisters the service.
let _serve = seeing.serve_org("intersection.observe", OrgAccess::SameOrg, |caller: OrgCaller, req: ObserveReq| async move {
// The raw frames and the perception model never leave this vehicle.
Ok(perceive_corner(&onboard_sensors(), &req.intersection).await?)
})?;
The vehicle in the blind spot asks by capability — no peer was configured in advance:
// The blind-spot vehicle: same mesh and PSK; its fleet credentials are provisioned
// out of band. Handshake with the seeing vehicle (accept on one side, connect on the
// other, both start) before the call.
let blind_spot = MeshBuilder::new("0.0.0.0:7700", &PSK)?.build().await?;
let org = blind_spot.org(credentials)?; // sees only what this fleet may see
let view: CornerView = org
.call("intersection.observe", &ObserveReq { intersection: "5th & Main".into() })
.await?;
// The blind spot closes on a derived observation, not on a camera feed.
Two sensors addressed each other; neither owned the other's hardware, and neither handed over its data. The seeing vehicle keeps its frames and its model, and the caller receives exactly what it asked for and nothing more. A vehicle whose operator holds no grant is not shown the capability at all — the private announcement is opaque without the audience, so discovery finds nothing and the call refuses locally, before anything is sent. Private capabilities, Security model. When the caller needs more than the typed view — a clip, an occupancy grid — it travels as a content-addressed artifact: Dataforts.
A provider has an identity; its capabilities are discovered under that identity and its owner's authority; a caller invokes one; and the results, streams, state, and artifacts stay attached to the work. These are not separate products joined by glue — identity, discovery, channels, typed RPC, durable logs, folded state, and artifacts are one substrate, so authority and observation travel with the call instead of being re-established at every boundary. Architecture, Identity, Capabilities, nRPC, Durable logs, Folds, Dataforts, Daemons.
Underneath sits a flat, encrypted mesh. Three properties do most of the work.
Identity outlives a path. A node is its keypair, and its address is incidental. If a route breaks, traffic is rerouted and the participants keep the same identity — there is no session to resume, because nothing was bound to the socket in the first place. Read: Architecture, Events and causality.
Bounded buffers, explicit overload behaviour. Every node has a fixed-capacity ring buffer.
When it fills, the node drops — oldest or newest, per configuration — instead of growing an
unbounded queue or blocking its producer, and stats().events_dropped surfaces it. A node that
cannot keep up goes quiet, and its neighbours route around it. Net's hot path needs those
drop-not-queue semantics, which is why it carries its own transport over UDP rather than layering
on TCP. Read: Event bus.
No trusted middle. Relay nodes forward encrypted bytes they cannot read, and there is no special node whose absence stops the mesh. Read: Security model.
The performance story — what is fast, and what the numbers do and do not include — is scoped in Performance.
Net's unit is a capability offered by a provider, together with the authority and live state needed to use it. Other systems organize distributed work around different objects — HTTP around an endpoint, MCP around a tool a configured host may call, NATS around a subject, Zenoh around a key expression. Net addresses capabilities under identity and authority — so it looks like a message broker from the outside and is not one underneath, and code written from API familiarity runs and is quietly wrong.
That makes it a substrate beneath applications, not a replacement for their workflows or business model: a workspace, fleet console, agent runtime, or industrial application can use Net and keep its own interface, approvals, and user experience.
Discovery, invocation, and outcome are separate: finding a provider does not authorize a call, and a successful invocation is not proof that the real-world outcome holds. See Submitted is not completed.
The rest of the surface, one line each; every entry links to the page that goes deep.
| Surface | One line | Read |
|---|---|---|
| Organizations | Cross-org authority: memberships, grants and revocation floors over one identity | Organizations |
| Subnets | Boundaries derived from capability tags, enforced at the channel — not VLANs | Subnets |
| Subprotocols | Opaque forwarding, version negotiation, a protocol runtime not a fixed protocol | Subprotocol IDs |
| RedEX & CortEX | Durable append-only logs, and the folded state built on them | Storage stack, Durable logs, Folds |
| MeshDB | Federated queries across nodes over the same facade | Federated queries |
| MeshOS | Long-running stateful daemons, placement and lifecycle | Daemons and placement |
| Scheduler | Atomic gang-claim of a contended resource, with a task lifecycle on top | Gang scheduler, Task lifecycle |
| CLI | net-mesh — managed nodes, join links, capability hosting, typegen, local stores | CLI reference |
Full set and methodology in
net/crates/net/BENCHMARKS.md. Each measures one operation in isolation, not the cost
of a packet path. None includes NIC transfer, wire latency, or propagation.
All SDKs wrap the same Rust core. The SDK is the developer experience; the engine is Rust.
| SDK | Package | Install |
|---|---|---|
| Rust | net-mesh-sdk (source) | cargo add net-mesh-sdk |
| TypeScript | @net-mesh/sdk (source) | npm install @net-mesh/sdk @net-mesh/core |
| Python | net-mesh-sdk (source) | pip install net-mesh-sdk |
| C | net.h (source) | cargo build --release --features ffi,net |
| Go | go | go get github.com/ai-2070/net/go |
Lower-level bindings (skip the SDK ergonomics, talk directly to the engine):
| Binding | Package | Install |
|---|---|---|
| Rust core | net-mesh | cargo add net-mesh |
| Node binding | @net-mesh/core | npm install @net-mesh/core |
| Python binding | net-mesh | pip install net-mesh |
The bindings are not at parity. This is the short version; the full matrix — with the reason behind every gap — is binding coverage.
| Feature | Rust | Node / TS | Python | Go | C |
|---|---|---|---|---|---|
| Event bus — ingest + poll | ✓ | ✓ | ✓ | ✓ | ✓ poll |
| Mesh channels — register / subscribe / publish | ✓ | ✓ | ✓ | ✓ | ✓ |
| Capability announce + discovery | ✓ | ✓ | ✓ | ✓ | ✓ |
| nRPC — typed request/response + streaming | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gang-claim scheduler | ✓ | ✓ | ✓ | ✓ | ✓ |
| Organization capability auth | ✓ | ✓ | ✓ | ✓ | ✓ |
| Subnet exports — serve + call | ✓ | ✓ | ✓ | ✓ | ✓ |
| Dataforts — blobs | ✓ | ✓ | ✓ | ✓ | ✓ |
| RedEX / CortEX / MeshDB | ✓ | ✓ | ✓ | ✓ | ✓ |
| Compute / groups / daemons | ✓ | ✓ | ✓ | ✓ | ✓ |
| Deck — operator surface | ✓ | ✓ | ✓ | ✓ | ✓ |
| MCP bridge | ✓ | ✓ | ✓ | ✓ | ✓ |
| A2A — agent task handoff | ✓ | ✓ | ✓ | – | – |
| A2A — paid task admission | ✓ | ✓ | ✓ | – | – |
| Consumer-side filter DSL | ✓ | ✓ | ✓ | – | ✓ |
✓ supported · core-only reachable only through the low-level binding (@net-mesh/core,
net) · partial · – not exposed.
Net natively supports WebRTC: a browser tab becomes a real mesh node — same
identity, channels, and RPC as anything else — by connecting to a native anchor, a node built
with the webrtc feature. Against the binding coverage surface, a browser leaf gets:
Not exposed to a browser leaf:
Games. The browser leaf's netcode gives a web game multiplayer with no game server to run: players connect directly, and one player hosts or several share a match. Play Rose & Blade, a 16-player sword fight, or take apart Net Shooter, an open-source three.js FPS (play it). More in NET for games.
Read: WebRTC transport, Browser SDK, NAT and traversal.
Net (Network Event Transport) is loosely inspired by the Net from the Cyberpunk universe — a flat, encrypted mesh where every device is a first-class node. Not affiliated with CD Projekt Red or R. Talsorian Games; this is an engineering take on the concept, not a licensed adaptation. Implementation details, the module map, and code examples live in the crate README.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project shall be licensed as MIT OR Apache-2.0, at the recipient's option. Contributions are subject to the Contributor License Agreement, which must be signed before a first contribution is merged.
| Deck TUI | Operator TUI over the substrate | Deck |
| A2A | Hand a long job to an agent that doesn't share your memory | Agent to agent |
| Delegation | Child seeds and revocation for delegated identity | Agent identity |
| Payments | x402 pricing, quotes, settlement, spend policy — signed facts around a call | Net payments |
| MCP bridge | Wrap a stdio MCP server into mesh capabilities, or serve the mesh as MCP | Wrap MCP, Expose as MCP |
| Transports | Direct paths first, a blind relay as the fallback, WebRTC for browser leaves | NAT and traversal, WebRTC transport |
| Continuity | A daemon moves with its history when the hardware under it changes | Continuity and migration |
| Security | No plaintext on relays, no clock dependency, no trusted intermediary | Security model |