Vix.cpp docs moved to vixcpp.com
Skip to content

Local Store

The local store is the simplest part of the Softadastra JavaScript SDK.

It lets a JavaScript application write, read, check, and remove values locally before any network synchronization happens.

The core rule is:

Local state comes first.

A local store operation should not require a server, peer, transport, discovery, or cloud access.

Minimal local store example

js
import { Client, ClientOptions } from "@softadastra/sdk";

const options = ClientOptions.local("node-local");

options.enableTransport = false;
options.enableDiscovery = false;
options.enableWal = false;

const client = new Client(options);

const openResult = await client.open();

if (openResult.isErr()) {
  console.error(`failed to open client: ${openResult.error().message}`);
  process.exit(1);
}

const putResult = await client.put("app/name", "Softadastra SDK");

if (putResult.isErr()) {
  console.error(`failed to store value: ${putResult.error().message}`);
  await client.close();
  process.exit(1);
}

const valueResult = await client.get("app/name");

if (valueResult.isErr()) {
  console.error(`failed to read value: ${valueResult.error().message}`);
  await client.close();
  process.exit(1);
}

console.log("key   : app/name");
console.log(`value : ${valueResult.value().toString()}`);
console.log(`size  : ${client.size()}`);

await client.close();

Expected output:

txt
key   : app/name
value : Softadastra SDK
size  : 1

Local-only configuration

js
const options = ClientOptions.local("node-local");

options.enableTransport = false;
options.enableDiscovery = false;
options.enableWal = false;

Use this mode for first examples, tests, demos, temporary state, and simple local tools. Do not use memory-only mode when data must survive restart.

Write a value

js
const result = await client.put("profile/name", "Ada");

if (result.isErr()) {
  console.error(result.error().message);
  await client.close();
  process.exit(1);
}

Read a value

js
const result = await client.get("profile/name");

if (result.isOk()) {
  console.log(result.value().toString());
}

if (result.isErr()) {
  console.log(result.error().codeString());
}

A missing key is a normal store error. It should not crash the application.

Remove a value

js
const result = await client.remove("profile/name");

if (result.isErr()) {
  console.error(result.error().message);
}

Check if a key exists

js
if (client.contains("settings/theme")) {
  console.log("theme exists");
}

Store size

js
console.log(client.size());

Check if the store is empty

js
if (client.empty()) {
  console.log("store is empty");
}

Keys

Good key examples: app/name, settings/theme, profile/name, message/1, cache/session.

Recommended key style: domain/name or domain/id/field.

Avoid empty keys — they should return an explicit error.

Values

The SDK accepts strings directly:

js
await client.put("message", "hello");

You can also use Value explicitly:

js
import { Value } from "@softadastra/sdk";

const value = Value.fromString("hello");

await client.put("message", value);

Read values:

js
const result = await client.get("message");

if (result.isOk()) {
  console.log(result.value().toString());
}

Local store and sync

A local store write can create sync work.

js
await client.put("profile/name", "Ada");

const state = await client.syncStateInfo();

if (state.isOk()) {
  console.log(`outbox : ${state.value().outboxSize}`);
}

const tick = await client.tick();

The important point: store writes are local, sync happens later.

Store API reference

MethodPurpose
put(key, value)Write or update a local value
get(key)Read a local value
remove(key)Remove a local value
contains(key)Check whether a key exists
size()Return the number of local entries
empty()Check whether the store is empty

Run the SDK example

sh
cd ~/softadastra/sdk-js
npm install
npm run examples:local-store

Expected output:

txt
key   : app/name
value : Softadastra SDK
size  : 1

Common mistakes

Expecting persistence in memory-only mode

If enableWal is false, data is memory-only. Use persistent store when data must survive restart.

Expecting sync to complete immediately

A store write is local. Sync happens later through sync state and ticks.

Expecting peers to be required

Peers are not required for local store operations.

Ignoring results

Always check isErr() or isOk().

Summary

The local store gives you put, get, remove, contains, size, and empty.

The key idea is: local data works before the network. After local store works, the next step is persistent store.

Next step

Continue with persistent store:

Go to Persistent Store

Released under the Apache License 2.0.