# tosijs/state (DOM-free)

State that belongs to no framework — and no *environment*. `tosijs/state`
is the observable-state layer with **no DOM globals touched at import**, so
it loads in plain Node, a worker, an SSR pipeline, or a migration script
with no `happy-dom` shim in sight:

    import { tosi, observe, boxed } from 'tosijs/state'

    const { app } = tosi({ app: { count: 0 } })
    observe('app.count', (path) => console.log('changed:', path, boxed[path].value))
    app.count = 1

Everything here is identical to the same export from `tosijs` — this is a
narrower door onto the same house, not a different implementation. Bindings,
components, CSS and the agent surface live behind the main entry (and
`tosijs/core`), because those genuinely need a DOM.

Observers still fire in a DOM-free environment; there is simply nothing
bound for them to update.

> Closes tosijs#18 (raised from react-tosijs, which consumes exclusively
> DOM-free API).
