API cheatsheet
Pick
datasource-sql or datasource-mongo if you want Forest to introspect the database directly. Pick datasource-sequelize, datasource-mongoose, or datasource-active-record if you want to reuse your existing ORM models (recommended when your application already defines them).Before (Node.js, forest-express-sequelize)
After (Node.js, reusing Sequelize models)
After (Node.js, direct SQL connection)
If you don’t want to reuse your ORM models, connect directly to the database. Forest introspects the schema automatically.Before (Ruby, forest-rails with ActiveRecord)
After (Ruby, ActiveRecord)
rails generate forest_admin_rails:install to scaffold the two configuration files.
Multi-datasource
The biggest payoff of migrating: the new agent can connect to multiple data sources at once.Configuration changes
Including or excluding collections
In v1, you’d manually filter the models passed in. In v2:Validate the migration
After swapping the datasource:1
Start the new agent
Run on a different port from the legacy agent (e.g.
3001).2
Check schema generation
On first start in development, the agent writes a
.forestadmin-schema.json file. Confirm every collection you expect is listed.3
Smoke-test the API
Hit
http://localhost:3001/forest, which should return Forest metadata.4
Point a test environment at the new agent
Update the agent URL in your Forest test environment. Browse collections. Every collection should appear with the same fields.
5
Continue with customizations
Once data flows correctly, move on to migrating Smart Actions, Smart Fields, and the rest.
Common issues
A column shows up with a different name
A column shows up with a different name
Some legacy agents auto-converted snake_case to camelCase. The new agent preserves database column names by default. Use the
rename option or the field-rename customization API to align names.A relationship I had isn't appearing automatically
A relationship I had isn't appearing automatically
Foreign keys defined in the database are detected automatically. Relationships defined only in your ORM models (
belongsTo, hasMany) are detected when you use the ORM-backed datasources (datasource-sequelize, datasource-mongoose, datasource-active-record). Relationships that exist only in code paths the agent doesn’t see won’t be detected. Declare them explicitly with addManyToOneRelation, addOneToManyRelation, etc.The agent fails to connect to the database
The agent fails to connect to the database
Verify that
DATABASE_URL is set on the agent server, that the user has read permissions, and that SSL is configured if your database requires it. For SQL datasources, check sslMode.Next step
Migrate Smart Actions
Convert each Smart Action to the new
addAction API.