Package Exports
- mingledb
- mingledb/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (mingledb) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
MingleDB
MingleDB is a lightweight, file-based NoSQL database built on top of the BSON serialization format with support for:
- ๐ Basic authentication
- โ Schema validation
- ๐ Query filters (including regex, range,
$in, etc.) - ๐ฆ BSON + Zlib compression
- ๐พ Flat file-based persistence
Designed for fast prototyping, embedded use, CLI apps, or offline-first environments.
๐ฆ Installation
npm install mingledb๐ Features
| Feature | Description |
|---|---|
| ๐ User Authentication | Register, login, logout, and session tracking using SHA256 hashing |
| ๐งพ Schema Definition | Define required fields, types, and unique constraints per collection |
| ๐ง Smart Querying | Supports advanced query filters like $gt, $in, $regex, etc. |
| ๐จ Compression | Uses zlib + BSON to store entries compactly |
| ๐ Flatfile Storage | Saves data in .mingleDB files with a binary header and metadata |
| ๐ Update/Delete Operations | Simple CRUD support with updateOne and deleteOne |
| ๐ Minimal Dependencies | Zero external DB needed, runs anywhere Node.js runs |
๐งช Example Usage
import MingleDB from "mingledb"; // For ES Modules
// const MingleDB = require("mingledb"); // For CommonJS
const db = new MingleDB(); // Optional: pass custom directory path
// ๐ 1. Register & Login
db.registerUser("admin", "secure123");
db.login("admin", "secure123");
// โ
2. Define schema
db.defineSchema("users", {
name: { type: "string", required: true },
email: { type: "string", required: true, unique: true },
age: { type: "number" },
});
// ๐ฅ 3. Insert documents
db.insertOne("users", {
name: "Wayne",
email: "wayne@mingle.com",
age: 25,
});
// ๐ 4. Read operations
console.log(db.findAll("users")); // All documents
console.log(db.findOne("users", { email: "wayne@mingle.com" })); // Exact match
console.log(db.find("users", { age: { $gte: 18, $lt: 30 } })); // Range filter
// ๐ 5. Update a document
db.updateOne("users", { name: "Wayne" }, { age: 26 });
// ๐๏ธ 6. Delete a document
db.deleteOne("users", { email: "wayne@mingle.com" });
// ๐ช 7. Logout
db.logout("admin");๐ง Query Operators Supported
| Operator | Description |
|---|---|
$gt, $gte, $lt, $lte |
Greater/Less Than (or Equal) |
$eq, $ne |
Equals / Not Equals |
$in, $nin |
Matches any in list / not in list |
$regex |
Regular Expression matching (case-insensitive supported via $options) |
๐ Authentication API
registerUser(username: string, password: string): void
login(username: string, password: string): boolean
isAuthenticated(username: string): boolean
logout(username: string): void๐ Schema Example
db.defineSchema("posts", {
title: { type: "string", required: true },
slug: { type: "string", unique: true },
views: { type: "number" },
});
requiredwill throw error if missinguniquewill scan the whole collection to ensure no duplicates
๐ก Use Cases
- Embedded/local-first database
- Desktop apps (Electron)
- CLI tools or utilities
- Offline PWA storage simulation
- Rapid prototyping with schema validation
- Lightweight admin panel backend
๐ง Configuration
const db = new MingleDB("./data"); // Change default directoryEach collection will be stored as a .mingleDB binary file with compressed records.
๐ File Format
Each collection file contains:
- Header (
MINGLEDBv1) - JSON metadata (collection name, version)
- Repeated entries of:
- 4-byte length
- zlib-compressed BSON document
โ Roadmap (Future Ideas)
- Auto-indexing for faster unique validation
- Nested field queries
- Export/import data as JSON
- File-level locking for concurrent writes
- Optional encryption
- WebSocket sync module
๐จโ๐ป Development
npm install
node test.js # or build your app around it๐ License
MIT ยฉ 2025 Mark Wayne Menorca
๐ฌ Feedback
Feel free to open issues or submit pull requests to suggest improvements or report bugs!