UI & Customization
For end users this is a visual and navigational refresh. For anyone who forks the UI, writes a UI plugin, or maintains end-to-end test suites, it’s a large refactor — the design system consolidates, routing gains a new App Mode concept, and a code-splitting pass changes where things live.Design system consolidation removes the transitional MUI* components
Breaking for forks and plugins. Cosmetic for end users. In 1.13, the UI module carried a transitional set ofMUI* wrapper components. Collate 2.0 removes
them and standardizes on the shared @openmetadata/ui-core-components package — MUISelect,
MUITextField, MUIUserTeamSelect, MUIDomainSelect, MUIAsyncTreeSelect and several others are
deleted, along with the SELECT_MUI field type in the form builder.
Other removed modules with core-components replacements: CondensedBreadcrumb, DescriptionV1, the
legacy delete modals (DeleteModal, EntityDeleteModal, DeleteWidgetModal), activity-feed card
components, and KnowledgeGraph (replaced by OntologyExplorer — see
Lineage).
App Mode introduces a three-level resolution order
New concept. Affects the login experience and persona configuration. Collate 2.0 introduces two application experiences — Classic and AI (assistant-driven, requires the AI plugin) — resolved in this order, highest priority first:- User preference: the
appModeentry in the user’s preferences bag. - Persona
appMode:classicorAI(defaultclassic), forced on login. - Tenant
defaultAppMode: theappConfigurationsetting (ai,classic, ornull).
GET/PUT/DELETE /v1/users/{userId}/preferences), stored
in a new user_preferences table. It’s deliberately not a full entity — no versioning, audit or
soft-delete — and is cascade-deleted with the user.
AI Mode drops the /askCollate URL prefix, and no longer auto-engages
Breaking. Affects bookmarks, deep links, Slack workflows, and browser extensions built on the old AI Mode paths.
Legacy
/askCollate/* links redirect, but anything that parses or constructs those paths should be
updated. AI Mode also no longer auto-engages from a URL: in 1.13, visiting certain paths silently
switched you into the AI experience; in 2.0 the mode is explicit, driven only by the resolution order
above, and navigating to an AI-only route while in Classic Mode no longer changes it.
Nobody is moved to AI Mode automatically by the 2.0 upgrade itself. Every user stays in Classic Mode
until they switch, are assigned a persona that pins AI, or an admin sets the tenant default.
Personas gain AI context
Additive. Personas gain acontextDefinition field — “rules and settings used to materialize
the shared AI context for this persona” — plus endpoints to read and author it:
GET /v1/personas/search, GET /v1/personas/{id}/context and .../me/context,
GET/PUT /v1/personas/{id}/aiContext, and POST /v1/personas/{id}/aiContext/rules[/preview].
Context Center adds new routes that proxies must allow
Additive, but affects navigation and reverse proxies. New routes:/knowledge-center,
/context-center and its sub-pages (dashboard, articles, documents, filter, memories,
integrations, archive). New REST namespaces: /v1/contextCenter/pages,
/v1/contextCenter/memories, /v1/contextCenter/drive/** and /v1/attachments.
A large lazy-loading refactor changes fork-visible import paths
Behavioural. Affects forks with deep imports. Collate 2.0 does a large code-splitting pass: pure utility functions are extracted into*PureUtils modules, utils/CommonUtils.tsx and
utils/EntityUtils.tsx are deleted with facade imports migrated to direct sources, and
settings/entity/entity-import routers plus heavy components are lazy-loaded.
Visual and navigation changes ripple through screenshots and end-to-end tests
Behavioural. Affects end users, screenshots in your internal documentation, and end-to-end tests.New extension points are the supported way to customize in 2.0
Additive.ObservabilityRouterClassBase and ConnectionsRouterClassBase make navigation and
connection routing overridable by downstream distributions, EntityUtilClassBase.getEntityTypes()
overrides the entity-type list, and brandName replaces hard-coded product strings for
white-labelling. The component library itself gains Breadcrumbs, EmptyPlaceholder,
ProgressSteps and Toast — with one rename to know about if you consume the package: the
Select-family placeholderIcon prop is renamed to icon.