Dropping Sequelize

This is the official documentation of the @forestadmin/agent Node.js agent.

To connect your new agent to a SQL database, you have two options:

Keep SequelizeConnect directly to the database


Use the @forestadmin/datasource-sequelize package

Use the @forestadmin/datasource-sql package

For whom

Customers that have in-app installations and use the Sequelize ORM in their code

Others that only used Sequelize because it was a requirement in the legacy agents


Migration is less error-prone

You no longer need to maintain Sequelize models


You may need to rename your tables and fields to match the old install

If you wish to migrate to the new @forestadmin/datasource-sql connectors, you will need to:

Change the dependency in your agent:

$ npm remove @forestadmin/datasource-sequelize
$ npm install @forestadmin/datasource-sql

Then you can delete your Sequelize models and change the index file.

const { createAgent } = require('@forestadmin/agent');
const { createSqlDataSource } = require('@forestadmin/datasource-sql');

// Create agent and import collections from SQL database
const agent = createAgent(options).addDataSource(

Then, depending on your database structure, you may need to rename both your tables and columns: the new agent will use the same names as your database, but depending on your previous Sequelize configuration, Sequelize may have renamed all tables and fields to camelCase.

Renaming tables and fields can be done by following this example:

// Convert snake_case to camelCase
const toCamelCase = name => name.replace(/(_\w)/g, k => k[1].toUpperCase());

const agent = createAgent(options)
  // If your collection names do not match between the old and new agent
  // you can rename them using the `rename` option of the `addDataSource` function.

  // Note that in your code, you will use the camelCase names.
      rename: toCamelCase,

  // If your field names do not match between the old and new agent
  // you can rename them using the `renameField` function on all fields.

  // Note unlike with collection names, which are renamed in the internal
  // representation, you will need to use the unrenamed field names in your code.
  .use(async ds => {
    for (const collection of ds.collections)
      for (const field of Object.keys(collection.schema.fields))
        collection.renameField(field, toCamelCase(field));

Last updated