A cross-platform unified database layer that automatically detects your runtime environment and uses the appropriate storage backend with a familiar Prisma-like API.
- π Cross-platform: Works seamlessly in Browser, Node.js, Electron, and React Native
- π Auto-detection: Automatically selects the best storage backend for your environment
- π Prisma-like API: Familiar and intuitive database operations with method chaining
- π΄ Offline-first: No network dependencies, works entirely offline
- β‘ Zero-config: Works out of the box with sensible defaults
- π― TypeScript: Full type support included
- π Data validation: Built-in validation with custom rules
- πͺ Hooks system: Extensible middleware for custom logic
- π¦ Lightweight: Minimal bundle size with tree-shaking support
- π Import/Export: Easy data backup and migration
npm install unified-db-layerFor React Native projects, also install:
npm install @react-native-async-storage/async-storageimport { UnifiedDB } from "unified-db-layer";
// Define your data models
const db = new UnifiedDB({
models: {
User: {
fields: {
id: { type: "string", primaryKey: true },
name: { type: "string", required: true },
email: { type: "string", required: true },
age: { type: "number", default: 0 },
createdAt: { type: "date", default: "now" },
},
},
Post: {
fields: {
id: { type: "string", primaryKey: true },
title: { type: "string", required: true },
content: { type: "string", required: true },
authorId: { type: "string", required: true },
published: { type: "boolean", default: false },
},
},
},
});
// Initialize the database
await db.init();
// Use the Prisma-like API
const user = await db.user.create({
name: "John Doe",
email: "john@example.com",
age: 30,
});
const users = await db.user.findMany({
where: { age: { gte: 18 } },
orderBy: { name: "asc" },
take: 10,
});
const post = await db.post.create({
title: "Hello World",
content: "This is my first post!",
authorId: user.id,
published: true,
});| Platform | Storage Backend | Capacity | Persistence |
|---|---|---|---|
| Browser | IndexedDB (preferred) | ~50MB+ | Until cleared |
| Browser | localStorage (fallback) | ~5-10MB | Until cleared |
| Node.js | File System | Disk space | Permanent |
| Electron | File System | Disk space | Permanent |
| React Native | AsyncStorage | Platform dependent | Until uninstalled |
The library automatically detects your environment and chooses the best available storage backend.
- API Reference - Complete API documentation
- Examples - Platform-specific examples and use cases
- Migration Guide - Upgrading between versions
- Offline-first applications - Work without internet connectivity
- Cross-platform development - Same API across web, mobile, and desktop
- Rapid prototyping - Quick setup without external database dependencies
- Local data caching - Store API responses and user preferences
- Development and testing - Mock databases for testing environments
// Complex queries with method chaining
const results = await db.user
.where("age", ">", 18)
.where("email", "contains", "@company.com")
.orderBy("createdAt", "desc")
.limit(50)
.findMany();// Add custom logic to database operations
db.addHook("beforeCreate", (modelName, data) => {
data.createdBy = getCurrentUserId();
return data;
});
db.addHook("afterUpdate", (modelName, data) => {
console.log(`Updated ${modelName}:`, data.id);
});// Backup your data
const backup = await db.export();
// Restore from backup
await db.import(backup, { clearFirst: true });We welcome contributions! Please see our Contributing Guide for details.
# Clone the repository
git clone https://github.com/yourusername/unified-db-layer.git
cd unified-db-layer
# Install dependencies
npm install
# Run tests
npm test
# Build the package
npm run build
# Run linting
npm run lint# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverage- Node.js: >= 14.0.0
- Browsers: Modern browsers with ES2018+ support
- React Native: >= 0.60.0 (with AsyncStorage)
- Bug Reports: GitHub Issues
- Feature Requests: GitHub Discussions
- Questions: Stack Overflow
- Relationships: Support for model relationships and joins
- Migrations: Automatic schema migrations
- Encryption: Built-in data encryption support
- Sync: Cloud synchronization capabilities
- Plugins: Plugin system for custom storage backends
- Performance: Query optimization and indexing
- Inspired by Prisma for the API design
- Built with Rollup for optimal bundling
- Tested with Jest for reliability
MIT Β© Your Name
Made with β€οΈ for the JavaScript community