@alexmchan/memocache-store-sqlite
v2.0.0
Published
A cache store backed by Node.js's standard-library [`node:sqlite`](https://nodejs.org/api/sqlite.html) module for [@alexmchan/memocache](https://github.com/alexmchan/memocache). **Zero external dependencies** — no native bindings to compile.
Readme
SQLite Store for Memocache
A cache store backed by Node.js's standard-library node:sqlite module for @alexmchan/memocache. Zero external dependencies — no native bindings to compile.
Migrating from
@alexmchan/memocache-store-libsql? See Migration below.
Requirements
- Node.js >= 24.
node:sqliteships in Node 24 (still marked experimental — importing it emits anExperimentalWarning) and is stabilized in Node 26. Bun exposesnode:sqlitecompatibility as well.
Installation
pnpm install @alexmchan/memocache-store-sqliteUsage
import { createCache } from '@alexmchan/memocache'
import { Time } from '@alexmchan/memocache-common'
import { createSqliteStore } from '@alexmchan/memocache-store-sqlite'
// Open an in-memory database (default), or pass a file path to persist:
const sqliteStore = createSqliteStore({
location: ':memory:', // or './cache.db'
cleanupInterval: 5 * Time.Minute,
defaultTTL: 10 * Time.Minute,
})
const cache = createCache({
stores: [sqliteStore],
defaultFresh: 1 * Time.Minute,
defaultTTL: 5 * Time.Minute,
})
const { createCachedFunction } = cache
const cachedFunction = createCachedFunction(
async (id: string) => `Result for ${id}`,
{ cachePrefix: '/results/by-id' },
)
const result = await cachedFunction('example')You can also bring your own DatabaseSync instance:
import { DatabaseSync } from 'node:sqlite'
const database = new DatabaseSync('./cache.db')
const sqliteStore = createSqliteStore({ database })
// An injected database is caller-owned: it is NOT closed when the store is disposed.Configuration Options
database: an existingnode:sqliteDatabaseSyncinstance. If provided it is caller-owned and not closed on dispose.location: path used to open a database whendatabaseis not provided. Defaults to':memory:'.tableName: name of the table to create. Defaults tocache.defaultTTL: default time-to-live for cache entries in milliseconds. Defaults to 5 minutes.cleanupInterval: interval in milliseconds for cleaning up expired entries. Defaults to 5 minutes.logger: custom logger implementation. Defaults to the common logger.
Migration from store-libsql
This package replaces @alexmchan/memocache-store-libsql, dropping the @libsql/client dependency in favor of the standard library.
- Swap the dependency and import:
- import { createSqliteStore } from '@alexmchan/memocache-store-libsql' + import { createSqliteStore } from '@alexmchan/memocache-store-sqlite' - Replace the injected client with a
location(or aDatabaseSync):- import { createClient } from '@libsql/client' - const sqliteClient = createClient({ url: 'file::memory:' }) - const store = createSqliteStore({ sqliteClient }) + const store = createSqliteStore({ location: ':memory:' }) - Local databases only. Turso / remote
libsql://URLs are not supported bynode:sqlite. If you relied on a remote database, put a network store (e.g. Redis) in front of it instead — the LibSQL store has been removed.
Features
- Zero runtime dependencies (standard-library SQLite)
- Persistent (file) or in-memory storage
- superjson serialization —
Date,Map,undefinedround-trip intact - Automatic cleanup of expired entries (timer does not keep the process alive)
- Per-entry TTL overrides
License
See the main project license for details.
