diff --git a/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/NavResource.java b/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/NavResource.java
new file mode 100644
index 0000000..48c6c89
--- /dev/null
+++ b/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/NavResource.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.ui.impl.gui2;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import org.onlab.rest.BaseResource;
+import org.onosproject.ui.UiExtension;
+import org.onosproject.ui.UiExtensionService;
+import org.onosproject.ui.UiView;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ * Resource for serving the list of UIExtensions.
+ */
+@Path("nav")
+public class NavResource extends BaseResource {
+
+    @GET
+    @Path("uiextensions")
+    @Produces(MediaType.APPLICATION_JSON)
+    public Response getNavigation() throws JsonProcessingException {
+        UiExtensionService service = get(UiExtensionService.class);
+        UiViewSerializer serializer = new UiViewSerializer(UiView.class);
+        ObjectMapper mapper = new ObjectMapper();
+
+        SimpleModule module =
+                new SimpleModule("UiViewSerializer");
+        module.addSerializer(serializer);
+        mapper.registerModule(module);
+        StringBuilder sb = new StringBuilder("[");
+        boolean first = true;
+        for (UiExtension uiExt : service.getExtensions()) {
+            for (UiView view : uiExt.views()) {
+                if (first) {
+                    first = false;
+                } else {
+                    sb.append(",");
+                }
+                sb.append(mapper.writeValueAsString(view));
+            }
+        }
+        sb.append("]");
+
+        return ok(sb.toString()).build();
+    }
+
+}
diff --git a/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/UiViewSerializer.java b/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/UiViewSerializer.java
new file mode 100644
index 0000000..92cbf4c
--- /dev/null
+++ b/web/gui2/src/main/java/org/onosproject/ui/impl/gui2/UiViewSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.ui.impl.gui2;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+import org.onosproject.ui.UiExtension;
+import org.onosproject.ui.UiView;
+
+import java.io.IOException;
+
+public class UiViewSerializer extends StdSerializer<UiView> {
+
+    public UiViewSerializer(Class<UiView> t) {
+        super(t);
+    }
+
+    @Override
+    public void serialize(UiView view,
+                          JsonGenerator jsonGenerator,
+                          SerializerProvider serializerProvider)
+            throws IOException {
+        jsonGenerator.writeStartObject();
+        jsonGenerator.writeStringField("id", view.id());
+        jsonGenerator.writeStringField("icon", view.iconId());
+        jsonGenerator.writeStringField("cat", view.category().toString());
+        jsonGenerator.writeStringField("label", view.label());
+        jsonGenerator.writeEndObject();
+    }
+}
