Persistence

The persistence layer provides adapters that synchronise MemFS mutations to a storage backend, enabling filesystem state to survive page refreshes.

PersistenceAdapter

The interface every adapter must implement.

interface PersistenceAdapter {
  save(entry: PersistedEntry): void;
  delete(path: string): void;
  loadAll(): Promise<PersistedEntry[]>;
  clear(): Promise<void>;
  flush(): Promise<void>;
}
MethodDescription
save(entry)Upsert a single entry by path
delete(path)Remove a persisted entry
loadAll()Load all persisted entries
clear()Delete all persisted entries
flush()Force pending writes to complete

PersistedEntry

The serialised form of a filesystem entry.

interface PersistedEntry {
  path: string;
  type: "file" | "directory" | "symlink";
  content?: Uint8Array;
  target?: string;
  mtime: number;
}
PropertyTypeDescription
pathstringNormalised absolute path
type"file" | "directory" | "symlink"Entry type
contentUint8ArrayFile content (files only)
targetstringSymlink target (symlinks only)
mtimenumberLast modification time (epoch ms)

IndexedDBAdapter

Browser-compatible adapter backed by IndexedDB.

import { IndexedDBAdapter } from "@run0/jiki";

const adapter = new IndexedDBAdapter(options?: IndexedDBAdapterOptions);

IndexedDBAdapterOptions

OptionTypeDefaultDescription
dbNamestring"jiki-vfs"IndexedDB database name
storeNamestring"files"Object store name
flushIntervalMsnumber100Batch flush interval in milliseconds

InMemoryAdapter

In-memory adapter using a Map. For testing and non-browser environments.

import { InMemoryAdapter } from "@run0/jiki";

const adapter = new InMemoryAdapter();
adapter.size; // number of stored entries

MemFS persistence methods

vfs.hydrate()

Rehydrate the VFS from the persistence adapter. Returns the number of entries restored.

const count = await vfs.hydrate();

vfs.flushPersistence()

Force all pending writes to complete immediately.

await vfs.flushPersistence();

Imports

import {
  IndexedDBAdapter,
  InMemoryAdapter,
  type PersistenceAdapter,
  type PersistedEntry,
  type IndexedDBAdapterOptions,
  type MemFSOptions,
} from "@run0/jiki";