Simple and fast JSON database
🚀 Simplified syntax with db.update
, new adapter for more file format, consistent presets, automatic write error retry, and a TS error fix!
db.update
for easier updates and writes.DataFile
adapters for supporting various formats like YAML
, JSON5
, ... and adding features like encryption with minimal code.JSONPreset
to JSONFilePreset
JSONSyncPreset
to JSONFileSyncPreset
.If you were using the JSONPreset
, please rename it
- import { JSONPreset } from 'lowdb/node'
+ import { JSONFilePreset } from 'lowdb/node'
Enjoy the simplified syntax with db.update
- db.data.posts.push(newPost)
- await db.write()
+ await db.update(({ posts }) => posts.push(newPost))
Easily support other formats:
const yamlAdapter = new DataFile('db.yaml', {
parse: YAML.parse,
stringify: YAML.stringify
})
const db = new Low(yamlAdapter, { posts: [] })
Special thanks to lowdb's current sponsor: Mockend.
Your support is essential, you can sponsor this project on GitHub Sponsors :heart:
JSONPreset
and JSONSyncPreset
import { Low } from 'lowdb'
import { JSONFile } from 'lowdb/node'
const adapter = new JSONFile(file)
const defaultData = { posts: [] }
const db = new Low(adapter, defaultData)
await db.read()
import { JSONPreset } from 'lowdb/node'
const defaultData = { posts: [] }
const db = await JSONPreset('db.json', defaultData)
This will also use the Memory
adapter automatically when NODE_ENV=test
making tests faster.
Lowdb now supports the broader fs.PathLike
type which lets you use URL
type in addition to string
. This is useful for ESM.
// Read from 'db.json' relatively to the current module path using URL
JSONPreset(new URL('db.json', import.meta.url), defaultData)
Full Changelog: https://github.com/typicode/lowdb/compare/v6.0.0...v6.0.1
defaultData
parameter for Low
and LowSync
constructors to improve TypeScript experienceHow to upgrade:
// v5
const defaultData = { posts: [] }
const db = new Low(adapter)
db.data ||= defaultData
function add() {
db.data.posts.push('title') // TS error
}
// v6
const defaultData = { posts: [] }
const db = new Low(adapter, defaultData)
function add() {
db.data.posts.push('title') // No TS error
}
If you like lowdb, please sponsor my work. If you cannot, a star or tweet is always appreciated. Thank you!
Full Changelog: https://github.com/typicode/lowdb/compare/v5.0.4...v5.1.0
Better support for front-end tools like Vite, CodeSandbox, ...
To achieve this, Node and Browser (localStorage) adapters are now split in two. Besides that, there are no other breaking changes.
// Before
import { Low, JSONFile } from 'lowdb'
// After
import { Low } from 'lowdb'
import { JSONFile } from 'lowdb/node'
lowdb/node
exports JSONFile
, JSONFileSync
, TextFile
and TextFileSync
.
// Before
import { LowSync, LocalStorage } from 'lowdb'
// After
import { LowSync } from 'lowdb'
import { LocalStorage } from 'lowdb/browser'
lowdb/browser
exports LocalStorage
.
#
instead of TypeScript private
keyword for adaptersMany thanks to Mockend and everyone on GitHub Sponsors for supporting this project :heart: :owl:
TextFile
and TextFileSync
adapters to simplify writing to different formats (YAML, XML, ...) and make encryption easier.