--- /dev/null
+package org.simantics.district.route;
+
+import java.util.List;
+
+import org.simantics.db.Resource;
+import org.simantics.db.layer0.variable.Variable;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public interface Router {
+
+ /**
+ * @return descriptive name of the router
+ */
+ default String name() {
+ return toString();
+ }
+
+ /**
+ * Must be invoked outside of any transaction realm, like a database request or
+ * experiment thread, preferably from a background job thread.
+ *
+ * @param wayPoints waypoints for the route to find in visiting order. The
+ * resources must represents district network diagram elements.
+ * @return the piece-wise shortest path between the specified waypoints as a
+ * fully baked path of district network diagram element resources
+ * @throws RoutingException in case of any problems in routing
+ */
+ List<Variable> findShortestPath(RouterConfiguration config, List<Resource> wayPoints) throws RoutingException;
+
+}