diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index f794be5..b14030b 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -106,7 +106,8 @@
 import com.google.devtools.build.skydoc.rendering.FunctionUtil;
 import com.google.devtools.build.skydoc.rendering.MarkdownRenderer;
 import com.google.devtools.build.skydoc.rendering.ProviderInfo;
-import com.google.devtools.build.skydoc.rendering.RuleInfo;
+import com.google.devtools.build.skydoc.rendering.RuleInfoWrapper;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.UserDefinedFunctionInfo;
 import com.google.devtools.common.options.OptionsParser;
 import java.io.IOException;
@@ -346,13 +347,14 @@
       throws InterruptedException, IOException, LabelSyntaxException, EvalException,
           StarlarkEvaluationException {
 
-    List<RuleInfo> ruleInfoList = new ArrayList<>();
+    List<RuleInfoWrapper> ruleInfoList = new ArrayList<>();
     List<ProviderInfo> providerInfoList = new ArrayList<>();
     Environment env = recursiveEval(semantics, label, ruleInfoList, providerInfoList);
 
-    Map<BaseFunction, RuleInfo> ruleFunctions =
+    Map<BaseFunction, RuleInfoWrapper> ruleFunctions =
         ruleInfoList.stream()
-            .collect(Collectors.toMap(RuleInfo::getIdentifierFunction, Functions.identity()));
+            .collect(
+                Collectors.toMap(RuleInfoWrapper::getIdentifierFunction, Functions.identity()));
     Map<BaseFunction, ProviderInfo> providerInfos =
         providerInfoList.stream()
             .collect(Collectors.toMap(ProviderInfo::getIdentifier, Functions.identity()));
@@ -362,7 +364,7 @@
 
     for (Entry<String, Object> envEntry : sortedBindings.entrySet()) {
       if (ruleFunctions.containsKey(envEntry.getValue())) {
-        RuleInfo ruleInfo = ruleFunctions.get(envEntry.getValue());
+        RuleInfo ruleInfo = ruleFunctions.get(envEntry.getValue()).getRuleInfo();
         ruleInfoMap.put(envEntry.getKey(), ruleInfo);
       }
       if (providerInfos.containsKey(envEntry.getValue())) {
@@ -400,7 +402,7 @@
   private Environment recursiveEval(
       StarlarkSemantics semantics,
       Label label,
-      List<RuleInfo> ruleInfoList,
+      List<RuleInfoWrapper> ruleInfoList,
       List<ProviderInfo> providerInfoList)
       throws InterruptedException, IOException, LabelSyntaxException, StarlarkEvaluationException {
     Path path = pathOfLabel(label);
@@ -468,7 +470,7 @@
       StarlarkSemantics semantics,
       BuildFileAST buildFileAST,
       Map<String, Extension> imports,
-      List<RuleInfo> ruleInfoList,
+      List<RuleInfoWrapper> ruleInfoList,
       List<ProviderInfo> providerInfoList)
       throws InterruptedException, StarlarkEvaluationException {
 
@@ -494,7 +496,7 @@
    *     invocation information will be added
    */
   private static GlobalFrame globalFrame(
-      List<RuleInfo> ruleInfoList, List<ProviderInfo> providerInfoList) {
+      List<RuleInfoWrapper> ruleInfoList, List<ProviderInfo> providerInfoList) {
     TopLevelBootstrap topLevelBootstrap =
         new TopLevelBootstrap(
             new FakeBuildApiGlobals(),
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
index 96d6c4d..1a3e9fc 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
@@ -34,10 +34,11 @@
 import com.google.devtools.build.lib.syntax.SkylarkList;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 import com.google.devtools.build.skydoc.rendering.ProviderInfo;
-import com.google.devtools.build.skydoc.rendering.RuleInfo;
+import com.google.devtools.build.skydoc.rendering.RuleInfoWrapper;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeType;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderFieldInfo;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
@@ -54,7 +55,7 @@
 
   private static final FakeDescriptor IMPLICIT_NAME_ATTRIBUTE_DESCRIPTOR =
       new FakeDescriptor(AttributeType.NAME, "A unique name for this target.", true);
-  private final List<RuleInfo> ruleInfoList;
+  private final List<RuleInfoWrapper> ruleInfoList;
   private final List<ProviderInfo> providerInfoList;
 
   /**
@@ -62,11 +63,11 @@
    *
    * @param ruleInfoList the list of {@link RuleInfo} objects to which rule() invocation information
    *     will be added
-   * @param providerInfoList the list of {@link ProviderInfo} objects to which provider()
-   *     invocation information will be added
+   * @param providerInfoList the list of {@link ProviderInfo} objects to which provider() invocation
+   *     information will be added
    */
-  public FakeSkylarkRuleFunctionsApi(List<RuleInfo> ruleInfoList,
-      List<ProviderInfo> providerInfoList) {
+  public FakeSkylarkRuleFunctionsApi(
+      List<RuleInfoWrapper> ruleInfoList, List<ProviderInfo> providerInfoList) {
     this.ruleInfoList = ruleInfoList;
     this.providerInfoList = providerInfoList;
   }
@@ -146,7 +147,10 @@
 
     RuleDefinitionIdentifier functionIdentifier = new RuleDefinitionIdentifier();
 
-    ruleInfoList.add(new RuleInfo(functionIdentifier, ast.getLocation(), doc, attrInfos));
+    RuleInfo ruleInfo = RuleInfo.newBuilder().setDocString(doc).addAllAttributes(attrInfos).build();
+
+    ruleInfoList.add(new RuleInfoWrapper(functionIdentifier, ast.getLocation(), ruleInfo));
+
     return functionIdentifier;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
index d09d4db..c3b257b 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
@@ -25,9 +25,10 @@
 import com.google.devtools.build.lib.syntax.SkylarkList;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeDescriptor;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeSkylarkRuleFunctionsApi.AttributeNameComparator;
-import com.google.devtools.build.skydoc.rendering.RuleInfo;
+import com.google.devtools.build.skydoc.rendering.RuleInfoWrapper;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeType;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
@@ -39,9 +40,9 @@
   private static final FakeDescriptor IMPLICIT_NAME_ATTRIBUTE_DESCRIPTOR =
       new FakeDescriptor(AttributeType.NAME, "A unique name for this repository.", true);
 
-  private final List<RuleInfo> ruleInfoList;
+  private final List<RuleInfoWrapper> ruleInfoList;
 
-  public FakeRepositoryModule(List<RuleInfo> ruleInfoList) {
+  public FakeRepositoryModule(List<RuleInfoWrapper> ruleInfoList) {
     this.ruleInfoList = ruleInfoList;
   }
 
@@ -73,7 +74,9 @@
     RepositoryRuleDefinitionIdentifier functionIdentifier =
         new RepositoryRuleDefinitionIdentifier();
 
-    ruleInfoList.add(new RuleInfo(functionIdentifier, ast.getLocation(), doc, attrInfos));
+    RuleInfo ruleInfo = RuleInfo.newBuilder().setDocString(doc).addAllAttributes(attrInfos).build();
+
+    ruleInfoList.add(new RuleInfoWrapper(functionIdentifier, ast.getLocation(), ruleInfo));
     return functionIdentifier;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownRenderer.java b/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownRenderer.java
index 96dc91c..f6fd3ef 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownRenderer.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownRenderer.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.skydoc.rendering;
 
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.UserDefinedFunctionInfo;
 import java.io.IOException;
 import java.io.StringWriter;
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java b/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java
index 3e9010f..251b78d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java
@@ -18,6 +18,7 @@
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeType;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.FunctionParamInfo;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
 import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.UserDefinedFunctionInfo;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -35,9 +36,10 @@
    */
   @SuppressWarnings("unused") // Used by markdown template.
   public String ruleSummary(String ruleName, RuleInfo ruleInfo) {
-    List<String> attributeNames = ruleInfo.getAttributes().stream()
-        .map(attr -> attr.getName())
-        .collect(Collectors.toList());
+    List<String> attributeNames =
+        ruleInfo.getAttributesList().stream()
+            .map(attr -> attr.getName())
+            .collect(Collectors.toList());
     return summary(ruleName, attributeNames);
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfo.java b/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java
similarity index 66%
rename from src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfo.java
rename to src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java
index b1c795a..c371272 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/RuleInfoWrapper.java
@@ -16,27 +16,19 @@
 
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.syntax.BaseFunction;
-import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeInfo;
-import java.util.Collection;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
 
-/**
- * Stores information about a skylark rule definition.
- */
-public class RuleInfo {
+/** Stores information about a skylark rule definition. */
+public class RuleInfoWrapper {
 
   private final BaseFunction identifierFunction;
   private final Location location;
-  private final String docString;
-  private final Collection<AttributeInfo> attrInfos;
+  private final RuleInfo ruleInfo;
 
-  public RuleInfo(BaseFunction identifierFunction,
-      Location location,
-      String docString,
-      Collection<AttributeInfo> attrInfos) {
+  public RuleInfoWrapper(BaseFunction identifierFunction, Location location, RuleInfo ruleInfo) {
     this.identifierFunction = identifierFunction;
     this.location = location;
-    this.docString = docString;
-    this.attrInfos = attrInfos;
+    this.ruleInfo = ruleInfo;
   }
 
   public BaseFunction getIdentifierFunction() {
@@ -47,11 +39,7 @@
     return location;
   }
 
-  public String getDocString() {
-    return docString;
-  }
-
-  public Collection<AttributeInfo> getAttributes() {
-    return attrInfos;
+  public RuleInfo getRuleInfo() {
+    return ruleInfo;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto b/src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto
index 65b9061..fa9d011 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto
@@ -45,6 +45,15 @@
   OUTPUT_LIST = 13;
 }
 
+// Representation of a Starlark rule definition.
+message RuleInfo {
+  // The documentation string of the rule.
+  string doc_string = 1;
+
+  // The attributes of the rule.
+  repeated AttributeInfo attributes = 2;
+}
+
 // Representation of a Starlark rule attribute definition, comprised of an
 // attribute name, and a schema defined by a call to one of the 'attr' module
 // methods enumerated at
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/templates/rule.vm b/src/main/java/com/google/devtools/build/skydoc/rendering/templates/rule.vm
index d9ea3bf..6769aca 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/templates/rule.vm
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/templates/rule.vm
@@ -10,14 +10,14 @@
 
 #[[###]]# Attributes
 
-#if (!$ruleInfo.attributes.isEmpty())
+#if (!$ruleInfo.getAttributesList().isEmpty())
 <table class="params-table">
   <colgroup>
     <col class="col-param" />
     <col class="col-description" />
   </colgroup>
   <tbody>
-#foreach ($attribute in $ruleInfo.attributes)
+#foreach ($attribute in $ruleInfo.getAttributesList())
     <tr id="${ruleName}-${attribute.name}">
       <td><code>${attribute.name}</code></td>
       <td>
