mumpixfs
v0.1.0
Published
Universal file <-> MumpixDB bridge for browser, Node, Deno, and edge runtimes
Downloads
8
Maintainers
Readme
mumpixfs
Universal file <-> MumpixDB bridge.
mumpixfs stores any file as deterministic files^<id>^* keys, then reconstructs exact original bytes from those keys. It is runtime-agnostic and dependency-free.
The Mumpix Family
- MumpixDB — Mumpix Database
- MumpixFS — Mumpix File System
- MumpixFE — Mumpix Frontend
- MumpixSL — Mumpix System Level
Install
npm install mumpixfsRequirements
A DB adapter with these methods:
set(key, value)get(key)delete(key)scan(prefix?)- optional:
children(prefix),export(prefix)
Exports
Core
importFile(db, name, bytes, opts)exportFile(db, idOrPrefix)listFiles(db)deleteFile(db, idOrPrefix)serializeToMumpix(db, idOrPrefix)deserializeFromMumpix(db, wire, opts)benchmark(db, name, bytes)
Utilities
CHUNK_SIZE(64 * 1024)TEXT_MIMESbytesToBase64,base64ToBytesutf8Encode,utf8DecodeextToMime,isTextMime,generateId
Data Model
Stored under files^<id>:
meta^namemeta^mimemeta^sizemeta^extmeta^createdmeta^encodingchunks^countchunks^0..N(base64, 64KB chunks)text(for text-like MIME types)
Quick Start
import {
importFile,
exportFile,
listFiles,
serializeToMumpix,
deserializeFromMumpix
} from "mumpixfs";
const db = {
map: new Map(),
set(k, v) { this.map.set(k, v); },
get(k) { return this.map.has(k) ? this.map.get(k) : null; },
delete(k) { return this.map.delete(k); },
scan(prefix = "") {
const p = String(prefix);
const out = [];
for (const [key, value] of this.map) {
if (!p || key === p || key.startsWith(`${p}^`)) out.push({ key, value });
}
return out;
},
children(prefix) {
const head = `${prefix}^`;
const ids = new Set();
for (const { key } of this.scan(prefix)) {
if (key.startsWith(head)) ids.add(key.slice(head.length).split("^")[0]);
}
return [...ids];
}
};
const bytes = new TextEncoder().encode("# Q3 Report\nRevenue: 4.2M\n");
const imported = importFile(db, "report.md", bytes);
const restored = exportFile(db, imported.id);
console.log(imported.id, restored?.name, restored?.bytes.length);
console.log(listFiles(db));
const wire = serializeToMumpix(db, imported.id);
const copy = deserializeFromMumpix(db, wire, { newId: true });
console.log(copy?.id);Wire Format (.mumpix)
serializeToMumpix produces JSON:
{
"_mumpix": "1.0",
"prefix": "files^abc123",
"data": {
"meta": {},
"chunks": {},
"text": "..."
}
}This can be versioned, transported over WS/HTTP, and rehydrated anywhere with deserializeFromMumpix.
Benchmark
import { benchmark } from "mumpixfs";
const result = benchmark(db, "report.md", bytes);
console.log(result);Returns import/export latency, wire-size overhead, and round-trip fidelity.
Guarantees
- Stable key schema
- Byte-accurate round trip
- Works for binary and text inputs
- No runtime dependencies
License
BUSL-1.1
