diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 0f91e50f9..d0e6deaaa 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -160,6 +160,8 @@ Make sure diagnostics are sorted according to their validated element and its co
- https://github.com/eclipse-syson/syson/issues/2057[#2057] [diagrams] Add the support for empty value for multiplicity in the ANTLR grammar.
- https://github.com/eclipse-syson/syson/issues/2053[#2053] [diagrams] The graphical `ForkNode` and `JoinNode` now use `RectangularNodeStyleDescription` and are restricted to horizontal resizing.
Consequently, their entire footprint is filled with black, ensuring that all incoming and outgoing edges maintain a valid connection point.
+- https://github.com/eclipse-syson/syson/issues/2085[#2085] [views-explorer] Adapt views explorer to group diagram representations by view definition.
+
=== New features
diff --git a/backend/application/pom.xml b/backend/application/pom.xml
index 7714799d3..24c55da53 100644
--- a/backend/application/pom.xml
+++ b/backend/application/pom.xml
@@ -17,7 +17,7 @@
org.eclipse.syson
syson-application-parent
- 2026.1.5
+ 2026.1.6
syson-application-parent
SysON Application Parent
diff --git a/backend/application/syson-application-configuration/pom.xml b/backend/application/syson-application-configuration/pom.xml
index 93567cf1a..072394cac 100644
--- a/backend/application/syson-application-configuration/pom.xml
+++ b/backend/application/syson-application-configuration/pom.xml
@@ -23,7 +23,7 @@
org.eclipse.syson
syson-application-configuration
- 2026.1.5
+ 2026.1.6
syson-application-configuration
SysON Application Configuration
@@ -69,42 +69,42 @@
org.eclipse.syson
syson-sysml-metamodel
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-sysml-metamodel-edit
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-services
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-model-services
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-form-services
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-diagram-services
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-siriusweb-customnodes-metamodel
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-siriusweb-customnodes-metamodel-edit
- 2026.1.5
+ 2026.1.6
@@ -120,7 +120,7 @@
org.eclipse.syson
syson-tests
- 2026.1.5
+ 2026.1.6
test
diff --git a/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/views/explorer/SysONViewsExplorerContentServiceDelegate.java b/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/views/explorer/SysONViewsExplorerContentServiceDelegate.java
new file mode 100644
index 000000000..2fcdc178b
--- /dev/null
+++ b/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/views/explorer/SysONViewsExplorerContentServiceDelegate.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.application.views.explorer;
+
+import java.util.AbstractMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import org.eclipse.sirius.components.core.api.IEditingContext;
+import org.eclipse.sirius.components.core.api.IObjectSearchService;
+import org.eclipse.sirius.components.core.api.IURLParser;
+import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.representations.IRepresentationDescription;
+import org.eclipse.sirius.web.application.views.viewsexplorer.services.RepresentationDescriptionType;
+import org.eclipse.sirius.web.application.views.viewsexplorer.services.RepresentationKind;
+import org.eclipse.sirius.web.application.views.viewsexplorer.services.api.IViewsExplorerContentServiceDelegate;
+import org.eclipse.sirius.web.domain.boundedcontexts.representationdata.RepresentationMetadata;
+import org.eclipse.syson.sysml.ViewDefinition;
+import org.eclipse.syson.sysml.ViewUsage;
+import org.springframework.stereotype.Service;
+
+/**
+ * Customize the retrieval of the content of the views explorer for SysON.
+ *
+ * @author frouene
+ */
+@Service
+public class SysONViewsExplorerContentServiceDelegate implements IViewsExplorerContentServiceDelegate {
+
+ private final IURLParser urlParser;
+
+ private final IObjectSearchService objectSearchService;
+
+ public SysONViewsExplorerContentServiceDelegate(IURLParser urlParser, IObjectSearchService objectSearchService) {
+ this.urlParser = Objects.requireNonNull(urlParser);
+ this.objectSearchService = Objects.requireNonNull(objectSearchService);
+ }
+
+ @Override
+ public boolean canHandle(IEditingContext editingContext) {
+ return true;
+ }
+
+ @Override
+ public List getContents(IEditingContext editingContext, List representationMetadata, Map representationDescriptions) {
+ var descriptionTypes = this.groupByDescriptionType(editingContext, representationMetadata, representationDescriptions);
+ return this.groupByKind(descriptionTypes);
+ }
+
+ private List groupByDescriptionType(IEditingContext editingContext, List allMetadata,
+ Map allDescriptions) {
+ var metadataToViewDefinitionMap = allMetadata.stream()
+ .flatMap(metadata ->
+ this.objectSearchService.getObject(editingContext, metadata.getTargetObjectId())
+ .stream()
+ .filter(ViewUsage.class::isInstance)
+ .map(ViewUsage.class::cast)
+ .map(ViewUsage::getViewDefinition)
+ .map(viewDefinition -> new AbstractMap.SimpleEntry<>(metadata, viewDefinition))
+ )
+ .collect(Collectors.toMap(
+ Map.Entry::getKey,
+ Map.Entry::getValue,
+ (existing, replacement) -> existing
+ ));
+
+ Map> viewDefinitionToMetadataMap = allMetadata.stream()
+ .collect(Collectors.groupingBy(metadataToViewDefinitionMap::get));
+
+ return viewDefinitionToMetadataMap.entrySet().stream()
+ .map(entry -> {
+ ViewDefinition viewDefinition = entry.getKey();
+ String viewDefinitionName = viewDefinition.getDeclaredShortName();
+ RepresentationMetadata firstMetadata = entry.getValue().get(0);
+ String descriptionId = firstMetadata.getDescriptionId();
+ IRepresentationDescription representationDescription = allDescriptions.get(descriptionId);
+
+ return Optional.ofNullable(representationDescription)
+ .map(rd -> {
+ if (rd instanceof DiagramDescription) {
+ return new RepresentationDescriptionType(viewDefinitionName, rd, entry.getValue());
+ }
+ return new RepresentationDescriptionType(descriptionId, rd, entry.getValue());
+ });
+ })
+ .flatMap(Optional::stream)
+ .toList();
+ }
+
+ private List groupByKind(List descriptionTypes) {
+ return descriptionTypes.stream()
+ .collect(Collectors.groupingBy(descType -> descType.representationsMetadata().get(0).getKind()))
+ .entrySet().stream()
+ .map(entry -> {
+ var kindId = entry.getKey();
+ var kindName = this.urlParser.getParameterValues(kindId).get("type").get(0);
+ return new RepresentationKind(kindId, kindName, entry.getValue());
+ })
+ .toList();
+ }
+}
diff --git a/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/views/explorer/SysONViewsExplorerLabelServiceDelegate.java b/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/views/explorer/SysONViewsExplorerLabelServiceDelegate.java
new file mode 100644
index 000000000..8259c23bd
--- /dev/null
+++ b/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/views/explorer/SysONViewsExplorerLabelServiceDelegate.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.application.views.explorer;
+
+import java.util.List;
+import java.util.Objects;
+
+import org.eclipse.sirius.components.collaborative.trees.api.IRenameTreeItemHandler;
+import org.eclipse.sirius.components.core.api.IEditingContext;
+import org.eclipse.sirius.components.core.api.ILabelService;
+import org.eclipse.sirius.components.core.api.IReadOnlyObjectPredicate;
+import org.eclipse.sirius.components.core.api.labels.StyledString;
+import org.eclipse.sirius.components.core.api.labels.StyledStringFragment;
+import org.eclipse.sirius.components.core.api.labels.StyledStringFragmentStyle;
+import org.eclipse.sirius.components.diagrams.description.DiagramDescription;
+import org.eclipse.sirius.components.representations.Failure;
+import org.eclipse.sirius.components.representations.IStatus;
+import org.eclipse.sirius.components.trees.Tree;
+import org.eclipse.sirius.components.trees.TreeItem;
+import org.eclipse.sirius.web.application.views.viewsexplorer.services.RepresentationDescriptionType;
+import org.eclipse.sirius.web.application.views.viewsexplorer.services.RepresentationKind;
+import org.eclipse.sirius.web.application.views.viewsexplorer.services.api.IViewsExplorerLabelServiceDelegate;
+import org.eclipse.sirius.web.domain.boundedcontexts.representationdata.RepresentationMetadata;
+import org.eclipse.sirius.web.domain.services.api.IMessageService;
+import org.eclipse.syson.util.StandardDiagramsConstants;
+import org.springframework.stereotype.Service;
+
+/**
+ * Provide the behavior of the views explorer fro SysON.
+ *
+ * @author frouene
+ */
+@Service
+public class SysONViewsExplorerLabelServiceDelegate implements IViewsExplorerLabelServiceDelegate {
+
+ private final IReadOnlyObjectPredicate readOnlyObjectPredicate;
+
+ private final List renameTreeItemHandlers;
+
+ private final ILabelService labelService;
+
+ private final IMessageService messageService;
+
+ public SysONViewsExplorerLabelServiceDelegate(IReadOnlyObjectPredicate readOnlyObjectPredicate, List renameTreeItemHandlers, ILabelService labelService, IMessageService messageService) {
+ this.readOnlyObjectPredicate = Objects.requireNonNull(readOnlyObjectPredicate);
+ this.renameTreeItemHandlers = Objects.requireNonNull(renameTreeItemHandlers);
+ this.labelService = Objects.requireNonNull(labelService);
+ this.messageService = Objects.requireNonNull(messageService);
+ }
+ @Override
+ public boolean canHandle(IEditingContext editingContext) {
+ return true;
+ }
+
+ @Override
+ public boolean isEditable(Object self) {
+ return !this.readOnlyObjectPredicate.test(self) && self instanceof RepresentationMetadata;
+ }
+
+ @Override
+ public StyledString getLabel(Object self) {
+ var result = StyledString.of("");
+ if (self instanceof RepresentationKind kind) {
+ String name = kind.name();
+ String size = String.valueOf(kind.representationDescriptionTypes().stream().mapToLong(descType -> descType.representationsMetadata().size()).sum());
+ result = this.getColoredLabel(name, size);
+ } else if (self instanceof RepresentationDescriptionType descriptionType) {
+ String name = descriptionType.description().getLabel();
+ if (descriptionType.description() instanceof DiagramDescription) {
+ name = StandardDiagramsConstants.getValueFromShortName(descriptionType.id());
+ }
+ String size = String.valueOf(descriptionType.representationsMetadata().size());
+ result = this.getColoredLabel(name, size);
+ } else {
+ result = this.labelService.getStyledLabel(self);
+ }
+ return result;
+ }
+
+ @Override
+ public IStatus editLabel(IEditingContext editingContext, Tree tree, TreeItem treeItem, String newValue) {
+ var optionalHandler = this.renameTreeItemHandlers.stream()
+ .filter(handler -> handler.canHandle(editingContext, treeItem, newValue))
+ .findFirst();
+
+ if (optionalHandler.isPresent()) {
+ IRenameTreeItemHandler renameTreeItemHandler = optionalHandler.get();
+ return renameTreeItemHandler.handle(editingContext, treeItem, newValue, tree);
+ }
+
+ return new Failure(this.messageService.failedToRename());
+ }
+
+ private StyledString getColoredLabel(String label, String size) {
+ return new StyledString(List.of(
+ new StyledStringFragment("%s (%s)".formatted(label.toUpperCase(), size), StyledStringFragmentStyle.newDefaultStyledStringFragmentStyle()
+ .foregroundColor("#261E588A")
+ .build())
+ ));
+ }
+}
diff --git a/backend/application/syson-application/pom.xml b/backend/application/syson-application/pom.xml
index dd57d3307..98c8b36c4 100644
--- a/backend/application/syson-application/pom.xml
+++ b/backend/application/syson-application/pom.xml
@@ -23,7 +23,7 @@
org.eclipse.syson
syson-application
- 2026.1.5
+ 2026.1.6
syson-application
SysON Application
@@ -82,62 +82,62 @@
org.eclipse.syson
syson-sysml-metamodel
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-sysml-metamodel-edit
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-frontend
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-application-configuration
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-sysml-rest-api-services
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-diagram-common-view
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-standard-diagrams-view
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-table-requirements-view
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-tree-explorer-view
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-sysml-import
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-sysml-export
- 2026.1.5
+ 2026.1.6
org.eclipse.syson
syson-sysml-validation
- 2026.1.5
+ 2026.1.6
@@ -199,7 +199,7 @@
org.eclipse.syson
syson-sysml-metamodel
- 2026.1.5
+ 2026.1.6
test-jar
test
diff --git a/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/views/view/SysONViewsExplorerViewControllerIntegrationTests.java b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/views/view/SysONViewsExplorerViewControllerIntegrationTests.java
new file mode 100644
index 000000000..3f7215e7e
--- /dev/null
+++ b/backend/application/syson-application/src/test/java/org/eclipse/syson/application/controllers/views/view/SysONViewsExplorerViewControllerIntegrationTests.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Obeo.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.syson.application.controllers.views.view;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.eclipse.sirius.components.trees.tests.TreeEventPayloadConsumer.assertRefreshedTreeThat;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.UUID;
+import java.util.function.Consumer;
+
+import org.eclipse.sirius.components.diagrams.Diagram;
+import org.eclipse.sirius.components.tables.Table;
+import org.eclipse.sirius.web.application.views.viewsexplorer.ViewsExplorerEventInput;
+import org.eclipse.sirius.web.application.views.viewsexplorer.services.ViewsExplorerTreeDescriptionProvider;
+import org.eclipse.sirius.web.tests.graphql.ViewsExplorerEventSubscriptionRunner;
+import org.eclipse.sirius.web.tests.services.representation.RepresentationIdBuilder;
+import org.eclipse.syson.AbstractIntegrationTests;
+import org.eclipse.syson.GivenSysONServer;
+import org.eclipse.syson.application.data.InterconnectionViewEmptyTestProjectData;
+import org.eclipse.syson.application.data.RequirementsTableTestProjectData;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.transaction.annotation.Transactional;
+
+import reactor.test.StepVerifier;
+
+/**
+ * Integration tests of the Views view.
+ *
+ * @author frouene
+ */
+@Transactional
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class SysONViewsExplorerViewControllerIntegrationTests extends AbstractIntegrationTests {
+
+ @Autowired
+ private ViewsExplorerEventSubscriptionRunner viewsExplorerEventSubscriptionRunner;
+
+ @DisplayName("GIVEN a project with a table, WHEN we subscribe to views events, THEN then the tree contains the table representation leaf")
+ @GivenSysONServer({ RequirementsTableTestProjectData.SCRIPT_PATH })
+ @Test
+ public void viewsWithTableRepresentation() {
+ var representationId = new RepresentationIdBuilder().buildViewsExplorerViewRepresentationId(
+ List.of(Table.KIND));
+ var defaultExplorerInput = new ViewsExplorerEventInput(UUID.randomUUID(), RequirementsTableTestProjectData.EDITING_CONTEXT_ID, representationId);
+ var defaultFlux = this.viewsExplorerEventSubscriptionRunner.run(defaultExplorerInput).flux();
+
+ Consumer