forest-express-sequelize, forest-express-mongoose, forest-rails, django-forestadmin v1) to the current generation.
The migration unlocks workflows, the MCP server for AI agents, multi-datasource, decision traces, and everything Forest has shipped since the original admin-panel era. Most teams complete the migration in 1-2 days with zero downtime.
What v2 changes
The new generation is a rebuilt agent with a cleaner, more composable customization API. The biggest changes you’ll see during migration:- Multi-datasource is native. A single agent can connect to multiple databases and APIs.
- Customization happens via a fluent API on collections.
agent.customizeCollection('users', users => users.addField(...)). - Computed fields declare their dependencies explicitly.
dependencies: ['firstName', 'lastName']. - Relationships are first-class. Many-to-one, one-to-many, many-to-many, and external relations replace most legacy “smart relationships”.
- Routes are no longer overridden directly. Most v1 route overrides become hooks or computed fields.
Before you start
Upgrade the legacy agent
@forestadmin/forestadmin-client before 1.36.2 cache a failed permission lookup for 15 minutes, so a slow response during one of the migration’s restarts can lock users out of an environment.Decide where the new agent will run
Migrate into a new environment, not a new project
Inventory your customizations
Back up your project
Plan parallel running
Migration steps
Install the new agent
- Node.js
- Ruby
Migrate datasources
Match the old field names
Migrate Smart Actions
addAction API. See Smart Actions.Migrate Smart Fields
addField with explicit dependencies. See Smart Fields.Migrate Smart Relationships
Migrate Smart Segments
Rehearse against your real layout
Test side by side
Switch your environment URL
Keep the rollback available
Remove legacy packages
What’s preserved
Your Forest UI configuration is not affected by the agent migration:- Layouts, segments, dashboards, charts
- Roles, permissions, scopes, teams
- Workspaces, workflows, inboxes
- Approval workflow configurations
- Smart Action visibility settings
What needs updating
Common issues
Field names changed between v1 and v2
Field names changed between v1 and v2
rename (collections) and renameField (fields) rather than editing the layout — see Datasources.My ORM has no datasource (TypeORM, Prisma, Drizzle...)
My ORM has no datasource (TypeORM, Prisma, Drizzle...)
datasource-sql, or datasource-mongo for MongoDB. Both read the database directly. That works, but your model callbacks won’t fire, and the agent introspects the whole schema at every boot unless you cache it.A model callback stopped firing
A model callback stopped firing
datasource-sequelize: per-record hooks such asbeforeCreatedon’t run (details).datasource-mongoose:savemiddleware doesn’t run.- ActiveRecord: all callbacks run as before.
- Mongoid: callbacks run on create and single-record edits, not on multi-record edits or deletes.
datasource-sql: none of your callbacks run.
Can I reuse my v1 .forestadmin-schema.json?
Can I reuse my v1 .forestadmin-schema.json?
A Smart Action's form behaves differently
A Smart Action's form behaves differently
A computed field is slow
A computed field is slow
getValues receives an array of records. If you naively port a v1 get function inside a .map(async ...), you’ll keep the same N+1 problem. Aggregate the underlying query.A relationship doesn't appear in the UI
A relationship doesn't appear in the UI