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 b59af09..bb99a4b 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
@@ -155,7 +155,7 @@
 
     RuleDefinitionIdentifier functionIdentifier = new RuleDefinitionIdentifier();
 
-    RuleInfo ruleInfo = RuleInfo.newBuilder().setDocString(doc).addAllAttributes(attrInfos).build();
+    RuleInfo ruleInfo = RuleInfo.newBuilder().setDocString(doc).addAllAttribute(attrInfos).build();
 
     ruleInfoList.add(new RuleInfoWrapper(functionIdentifier, ast.getLocation(), ruleInfo));
 
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 c3b257b..28b93ff 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
@@ -74,7 +74,7 @@
     RepositoryRuleDefinitionIdentifier functionIdentifier =
         new RepositoryRuleDefinitionIdentifier();
 
-    RuleInfo ruleInfo = RuleInfo.newBuilder().setDocString(doc).addAllAttributes(attrInfos).build();
+    RuleInfo ruleInfo = RuleInfo.newBuilder().setDocString(doc).addAllAttribute(attrInfos).build();
 
     ruleInfoList.add(new RuleInfoWrapper(functionIdentifier, ast.getLocation(), ruleInfo));
     return functionIdentifier;
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java b/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java
index 2119b07..9ff337b 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/FunctionUtil.java
@@ -74,7 +74,7 @@
     return UserDefinedFunctionInfo.newBuilder()
         .setFunctionName(functionName)
         .setDocString(functionDescription)
-        .addAllParameters(paramsInfo)
+        .addAllParameter(paramsInfo)
         .build();
   }
 
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 fe19424..f8a1716 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
@@ -38,7 +38,7 @@
   @SuppressWarnings("unused") // Used by markdown template.
   public String ruleSummary(String ruleName, RuleInfo ruleInfo) {
     List<String> attributeNames =
-        ruleInfo.getAttributesList().stream()
+        ruleInfo.getAttributeList().stream()
             .map(attr -> attr.getName())
             .collect(Collectors.toList());
     return summary(ruleName, attributeNames);
@@ -53,7 +53,7 @@
   @SuppressWarnings("unused") // Used by markdown template.
   public String providerSummary(String providerName, ProviderInfo providerInfo) {
     List<String> fieldNames =
-        providerInfo.getFieldInfosList().stream()
+        providerInfo.getFieldInfoList().stream()
             .map(field -> field.getName())
             .collect(Collectors.toList());
     return summary(providerName, fieldNames);
@@ -68,7 +68,7 @@
   @SuppressWarnings("unused") // Used by markdown template.
   public String funcSummary(UserDefinedFunctionInfo funcInfo) {
     List<String> paramNames =
-        funcInfo.getParametersList().stream()
+        funcInfo.getParameterList().stream()
             .map(param -> param.getName())
             .collect(Collectors.toList());
     return summary(funcInfo.getFunctionName(), paramNames);
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java b/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
index ed7ec25..cfec4d6 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
@@ -39,7 +39,7 @@
       BaseFunction identifier, String docString, Collection<ProviderFieldInfo> fieldInfos) {
     this.identifier = identifier;
     this.providerInfo =
-        ProviderInfo.newBuilder().setDocString(docString).addAllFieldInfos(fieldInfos).build();
+        ProviderInfo.newBuilder().setDocString(docString).addAllFieldInfo(fieldInfos).build();
   }
 
   public BaseFunction getIdentifier() {
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 b567484..16cdb83 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
@@ -62,7 +62,7 @@
   string doc_string = 1;
 
   // The attributes of the rule.
-  repeated AttributeInfo attributes = 2;
+  repeated AttributeInfo attribute = 2;
 }
 
 // Representation of a Starlark rule attribute definition, comprised of an
@@ -91,7 +91,7 @@
   string function_name = 1;
 
   // The parameters for the function.
-  repeated FunctionParamInfo parameters = 2;
+  repeated FunctionParamInfo parameter = 2;
 
   // The documented description of the function (if specified in the function's
   // docstring).
@@ -133,5 +133,5 @@
   string doc_string = 1;
 
   // The fields of the provider.
-  repeated ProviderFieldInfo field_infos = 2;
+  repeated ProviderFieldInfo field_info = 2;
 }
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/templates/func.vm b/src/main/java/com/google/devtools/build/skydoc/rendering/templates/func.vm
index a6bd36e..9e54006 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/templates/func.vm
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/templates/func.vm
@@ -8,7 +8,7 @@
 
 ${funcInfo.docString}
 
-#if (!$funcInfo.getParametersList().isEmpty())
+#if (!$funcInfo.getParameterList().isEmpty())
 #[[###]]# Parameters
 
 <table class="params-table">
@@ -17,7 +17,7 @@
     <col class="col-description" />
   </colgroup>
   <tbody>
-#foreach ($param in $funcInfo.getParametersList())
+#foreach ($param in $funcInfo.getParameterList())
     <tr id="${funcInfo.functionName}-${param.name}">
       <td><code>${param.name}</code></td>
       <td>
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/templates/provider.vm b/src/main/java/com/google/devtools/build/skydoc/rendering/templates/provider.vm
index 2910576..b53cccf 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/templates/provider.vm
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/templates/provider.vm
@@ -8,7 +8,7 @@
 
 ${providerInfo.docString}
 
-#if (!$providerInfo.fieldInfosList.isEmpty())
+#if (!$providerInfo.fieldInfoList.isEmpty())
 #[[###]]# Fields
 
 <table class="params-table">
@@ -17,7 +17,7 @@
     <col class="col-description" />
   </colgroup>
   <tbody>
-#foreach ($field in $providerInfo.fieldInfosList)
+#foreach ($field in $providerInfo.fieldInfoList)
     <tr id="${providerName}-${field.name}">
       <td><code>${field.name}</code></td>
       <td>
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 6769aca..47d1269 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.getAttributesList().isEmpty())
+#if (!$ruleInfo.getAttributeList().isEmpty())
 <table class="params-table">
   <colgroup>
     <col class="col-param" />
     <col class="col-description" />
   </colgroup>
   <tbody>
-#foreach ($attribute in $ruleInfo.getAttributesList())
+#foreach ($attribute in $ruleInfo.getAttributeList())
     <tr id="${ruleName}-${attribute.name}">
       <td><code>${attribute.name}</code></td>
       <td>
diff --git a/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java b/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java
index cf39827..c120e90 100644
--- a/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java
+++ b/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java
@@ -141,13 +141,13 @@
   }
 
   private static Iterable<String> getAttrNames(RuleInfo ruleInfo) {
-    return ruleInfo.getAttributesList().stream()
+    return ruleInfo.getAttributeList().stream()
         .map(attr -> attr.getName())
         .collect(Collectors.toList());
   }
 
   private static Iterable<AttributeType> getAttrTypes(RuleInfo ruleInfo) {
-    return ruleInfo.getAttributesList().stream()
+    return ruleInfo.getAttributeList().stream()
         .map(attr -> attr.getType())
         .collect(Collectors.toList());
   }
