Netron in the browser
Note about server-side Netron: the server lives inside Titan itself at
@omnitron-dev/titan/netron— including all four transports (HTTP / WebSocket / TCP / Unix). You don't install a separate package for the server. This section covers the browser-side clients only.
Two packages cover the browser side of Netron RPC:
| Package | Role | Framework |
|---|---|---|
@omnitron-dev/netron-browser | Transport layer — HTTP, WebSocket, middleware, auth, multi-backend | Framework-agnostic — vanilla JS, Vue, Svelte, Solid, Angular, Lit, React, Web Workers, Electron |
@omnitron-dev/netron-react | React-specific hooks, providers, cache, devtools | React-only |
For React apps you install both. For non-React apps install
just netron-browser:
# React apps:
pnpm add @omnitron-dev/netron-browser @omnitron-dev/netron-react
# Vue / Svelte / Solid / Angular / Lit / vanilla JS:
pnpm add @omnitron-dev/netron-browser
How they relate
netron-browser is the foundation and works in any
JavaScript environment. netron-react is an optional layer
that adds React glue: cache, suspense, providers, devtools,
multi-backend hooks. For Vue / Svelte / Solid / Angular / Lit
apps, wrap netron-browser calls in your framework's
reactivity primitives directly.
Deep dives
Topic-focused references:
- Transports — HTTP, WebSocket, auto-mode, reconnect tuning
- Middleware — three-stage pipeline, built-in middleware, custom middleware
- Caching — LRU cache, stale-while-revalidate, tag invalidation
- Auth manager — token rotation, cross-tab sync, inactivity timeout
- Multi-backend —
MultiBackendProvider, routing, per-backend hooks - Error handling — typed errors, retry classification, circuit breaker
- Testing — MockProvider, integration patterns
- SSR — dehydration / hydration
Quick start — single backend
import { NetronReactClient, NetronProvider, useService }
from '@omnitron-dev/netron-react';
interface UserService {
getUser(id: string): Promise<User>;
}
const client = new NetronReactClient({
url: 'https://api.example.com',
transport: 'auto',
});
function App() {
return (
<NetronProvider client={client}>
<UserCard userId="u_42" />
</NetronProvider>
);
}
function UserCard({ userId }: { userId: string }) {
const users = useService<UserService>('users');
const { data, isLoading } = users.getUser.useQuery([userId]);
return isLoading ? <Skeleton /> : <div>{data.email}</div>;
}
Quick start — multi-backend
import { createMultiBackendClient }
from '@omnitron-dev/netron-browser';
import { MultiBackendProvider, useBackendService }
from '@omnitron-dev/netron-react';
const client = createMultiBackendClient({
baseUrl: 'https://api.example.com',
backends: {
auth: { path: '/auth', transport: 'http' },
media: { path: '/media', transport: 'http' },
streams: { path: '/streams', transport: 'websocket' },
},
routing: {
patterns: [
{ pattern: 'users.', backend: 'auth' },
{ pattern: 'objects.', backend: 'media' },
{ pattern: 'events.', backend: 'streams' },
],
},
});
<MultiBackendProvider client={client}>
<Outlet />
</MultiBackendProvider>
function Component() {
const users = useBackendService<UserService>('auth', 'users');
const { data } = users.getUser.useQuery([id]);
}
See also
- Prism / Netron integration — re-export helpers via Prism
- Titan / Netron — server side
- Architecture — full cross-stack picture