diff --git a/README.md b/README.md
index 3cc55c6..bdb42a4 100644
--- a/README.md
+++ b/README.md
@@ -60,3 +60,21 @@ At the moment there is no official node image for Windows. Therefore apply anoth
```
docker build -t mikesir87/swarm-viz --build-arg node=stefanscherer/node-windows:1709 .
```
+
+## Label Parsing
+
+Swarm-viz will parse labels beginning with `swarm-viz.` and display them in an "Extra Info" section. It also supports templating.
+
+### Link handling
+
+A label starting with `swarm-viz.link.` will use any remaining text in the identifier as a label, and will turn the value of the label into a clickable link. (Example: `swarm-viz.link.foo:http://google.com` will create the entry `foo : http://google.com`.)
+
+Templating is taken into account before link parsing, allowing for dynamic links.
+
+### Templating
+
+Input | Output
+---------------|-----------------
+${containerid} | The container's unique id string.
+${imagename} | The name of the image the container was made with. It is found by removing the extra info from the container name.
+${stackname} | The name of the stack the container is a part of. It is found from subtracting the image name from the service name.
\ No newline at end of file
diff --git a/client/src/components/nodes/SwarmVizLabelParser.jsx b/client/src/components/nodes/SwarmVizLabelParser.jsx
new file mode 100644
index 0000000..bbe4fdc
--- /dev/null
+++ b/client/src/components/nodes/SwarmVizLabelParser.jsx
@@ -0,0 +1,57 @@
+import * as React from "react";
+import {connect} from "react-redux";
+import FormRow from "./FormRow";
+import actions from "../../actions";
+
+
+function ParseLabelOutput(props){
+ var keyValue=props.keyValue.replace("${containerid}", props.containerId);
+ keyValue=keyValue.replace("${imagename}", props.imageName);
+ keyValue=keyValue.replace("${stackname}", props.serviceName.slice(0,(props.serviceName.indexOf(props.imageName)-(props.serviceName.length + 1))));
+
+ if(props.keyLabel.indexOf("swarm-viz.link.")===0){
+ return(
+