diff --git a/docs/_static/extra.css b/docs/_static/extra.css
new file mode 100644
index 0000000..a122c80
--- /dev/null
+++ b/docs/_static/extra.css
@@ -0,0 +1,71 @@
+/* -*- coding: utf-8 -*-
+ Copyright 2022 Google LLC
+
+ 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
+
+     https://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.
+
+ SPDX-License-Identifier: Apache-2.0
+*/
+
+img.align-center {
+	display: block;
+}
+
+span.lib-process {
+	color: green;
+}
+
+span.lib-src {
+	color: purple;
+}
+
+span.lib-type {
+	color: orange;
+}
+
+span.lib-name {
+	color: blue;
+}
+
+span.drc-rule {
+	font-family: monospace;
+	white-space: pre;
+	display: inline-block;
+}
+
+span.drc-tag {
+	font-family: monospace;
+	white-space: pre;
+	display: inline-block;
+}
+
+span.drc-flag {
+	font-family: monospace;
+	white-space: pre;
+	display: inline-block;
+}
+
+span.layer {
+	font-family: monospace;
+	white-space: pre;
+	display: inline-block;
+}
+
+.page-content table thead th {
+	position: sticky !important;
+	top: 0;
+	z-index: 2;
+	background-color: #fff;
+	box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.4);
+}
+
+
diff --git a/docs/conf.py b/docs/conf.py
index 6068bbb..35a232f 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -31,8 +31,8 @@
 import docutils
 import os
 import re
-# import sys
-# sys.path.insert(0, os.path.abspath('.'))
+import sys
+sys.path.insert(0, os.path.abspath('.'))
 
 
 # -- Project information -----------------------------------------------------
@@ -59,6 +59,7 @@
     'sphinx.ext.mathjax',
     'sphinx.ext.napoleon',
     'sphinx.ext.todo',
+    'sphinx_pdk_roles'
 ]
 
 # Add any paths that contain templates here, relative to this directory.
diff --git a/docs/sphinx_pdk_roles.py b/docs/sphinx_pdk_roles.py
new file mode 100644
index 0000000..a5e56cc
--- /dev/null
+++ b/docs/sphinx_pdk_roles.py
@@ -0,0 +1,111 @@
+# -*- coding: utf-8 -*-
+# Copyright 2022 Google LLC
+#
+# 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
+#
+#     https://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.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+from docutils.parsers.rst import directives, roles, nodes
+import re
+
+LIB_REGEX = re.compile('gf180mcu_(?P<lib_src>[^_\s]*)_(?P<lib_type>[^_\s]*)(_(?P<lib_name>[^_\s]*))?')
+CELL_REGEX = re.compile('gf180mcu_(?P<lib_src>[^_\s]*)_(?P<lib_type>[^_\s]*)(_(?P<lib_name>[^_\s]*))?__(?P<cell_name>[^\s]*)')
+
+def lib_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
+    """Library name which gets colorized."""
+    m = LIB_REGEX.match(text)
+    if not m:
+        msg = inliner.reporter.error("Malformed library name of "+repr(text), line=lineno)
+        prb = inliner.problematic(rawtext, rawtext, msg)
+        return [prb], [msg]
+    app = inliner.document.settings.env.app
+
+    lib_process = 'gf180mcu'
+    lib_src = m.group('lib_src')
+    lib_type = m.group('lib_type')
+    lib_name = m.group('lib_name')
+
+    r = [
+        nodes.inline(lib_process, lib_process, classes=['lib-process']),
+        nodes.inline('_', '_', options=options),
+        nodes.inline(lib_src, lib_src, classes=['lib-src']),
+        nodes.inline('_', '_', options=options),
+        nodes.inline(lib_type, lib_type, classes=['lib-type']),
+    ]
+    if lib_name:
+        r.append(nodes.inline('_', '_', options=options))
+        r.append(nodes.inline(lib_name, lib_name, classes=['lib-name']))
+
+    return r, []
+
+
+def cell_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
+    """Cell name which gets colorized."""
+    m = CELL_REGEX.match(text)
+    if not m:
+        msg = inliner.reporter.error("Malformed cell name of "+repr(text), line=lineno)
+        prb = inliner.problematic(rawtext, rawtext, msg)
+        return [prb], [msg]
+    app = inliner.document.settings.env.app
+
+    lib_process = 'gf180mcu'
+    lib_src = m.group('lib_src')
+    lib_type = m.group('lib_type')
+    lib_name = m.group('lib_name')
+    cell_name = m.group('cell_name')
+
+    r = [
+        nodes.inline(lib_process, lib_process, classes=['lib-process']),
+        nodes.inline('_', '_', options=options),
+        nodes.inline(lib_src, lib_src, classes=['lib-src']),
+        nodes.inline('_', '_', options=options),
+        nodes.inline(lib_type, lib_type, classes=['lib-type']),
+    ]
+    if lib_name:
+        r.append(nodes.inline('_', '_', options=options))
+        r.append(nodes.inline(lib_name, lib_name, classes=['lib-name']))
+    r.append(nodes.inline('__', '__', options=options))
+    r.append(nodes.inline(cell_name, cell_name, classes=['cell-name']))
+
+    return r, []
+
+
+def add_role(app, new_role_name):
+    options = {
+        'class': directives.class_option(new_role_name),
+    }
+    role = roles.CustomRole(new_role_name, roles.generic_custom_role, options, "")
+    app.add_role(new_role_name, role)
+
+
+def setup(app):
+    app.add_css_file('extra.css')
+    add_role(app, 'cell_name')
+    add_role(app, 'lib_process')
+    add_role(app, 'lib_src')
+    add_role(app, 'lib_type')
+    add_role(app, 'lib_name')
+    add_role(app, 'drc_rule')
+    add_role(app, 'drc_tag')
+    add_role(app, 'drc_flag')
+    add_role(app, 'layer')
+
+    app.add_role('lib', lib_role)
+    app.add_role('cell', cell_role)
+    app.add_role('model', cell_role)
+
+    return {
+        "parallel_read_safe": True,
+        "parallel_write_safe": True,
+    }
+
diff --git a/docs/versioning.rst b/docs/versioning.rst
index 8d90ace..78504d5 100644
--- a/docs/versioning.rst
+++ b/docs/versioning.rst
@@ -1,3 +1,5 @@
+.. _Versioning:
+
 Versioning Information
 ======================
 
