Need a powerful, low-cost VPS for hosting your applications & bots 24/7? Check out our partner, Contabo! 🎉
Documentation: quickdb.js.org [Migration Guide]
Support: discord.gg/plexidev
NPM: npmjs.com/quick.db
Quick.db is an open-source package meant to provide an easy way for beginners and people of all levels to access & store data in a low to medium volume environment. All data is stored persistently via either better-sqlite3 or mysql2 and comes way various other quality-of-life features.
- Persistent Storage - Data doesn't disappear through restarts
- Multiple Drivers - You can use either better-sqlite3 or mysql2
- Works out of the box - No need to set up a database server, all the data is stored locally in the same project
- Beginner Friendly - Originally created for use in tutorials, the documentation is straightforward and jargon-free
- & more...
Installation
Mac Prerequisites
1. Install XCode
2. Run `npm i -g node-gyp` in terminal
3. Run `node-gyp --python /path/to/python` in terminal
npm i quick.db better-sqlite3
npm i quick.db mysql2
If you're having troubles installing, please follow this troubleshooting guide.
Windows users may need to do additional steps listed here.
Example
const { QuickDB } = require("quick.db");
const db = new QuickDB();
(async () => {
await db.set("userInfo", { difficulty: "Easy" });
await db.get("userInfo");
await db.get("userInfo.difficulty");
await db.set("userInfo", { difficulty: "Easy" });
await db.push("userInfo.items", "Sword");
await db.add("userInfo.balance", 500);
await db.push("userInfo.items", "Watch");
await db.add("userInfo.balance", 500);
await db.get("userInfo.balance");
await db.get("userInfo.items");
})();
Example With MySQLDriver
NOTE: In order to use this driver, install npm i mysql2
separately.
const { QuickDB, MySQLDriver } = require("quick.db");
(async () => {
const mysqlDriver = new MySQLDriver({
host: "localhost",
user: "me",
password: "secret",
database: "my_db",
});
await mysqlDriver.connect();
const db = new QuickDB({ driver: mysqlDriver });
await db.set("userInfo", { difficulty: "Easy" });
})();
Example With MongoDriver
NOTE: In order to use this driver, install npm i mongoose
separately.
const { QuickDB, MongoDriver } = require("quick.db");
(async () => {
const mongoDriver = new MongoDriver("mongodb://localhost/quickdb");
await mongoDriver.connect();
const db = new QuickDB({ driver: mongoDriver });
await db.set("userInfo", { difficulty: "Easy" });
await driver.close();
})();
Example With JSONDriver
NOTE: In order to use this driver, install npm i write-file-atomic
separately.
const { QuickDB, JSONDriver } = require("quick.db");
const jsonDriver = new JSONDriver();
const db = new QuickDB({ driver: jsonDriver });
await db.set("userInfo", { difficulty: "Easy" });
Example With MemoryDriver
Note: In-memory database is not persistent and is suitable for temporary caching.
const { QuickDB, MemoryDriver } = require("quick.db");
const memoryDriver = new MemoryDriver();
const db = new QuickDB({ driver: memoryDriver });
await db.set("userInfo", { difficulty: "Easy" });
Changes in 9.0.x
- Added two new database options: driver and filePath
- By default, the Sqlite driver is used. Although, you can use the MySQL driver by looking at the example above. More drivers are planned for the future, feel free to submit a pull request as well.
- Added .deleteAll() method
- Added .pull() method (see below)
- Changed all methods to use async/await
- This is because some drivers, such as MySQL, need to use await. Using async/await globally adds code consistency throughout drivers.
- Changed QuickDB into a class
- This changes how the database is initialized, read the migration guide for more information.
- Renamed the .subtract() method to .sub() to match the length of .add()
- General bug fixes
- A notable one includes storing numbers as strings in the database now working as intended.
.pull()
await db.set("myArray", [
"axe",
"sword",
"shield",
"health_potion",
"mana_potion",
]);
await db.pull("myArray", "axe");
await db.pull("myArray", ["sword", "shield"]);
await db.pull("myArray", (i) => i.includes("potion"));