# store

Signature
`store(): Store`

valdres
Create a store to hold all state

Creates a store instance that holds all atom and selector state and manages subscriptions. The store is the central hub for reading, writing, and subscribing to state.

## Usage

```ts
import { atom, store } from "valdres"

const myStore = store()
const countAtom = atom(0)
```

## Reading state

```ts
myStore.get(countAtom) // 0
```

## Writing state

```ts
// Set directly
myStore.set(countAtom, 42)

// Update based on previous value
myStore.set(countAtom, prev => prev + 1)
```

## Subscribing to changes

```ts
const unsub = myStore.sub(countAtom, value => {
    console.log("count changed:", value)
})

// Later: stop listening
unsub()
```

## Transactions

Batch multiple updates so subscribers only fire once:

```ts
myStore.txn(set => {
    set(atomA, 1)
    set(atomB, 2)
    // Subscribers fire once after the transaction completes
})
```

> **Warning**
>
>
> Selectors that depend on atoms updated in a transaction will only recompute once, after all updates are applied. This is the intended behavior for performance.

## The global store

`valdres` exports a shared `globalStore` — the store that global atoms synchronize through. Import it when you need store access outside of a component (scripts, tests, workers, cross-framework code):

```ts
import { globalStore } from "valdres"

globalStore.get(myAtom)
globalStore.set(myAtom, 1)
```

Inside a component you normally read and write through your framework's provider/context instead — see [Provider](https://valdres.dev/react/Provider).

## See also

- [Provider](https://valdres.dev/react/Provider) — provide a store to your component tree
- [useStore](https://valdres.dev/react/useStore) — access the current store in your components
