Database Seeding

Populate your database with test or initial data

Overview

Database seeding allows you to populate your database with initial or test data. This is useful for development, testing, and setting up demo environments.

Creating Seed Files

Create seed files in the seeds directory:

seeds/users.seed.tstypescript
import { Stabilize } from "stabilize-orm";
import { User } from "../models/user";
export async function seed(orm: Stabilize) {
const userRepo = orm.getRepository(User);
// Create admin user
await userRepo.create({
email: "ciniso@stabilize.xyz",
name: "Ciniso Matsebula",
role: "admin",
});
// Create regular users
const users = [
{ email: "lwazi@stabilize.xyz", name: "Lwazi Dlamini", role: "user" },
{ email: "faye@stabilize.xyz", name: "Faye Manana", role: "user" },
{ email: "botkiller@stabilize.xyz", name: "The Botkiller", role: "user" },
];
await userRepo.bulkCreate(users);
}
export async function rollback(orm: Stabilize) {
const userRepo = orm.getRepository(User);
await userRepo.truncate();
}

Best Practices

  • Keep seed files idempotent (safe to run multiple times)
  • Use transactions for complex seeding operations
  • Separate development and production seeds
  • Document the order in which seeds should run
  • Use bulk operations for large datasets
  • Clean up test data in test environments after use