Getting Started Guide
A complete walkthrough from installation to your first query
Step 1: Install Stabilize
terminal
❯bun add stabilize-orm
terminal
❯bun add -d stabilize-cli
Step 2: Set Up Your Database
config/database.ts
import { DBType, type DBConfig } from "stabilize-orm";
const dbConfig: DBConfig = { type: DBType.SQLite, connectionString: "./data/app.db", retryAttempts: 3, retryDelay: 1000,};
export default dbConfig;Step 3: Initialize the ORM
db/index.ts
import { Stabilize, type CacheConfig, type LoggerConfig, LogLevel } from "stabilize-orm";import dbConfig from "../config/database";
const cacheConfig: CacheConfig = { enabled: false, ttl: 60,};
const loggerConfig: LoggerConfig = { level: LogLevel.Info, filePath: "logs/stabilize.log", maxFileSize: 5 * 1024 * 1024, maxFiles: 3,};
export const orm = new Stabilize(dbConfig, cacheConfig, loggerConfig);Step 4: Define Your First Model
models/User.ts
import { defineModel, DataTypes } from "stabilize-orm";
export const User = defineModel({ tableName: "users", timestamps: { createdAt: "createdAt", updatedAt: "updatedAt" }, columns: { id: { type: DataTypes.STRING, required: true, unique: true }, email: { type: DataTypes.STRING, length: 255, required: true, unique: true }, name: { type: DataTypes.STRING, length: 100, required: true }, isActive: { type: DataTypes.BOOLEAN, defaultValue: true }, },});Step 5: Create the Table
terminal
❯bunx stabilize-cli generate:migration User
terminal
❯bunx stabilize-cli migrate
Step 6: Perform Your First Query
example/user-crud.ts
import { orm } from "../db";import { User } from "../models/User";import { generateUUID } from "stabilize-orm";
const userRepo = orm.getRepository(User);
// Create a userconst newUser = await userRepo.create({ id: generateUUID(), email: "alice@example.com", name: "Alice Johnson",});console.log("Created:", newUser);
// Find all usersconst allUsers = await userRepo.find().execute(orm.client);
// Find by conditionsconst user = await userRepo.findOneBy({ email: "alice@example.com" });
// Updateawait userRepo.update(user.id, { name: "Alice Smith" });
// Deleteawait userRepo.delete(user.id);Next Steps
- Learn about relationships between models
- Explore advanced query builder features
- Set up versioning for time-travel queries
- Add lifecycle hooks with
registerHooks() - Enable caching for better performance