Skip to main content
Deno 2 is finally here 🎉️
Learn more
Module

x/nessie/README.md

A modular Deno library for PostgreSQL, MySQL, MariaDB and SQLite migrations
Go to Latest
File

Nessie

ci deno doc

A database migration tool for deno inspired by Laravel. Supports PostgreSQL and MySQL, soon: SQLite. See documentation.

Supported databases

  • PostgreSQL
  • MySQL - Currently it works with password for 5.*, but for >=8 you have to send a blank password, see Deno MySQL for version support
  • SQLite

If you have a database system you would like to see in this list, feel free to make an issue or create a pr with your implementation.

Usage

  • make [name]: Create migration

deno run --allow-read --allow-write https://deno.land/x/nessie/cli.ts make create_users

  • migrate: Run migration - will migrate all migrations in your migration folder (sorted by timestamp) newer than the latest migration in your db

deno run --allow-net --allow-read https://deno.land/x/nessie/cli.ts migrate deno run --allow-net --allow-read https://deno.land/x/nessie/cli.ts migrate -c ./nessie.config.ts

  • rollback: Rollback - will rollback the latest migration

deno run --allow-net --allow-read https://deno.land/x/nessie/cli.ts rollback

Flags

  • -c, --config: Path to config file, will default to ./nessie.config.ts
  • -d, --debug: Enables verbose output

Contributing

Feel free to make pr’s or create an issue!

Uses

Examples

nessie.config.ts

import { nessieConfigType } from "https://deno.land/x/nessie/mod.ts";

const config: nessieConfigType = {
  migrationFolder: "./migrations",
  connection: { // These are the connection option from their respective db clients, will differ
    host: "localhost",
    port: 5432,
    user: "root",
    password: "pwd",
    name: "nessie",
  },
  dialect: "pg",
};

export default config;

Minimal example of a migration file

import { Schema } from "https://deno.land/x/nessie/mod.ts";

export const up = (scema: Schema): void => {
  scema.create("users", (table) => {
    table.id();
    table.string("name", 100).nullable();
    table.boolean("is_true").default("false");
    table.custom("custom_column int default 1");
    table.timestamps();
  });

  scema.queryString(
    "INSERT INTO users VALUES (DEFAULT, 'Deno', true, 2, DEFAULT, DEFAULT);",
  );
};

export const down = (schema: Schema): void => {
  schema.drop("users");
};

See example folder for more (in development)