> For the complete documentation index, see [llms.txt](https://docs.corets.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.corets.io/observables/store.md).

# Store

Source code is hosted on [GitHub](https://github.com/corets/store)

{% tabs %}
{% tab title="yarn" %}

```bash
yarn add @corets/store
```

{% endtab %}

{% tab title="npm" %}

```bash
npm install --save @corets/store
```

{% endtab %}
{% endtabs %}

Seamless React integration is shipped in a separate package:

{% content-ref url="/pages/-MeeGEsjHpNC1z04Kqfm" %}
[useStore](/hooks/use-store.md)
{% endcontent-ref %}

There is a version of this package that syncs directly to the `localStorage`:

{% content-ref url="/pages/-MeeEM7lap525qmHR0yU" %}
[Local Storage Store](/observables/local-storage-store.md)
{% endcontent-ref %}

## createStore()

Creates a new instance of observable store:

```typescript
import { createStore } from "@corets/store"

const store = createStore({ some: "data" })
```

Create a new instance without the factory function:

```typescript
import { Store } from "@corets/store"

const store = new Store({ some: "data" })
```

Create a new instance with a custom differ:

```typescript
import { createStore } from "@corets/store"

const differ = (oldValue, newValue) => true
const store = createStore({ some: "data" }, { differ })
```

## Store.get() <a href="#storeget" id="storeget"></a>

Retrieve everything from the store:

```typescript
store.get()
```

## Store.set() <a href="#storeset" id="storeset"></a>

Replace everything in the store:

```typescript
store.set({ foo: "bar" })
```

## Store.put() <a href="#storeput" id="storeput"></a>

Update store by merging new and old state:

```typescript
store.put({ some: "data" })
```

## Store.listen() <a href="#storelisten" id="storelisten"></a>

Listen to changes:

```typescript
store.listen((value) => console.log(value))
```

Listen to changes with a custom differ:

```typescript
const differ = (oldValue, newValue) => true

store.listen((value) => console.log(value), { differ })
```

Listen to a subset of data, using a custom mapper:

```typescript
const mapper = {value} => ({  })

store.listen((value) => console.log(value), { mapper })
```

## Store.use() <a href="#storeuse" id="storeuse"></a>

Convenience method for people used to React's `useState` syntax:

```typescript
import { createStore } from "@corets/store"

const [store, setStore] = createStore({ foo: "bar" }).use()
```
