Docs/browserv1.0.0-rc.1

Browser applications

Use @tagna/udiot/browser for browser-oriented components, state, observables, forms, routing, in-memory events and micro-frontends. Use @tagna/udiot/database/browser for its separately configured client integrations. Do not assume root, Node, server, database-server or AI-provider imports are safe to bundle into a browser application.

State example

import assert from 'node:assert/strict';
import { createStore } from '@tagna/udiot/browser';

const store = createStore({ count: 0 }, (state, action) =>
  action.type === 'increment' ? { count: state.count + 1 } : state,
);
await store.dispatch({ type: 'increment' });
assert.equal(store.getState().count, 1);

The assertion runs in Node as a logic test. In your browser app remove the Node assert import and connect subscriptions to your view, cleaning them up on unmount. This example is not a DOM/browser compatibility test.

Build and security

Use a bundler with moduleResolution: Bundler; see TypeScript setup. Verify decorator metadata support if using implicit constructor injection. Inspect built assets for Node built-ins, server packages, development tooling and secrets.

Keep private provider keys, service-role credentials and server authorization logic on the server. A public client configuration is not proof that access controls are configured correctly. Validate requests server-side.

Browser/component/MFE surfaces remain experimental. Selected packed smoke tests cover Chromium, Firefox and WebKit, not every feature or version. Test your application's navigation, DOM lifecycle, cleanup, persistence and network failure behavior. Root UI helpers are not all re-exported by /browser; use the export inventory to check a particular symbol.

See the browser safety contract, micro-frontends, forms and hydration boundaries.

From the canonical UDIOT public documentation.Try it in the playground ↗