kv-sqlite Extension

Provides persistent key-value storage using SQLite databases. Alternative to the JSON-backed core kv extension with better performance for large datasets. Scripts use the same 11-function API regardless of backend — hosts swap implementations without changing script code.

Use SQLite backend when working with large datasets (>1000 entries), need better write performance, or require concurrent access from multiple processes. Use JSON-backed core kv for simple applications with small data volumes.

Quick Start

import { createRuntimeContext, prefixFunctions } from '@rcrsr/rill';
import { createSqliteKvExtension } from '@rcrsr/rill-ext-kv-sqlite';

const ext = createSqliteKvExtension({
  mounts: {
    user: {
      mode: 'read-write',
      database: './data/app.db',
      table: 'user_state',
    },
  },
});
const functions = prefixFunctions('kv', ext);
const ctx = createRuntimeContext({ functions });

// Script: kv::set("user", "name", "Alice")

Configuration

interface SqliteKvConfig {
  mounts: Record<string, SqliteKvMountConfig>;
  maxStoreSize?: number;  // bytes (default: 10485760 = 10MB)
  writePolicy?: 'dispose' | 'immediate';  // default: 'dispose'
}

interface SqliteKvMountConfig {
  mode: 'read' | 'write' | 'read-write';
  database: string;  // SQLite file path
  table: string;  // table name
  schema?: Record<string, SchemaEntry>;
  maxEntries?: number;  // default: 10000
  maxValueSize?: number;  // bytes (default: 102400 = 100KB)
}
ParameterTypeDefaultDescription
mountsRecordNamed mount configurations (required)
maxStoreSizenumber10485760Maximum store size in bytes
writePolicystring'dispose'When to flush writes ('dispose' or 'immediate')

Mount parameters:

ParameterTypeDefaultDescription
modestringAccess mode: 'read', 'write', or 'read-write' (required)
databasestringSQLite file path (required)
tablestringTable name (required)
schemaRecordOptional schema for declared mode
maxEntriesnumber10000Maximum entries per mount
maxValueSizenumber102400Maximum value size in bytes

Example with schema:

const ext = createSqliteKvExtension({
  mounts: {
    user: {
      mode: 'read-write',
      database: './data/app.db',
      table: 'user_state',
      schema: {
        name: { type: 'string', default: '' },
        count: { type: 'number', default: 0 }
      }
    },
    cache: {
      mode: 'read-write',
      database: './data/cache.db',
      table: 'cache_entries'
    }
  },
  writePolicy: 'immediate'
});

Functions

Provides the same 11 functions as the core kv extension:

FunctionParametersReturnsDescription
getmount, keyanyGet value or schema default
get_ormount, key, defaultanyGet value or provided default
setmount, key, valueboolSet value (validates against schema)
mergemount, key, partialboolMerge dict fields into existing value
deletemount, keyboolDelete key
keysmountlistGet all keys in mount
hasmount, keyboolCheck key existence
clearmountboolClear all keys (restores schema defaults)
getAllmountdictGet all entries as dict
schemamountlistGet schema information
mountslistGet available mount names

Namespace convention: kv or state

See Also