High-Performance Embedded Key-Value Store for Node.js with TypeScript support
npm install embedded-db



A high-performance, TypeScript-first embedded key-value store for Node.js with multiple storage adapters and 100% test coverage.
- ✅ TypeScript Support: Full TypeScript definitions and type safety
- ✅ 100% Test Coverage: Comprehensive test suite with 100% code coverage
- ✅ Multiple Adapters: JSON, CompressedJSON, File, and CompressedFile storage
- ✅ High Performance: Optimized for speed and memory usage
- ✅ Zero Dependencies: No external runtime dependencies
- ✅ Auto-sync: Automatic data persistence with configurable intervals
- ✅ Process Cleanup: Automatic data sync on process exit
- ✅ Flexible Storage: Support for both string and Buffer values
- ✅ Pre-commit Hooks: Automated testing and linting
``bash`
npm install embedded-db
Or with Bun:
`bash`
bun add embedded-db
`typescript
import { EmDB } from '@bugless/em-db';
import { JSONAdapter } from '@bugless/em-db/adapters/JSON-Adapter';
// Create database with default settings
const db = new EmDB('./data.db');
// Basic operations
db.put('user:1', 'John Doe');
db.put('user:2', Buffer.from('Jane Smith'));
const user1 = db.get('user:1'); // 'John Doe'
const user2 = db.get('user:2'); // Buffer
// Get all keys and size
const keys = db.keys(); // ['user:1', 'user:2']
const size = db.size(); // 2
// Auto-sync (data is automatically persisted)
db.open(); // Start auto-sync every 1 second
db.close(); // Stop auto-sync and final sync
`
`javascript
const { EmDB } = require('@bugless/em-db');
const { CompressedJSONAdapter } = require('@bugless/em-db/adapters/CompressedJSON-Adapter');
const db = new EmDB('./data.db', {
adapter: CompressedJSONAdapter,
verbose: true
});
db.put('key', 'value');
const value = db.get('key');
`
Node-EmDB supports multiple storage adapters for different use cases:
`typescript
import { JSONAdapter } from '@bugless/em-db/adapters/JSON-Adapter';
const db = new EmDB('./data.json', { adapter: JSONAdapter });
`
`typescript
import { CompressedJSONAdapter } from '@bugless/em-db/adapters/CompressedJSON-Adapter';
const db = new EmDB('./data.db', { adapter: CompressedJSONAdapter });
`
`typescript
import { FileAdapter } from '@bugless/em-db/adapters/File-Adapter';
const db = new EmDB('./data-dir', { adapter: FileAdapter });
`
`typescript
import { CompressedFileAdapter } from '@bugless/em-db/adapters/CompressedFile-Adapter';
const db = new EmDB('./data-dir', { adapter: CompressedFileAdapter });
`
#### Constructor
`typescript`
constructor(dbPath: string, dbOpts?: EmDBOptions)
Parameters:
- dbPath: string - Path to the database file or directorydbOpts?: EmDBOptions
- - Database options
#### EmDBOptions
`typescript`
interface EmDBOptions {
append_if_exists?: boolean; // Append to existing data (default: true)
verbose?: boolean; // Enable verbose logging (default: false)
adapter?: AdapterConstructor; // Storage adapter class (default: CompressedJSONAdapter)
appendMode?: boolean; // Enable append mode for deserialization
}
#### Methods
##### put(key: string, val: string | Buffer): void
Stores a value with the given key.
Parameters:
- key: string - The key to store the value underval: string | Buffer
- - The value to store
##### get(key: string): string | Buffer | undefined
Retrieves a value by key.
Parameters:
- key: string - The key to retrieve
Returns: The stored value or undefined if not found
##### keys(): string[]
Returns an array of all keys in the database.
Returns: Array of key strings
##### size(): number
Returns the number of key-value pairs in the database.
Returns: Number of entries
##### sync(): void
Manually synchronizes data to disk.
##### open(): void
Starts automatic synchronization every 1 second.
##### close(): void
Stops automatic synchronization and performs final sync.
- Node.js >= 12.0.0
- npm >= 6.0.0
`bash`
git clone https://github.com/serendipious/Node-EmDB.git
cd Node-EmDB
npm install
`bashBuild the project
npm run build
$3
This project maintains 100% test coverage across all metrics:
- Lines: 100%
- Functions: 100%
- Branches: 100%
- Statements: 100%
Coverage reports are generated in the
coverage/ directory and can be viewed by running:`bash
npm run test:coverage:report
``The library is optimized for high performance:
- Put Operations: ~0.1-1ms per operation
- Get Operations: ~0.05-0.5ms per operation
- Memory Usage: Minimal, with efficient data structures
- Bundle Size: ~5KB minified and gzipped
MIT License - see LICENSE file for details.
We welcome contributions! Please see our CONTRIBUTING.md guide for details on how to contribute to this project.