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 user
const newUser = await userRepo.create({
id: generateUUID(),
email: "alice@example.com",
name: "Alice Johnson",
});
console.log("Created:", newUser);
// Find all users
const allUsers = await userRepo.find().execute(orm.client);
// Find by conditions
const user = await userRepo.findOneBy({ email: "alice@example.com" });
// Update
await userRepo.update(user.id, { name: "Alice Smith" });
// Delete
await 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